2013-03-29 60 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