Macrol 套用到Delphi??? |
答題得分者是:timhuang
|
moko
一般會員 發表:31 回覆:34 積分:13 註冊:2002-09-20 發送簡訊給我 |
請問一個操控EXCEL的問題,我編了一個複製貼上(不同的sheet)的巨集,
可是怎麼把這些指令轉換到Delphi去呢?我搜尋了一些問題,但還是不甚了解!!內容如下: Range("A1:F10").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("sheet1").Select
Range("B3").Select
ActiveWindow.SmallScroll Down:=-3
ActiveSheet.Paste 麻煩有人替我解答好嗎???謝謝!
|
pgdennis
資深會員 發表:41 回覆:526 積分:443 註冊:2002-05-23 發送簡訊給我 |
procedure TForm1.Button1Click(Sender: TObject); var MyExcel: Variant; x,y:integer; begin MyExcel := CreateOleOBject('Excel.Application'); MyExcel.WorkBooks.Add; MyExcel.WorkBooks[1].WorkSheets[1].Cells[1,1] := 'uu'; MyExcel.WorkBooks[1].WorkSheets[1].Cells[1,2] := 'uu11'; MyExcel.WorkBooks[1].Saveas('d:\t.xls'); MyExcel.WorkBooks[1].Close; MyExcel.WorkBooks.Add('d:\t.xls'); MyExcel.Visible := True; MyExcel.WorkBooks[1].WorkSheets[1].Range['A1:F10'].select; MyExcel.CutCopyMode := False; MyExcel.Selection.Copy; MyExcel.WorkBooks[1].WorkSheets['sheet2'].Select; MyExcel.WorkBooks[1].WorkSheets['sheet2'].Range['B3'].select; // MyExcel.SmallScroll(-3);試不出來 > 其實你也可以用 > 永遠追不上技術更新的速度 發表人 -
------
星期一,二...無窮迴圈@@ |
moko
一般會員 發表:31 回覆:34 積分:13 註冊:2002-09-20 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
引言: 感謝 pgdennis 後來我知道可以用run的方式,可否再請教,若我要把值傳出來 那要怎麼寫才能讓Delphi接收?參數怎麼寫呢? 謝謝喔!要取得某儲存格的值有兩種比較簡單的方法: 1) 直接傳入位置, 如 A7, B5 var mystr: string; mystr := VarToStr(MyExcel.WorkBooks[1].WorkSheets['sheet2'].Range['B5']); 2) 傳入的是 y, x 位置, 都是由 1開始算, 如 A7 就是 [7, 1], B5 就是 [5, 2] var mystr: string; mystr := VarToStr(MyExcel.WorkBooks[1].WorkSheets['sheet2'].Cells[5, 2]); |
moko
一般會員 發表:31 回覆:34 積分:13 註冊:2002-09-20 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
若是要由巨集傳回的話, 巨集必須是以 function 的方式宣告, 如下:
Function Macro1() 'xxxx '..... Macro1 = "123" '要回傳的值在 VBA 中是要以該 function 的名稱的變數為回傳值. End Function如此一來該 Macro1 才有回傳的能力, 在 delphi 中的呼叫傳回方式如下: procedure TForm1.Button1Click(Sender: TObject); var excel: Variant; a: string; begin excel := CreateOleObject('excel.application'); excel.WorkBooks.Open('c:\1.xls'); a := VarToStr(excel.Run('Module1.Macro1')); //就是直接取回即可 ShowMessage(a); //show出的結果就是 '123' excel.Visible := true; excel.Quit; excel := Unassigned; end; |
moko
一般會員 發表:31 回覆:34 積分:13 註冊:2002-09-20 發送簡訊給我 |
timhuang謝謝你囉...我了解了!
可是還有一個問題,假若有3或4個值
傳出值和delphi傳回值的寫法該怎麼做?
再麻煩一下了,謝謝! <>< face="Verdana, Arial, Helvetica">引言:
若是要由巨集傳回的話, 巨集必須是以 function 的方式宣告, 如下:
Function Macro1() 'xxxx '..... Macro1 = "123" '要回傳的值在 VBA 中是要以該 function 的名稱的變數為回傳值. End Function如此一來該 Macro1 才有回傳的能力, 在 delphi 中的呼叫傳回方式如下: procedure TForm1.Button1Click(Sender: TObject); var excel: Variant; a: string; begin excel := CreateOleObject('excel.application'); excel.WorkBooks.Open('c:\1.xls'); a := VarToStr(excel.Run('Module1.Macro1')); //就是直接取回即可 ShowMessage(a); //show出的結果就是 '123' excel.Visible := true; excel.Quit; excel := Unassigned; end; |
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
那就只能利用 call by reference 的方式了, 在 excel 的 macro 必須像這樣:
Function Macro1(ByRef d As String, ByRef k As String) 'xxxx '..... d = "222" k = "333" Macro1 = "123" End Function在 delphi 中就可以利用傳如的變數來進行傳回值, 如同 delphi 的 var 一般! procedure TForm1.Button1Click(Sender: TObject); var excel: Variant; a, b, c: string; begin excel := CreateOleObject('excel.application'); excel.WorkBooks.Open('c:\1.xls'); excel.Visible := true; a := VarToStr(excel.Run('Module1.Macro1',b,c)); //a 是回傳值, b是傳入給 macro 回傳的參數 ShowMessage(a); //show出的結果就是 '123' ShowMessage(b); //show出的結果就是 '222' ShowMessage(c); //show出的結果就是 '333' excel.Quit; excel := Unassigned; end;要更多個變數以此類推.. |
moko
一般會員 發表:31 回覆:34 積分:13 註冊:2002-09-20 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |