利用Delphi的OLE將資料匯至Excel |
答題得分者是:wscken
|
t0288542
中階會員 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
請問各位大大,
我在excel利用巨集錄製以下vb語法,想把它轉成delphi語法, 以下語法是將匯入至excel中,尋找有"未納"字串改變格式變成紅色字體. 請問各位大大,有沒有人知道.thks With Application.ReplaceFormat.Font .Subscript = False .ColorIndex = 3 End With Cells.Replace What:="未納", Replacement:="", LookAt:=xlPart, SearchOrder _ :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=True |
pceyes
尊榮會員 發表:70 回覆:657 積分:1140 註冊:2003-03-13 發送簡訊給我 |
難以歸類主題的討論區(Delphi) » 執行Excel內已寫好的巨集
http://delphi.ktop.com.tw/board.php?cid=30&fid=69&tid=35114
------
努力會更接近成功 |
t0288542
中階會員 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
|
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲. |
t0288542
中階會員 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
===================引 用 st33chen 文 章=================== 是不是您所要的 http://www.wscken.idv.tw/pjblog/article.asp?id=12 謝謝st33chen。 真是一個很好的東西,可是我在run過程。 有出現 陣列索引超出範圍, 程式是出現在 CM := aWorkBook.VBProject.VBComponents.Item(ModuleNm).Codemodule; 是 這段的關係ModuleNm := 'M1'; 可是M1在EXCEL怎麼會超出範圍。 麻煩大家,THKS。 |
wscken
初階會員 發表:28 回覆:75 積分:45 註冊:2003-08-05 發送簡訊給我 |
那應該是你自己捕捉下來的錯誤吧!
Try的時候發現錯誤,因為根本不存在,所以在 except的時候新增進去, 所以你就會看到他有錯誤產生,可是巨集卻又寫入的情形了 ===================引 用 t0288542 文 章=================== ===================引 用 st33chen 文 章=================== 是不是您所要的 http://www.wscken.idv.tw/pjblog/article.asp?id=12 謝謝st33chen。 真是一個很好的東西,可是我在run過程。 有出現 陣列索引超出範圍, 程式是出現在 CM := aWorkBook.VBProject.VBComponents.Item(ModuleNm).Codemodule; 是 這段的關係ModuleNm := 'M1'; 可是M1在EXCEL怎麼會超出範圍。 麻煩大家,THKS。 |
t0288542
中階會員 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
謝謝您,如只單獨執行,
CM1 := WorkBook.VBProject.VBComponents.Add(1); CM1.Name := ModuleNm; CM1.CodeModule.AddFromString(sMacro2); 是ok。 不好意思,請教您,在try內和except有什麼差別,為何您會這麼寫。 ModuleNm := 'M1'; try CM := WorkBook.VBProject.VBComponents.Item(ModuleNm).Codemodule; CM.DeleteLines(1, CM.CountOfLines); CM.InsertLines(1, sMacro2); except CM1 := WorkBook.VBProject.VBComponents.Add(1); CM1.Name := ModuleNm; CM1.CodeModule.AddFromString(sMacro2); end; 麻煩您。 |
wscken
初階會員 發表:28 回覆:75 積分:45 註冊:2003-08-05 發送簡訊給我 |
因為是假設Codemodule已經存在,直接寫入,
如果失敗,表示沒有那個Codemodule,所以就新增一個。 你可以把產生的Excel檔案存下來, 寫另外一個按鈕的事件變成這樣 [code delphi] procedure TForm1.Button3Click(Sender: TObject); const // Excel巨集內容 sMacro: String = ' Sub Dynamic_Macro(Pa1) '#13#10 ' MsgBox ("This Is Dynamic Create Excel''s Macro Test(" & Pa1 & ")") '#13#10 ' End Sub '; var OpnDia : TOpenDialog ; vSheet, vWorkBook, vExcel : Variant; CM: OleVariant; CM1: OleVariant; ModuleNm: String; begin OpnDia := TOpenDialog.Create(self) ; OpnDia.Filter := 'Excel Files (*.xls)|*.xls'; OpnDia.Title := 'Open Excel File'; if OpnDia.Execute then begin edtFile.Text := OpnDia.FileName ; try // 產生Excel物件 vExcel := CreateOleObject('Excel.Application'); vExcel.WindowState := xlMaximized; vExcel.Visible := True; // 顯示或不顯示 vExcel.DisplayAlerts := True; // 提示訊息 vExcel.ScreenUpdating := True; // 螢幕更新 vWorkBook := vExcel.WorkBooks.Open(edtFile.Text); vSheet:=vExcel.Worksheets.Item[1]; vSheet.Name:='Test Macro.'; ModuleNm := 'M1'; try CM := vWorkBook.VBProject.VBComponents.Item(ModuleNm).Codemodule; CM.DeleteLines(1, CM.CountOfLines); CM.InsertLines(1, sMacro); except on E: Exception do begin MessageDlg('Failed!' #13#10 E.Message, mtError, [mbOk], 0); CM1 := vWorkBook.VBProject.VBComponents.Add(1); CM1.Name := ModuleNm; CM1.CodeModule.AddFromString(sMacro); end; end; // vExcel.Run('Dynamic_Macro'); vExcel.Run('Dynamic_Macro', 'TEST123'); except ShowMessage('ERROR'); VarClear(vSheet); VarClear(vWorkBook); vExcel.Quit; VarClear(vExcel); end; end; end; [/code] 在去開啟剛剛已經有巨集的檔案, 就可以發現他這次except的不會執行,因為巨集已經存在了。 |
t0288542
中階會員 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
|
wscken
初階會員 發表:28 回覆:75 積分:45 註冊:2003-08-05 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |