2013-03-29 59 views
1

我有一个问题,德尔福和Excel自动化。使用此代码:Undeclared identifier .WorkSheets OLE Excel

uses 
ComObj 
var 
XlApp: Variant; 
begin 
L_v.Caption: = 'D:\bd1\support\Vi.xls'; 
XlApp: = CreateOleObject ('Excel.Application'); 
XLApp.Visible: = True; 
XLApp.WorkBooks.Open (L_vi.Caption); 
XLApp.Workbooks [1]. Worksheets. [1] Name: = 'Sheet1'; 
Sheets: = XLApp.Workbooks [1]. Worksheets ['test']; 

,但我得到一个错误的行 未声明的标识符“工作表” .....

我不明白为什么。

+0

此代码早期绑定COM看起来像一个不错的选择。 –

回答

2

(见下面我的编辑,标记更新:

如果这是你的实际代码

XLApp.Workbooks [1]. Worksheets. [1] Name: = 'Sheet1'; 

你有一个语法错误与Worksheets.[1]Name。 (该.是在错误的地方)。它应该是

XLApp.Workbooks[1].Worksheets[1].Name := 'Sheet1'; 

这工作正常,我在XE3:

var 
    XLApp: OleVariant; 
begin 
    XLApp := CreateOleObject('Excel.Application'); 
    XLApp.Visible := True; 
    XLApp.Workbooks.Open('C:\Test\Test.xls'); 
    XLApp.Workbooks[1].Worksheets[1].Name := 'New Sheet Name'; 
end; 

更新时间:您的意见后,我想我明白的问题是什么可能是你有。

我认为Error Insight是什么让你感到困惑(红色的下划线和“未定义的标识符”弹出窗口,其实是错误的)。

我在这里发布的代码是在XE3中编译和实际执行的,然后我将它发布到此处,并且它可以工作。但是如果我将光标放在Worksheets上,我会看到Undeclared identifier弹出框和红色下划线。当然,这是正确的一种方式 - Worksheets而不是宣布。不过,当您使用后期绑定时(在运行时使用CreateOleObject)时,不一定非要这样做。

Error Insight是buggy(自从它被添加到IDE以来)。我做的第一件事(当我看到bug没有被修复时)将它关闭(Tools-> Options-> Editor Options-> Code Insight,取消选中右侧的Error Insight)。让真正的编译器解决问题。

+0

感谢您的回复。我提出了你告诉我的更正,但我总是遇到同样的问题。我可以用ex.cells [1,1]:='test'编写一个单元格,但工作表和名称以红色突出显示并给出错误。 但是,对我而言,不影响重命名工作表...我有一个xls文件有50张:我需要选择一个工作表(例如1或49),但我不能... 谢谢 – user2225950

+0

我在我发布之前编译并在XE3中运行这个确切的代码。有用。如果它不适合你,你使用不同的代码,我从这里看不到。我使用的工作簿有三张工作表,我可以很好地访问他们中的每一个。当你说“红色加下划线”时,这并不意味着什么(这可能只是Error Insight中的一个错误,这是众所周知的 - 它只是视觉效果而已)。代码是否编译?如果是这样,运行它会发生什么?你有例外吗?如果是这样,你得到的**确切**错误信息是什么? –

+0

错误是:未声明的标识符'工作表'在行....如果我没有编译错误。奇怪.... 但是,如果我写---表:=例如。工作簿[1]。工作表['sheet2']; ---选择了Sheet2并保留在Sheet1上。 这是我使用的代码 尝试 表:= Ex.Workbooks [1]。工作表['ISP .. 13']; 除了 E:例外 开始 MessageDlg('Error woorksheets。',MtError,[mbOK],0); 退出; 结束; – user2225950

0

的Try ...

Var 
Sheet: Olevariant; 
... 
    for possheet := 1 to newWorkbook.Worksheets.Count do 
    Begin 
     Sheet:=newWorkbook.Sheets[possheet]; 
     combobox1.Items.Add(Sheet.Name) 
    End; 
+1

请在答案中加入更多信息。为什么要尝试这个?它能做什么?什么会改变? – Athafoud