MS Office 自動化巨集

文章推薦指數: 80 %
投票人數:10人

提供巨集的各Windows 應用軟體中,目前以Word 5.x 以後版本、 Excel 5.x 以後版本、 ... 為特殊目的而修改程式碼的狀況在此不多加敘述,本範例簡單介紹如何利用Excel ... 撰寫日期:1996/07/10 MSOffice自動化巨集 網頁化日期:1999/02/03   本報告的目的: 1. 自動化的目的促進工作效率,減少人工成本。

(1)論文、報告及作業的圖形大量繪製或重新繪製。

(2)論文、報告及作業的相似表格大量繪製或重新繪製。

(3)重複性的動作。

2. 應用軟體特殊性影響程式架構的位置。

(1)利用Excel現成函數或功能時,如反矩陣、統計函數、線性規劃等。

(2)利用 MicroStation功能時,如圖元截取、圖元修改編製等。

3.可利用資源充沛。

(1)可利用ODBC 連結存取任一資料庫,不須修改程式碼。

(2)操作介面製作容易。

(3)可利用 Windows所提供之所有資源。

(4)可透過OLE、DDE等利用Windows下相關應用軟體資源。

4.與VisualBASIC相容。

(1)除各應用軟體所提供之特殊物件外,程式碼及觀念皆相容。

(2)若透過OLE引入應用軟體時,則特殊物件亦同時引入 VB。

  2.1 巨集   巨集(marco)的意思就是以簡單的按鍵取代一連串的按鍵動作。

後來在組合語言、程式編譯設定檔 (MakeFile)及程式啟始設定檔大量使用 marco的名詞,使巨集有了新的含義,巨集代表一連串的指定動作。

在 MSOffice中定義廣義的巨集含義,巨集是一連串的事件、動作的組合。

這種廣義的定義來說,巨集已和程式無異了。

  提供巨集的各 Windows應用軟體中,目前以 Word5.x以後版本、 Excel5.x以後版本、 Access7.0及MicroStation 95有相同的標準及操作: 1.以BASIC為基本語法,並與Visual BASICforApp.相容。

2. 可完全不用瞭解巨集語法,僅以「錄製巨集」、「執行巨集」即可使用。

3.有完整的編緝、除錯、輔助說明及操作環境。

4.均具有完整的對話盒編緝器,可建立私有的操作環境。

  2.2 建立巨集   建立巨集可以從最簡單的「錄製巨集」開始。

例如說我們有多個文件,其中有多個須要替換的詞句,如「規畫」改成「規劃」、「計劃」改成「計畫」等,雖然應用軟體皆提供了替換的工具箱,但若要替換的檔案或詞句一多,工作量則以倍份增加。

這時可考慮採用「巨集」,怎麼作呢? 1.由選單中選出「錄製巨集」,並決定巨集名。

2.正常操作單一檔案的各個替換工作。

3.單一檔案的各個替換工作完畢後,選擇「停止錄製巨集」。

4.開啟其它工作檔並選擇原巨集後執行。

  從第二個工作檔以後,所有的替換動作皆僅須一執行巨集的功能即可取代。

但並不一定所有的動作街皆可由「錄製巨集」完成,例如判斷或迴圈等,這種情形就須進入編緝巨集來完成。

例如前例改為所有同目錄或指定文件希望一次完成,則巨集就必須迴圈化來處理。

但若做該巨集僅使用少次,則須考慮時間及工作量是否有確切減少,以免增加工作時間及工作量。

  以Word來說,所有錄製之巨集皆存放於 Normal.dot下,建議利用組合管理的功能將自己需要保存的巨集另存它檔,一方面便於管理分類,一方面若有巨集病毒入侵也可以比較容易發現。

最好是將對 Normal.dot檔的存取確認盒設定打開,這樣也容易過濾巨集病毒。

  2.3 遙控應用軟體   Windows提供四種方法控制其它應用軟體或傳遞資料: 1.動態資料交換 (DDE)。

2.物件插入(OLE)。

3.剪貼簿 (Clpboard)。

4.應用程式控制 (App.Control)。

  本報告僅介紹方法 4,方法1及方法2坊間皆有超過1,000頁的專書介紹,在本報告中不多作說明,方法 1約需專章討論,在本報告中亦不多加說明。

  應用程式控制常用之主要函數分述如下: 1.AppActivate陳述式:啟動應用程式視窗。

語法:AppActivate title[,wait] 2.Shell函數:執行一個可執行的程式。

語法:Shell(pathname[,windowstyle]) 3.SendKeys陳述式:將一或多個按鍵傳送到作用中的視窗上,如同在鍵盤上做輸入一樣。

語法:SendKeys string[,wait]   由上面常用之主要函數可知,凡是要啟動其它軟體且所有步驟皆可以鍵盤處理之情形時,可以利用自動化來操作個軟體,與 DOS的批次檔頗有異曲同工之妙。

  2.4 範例   為特殊目的而修改程式碼的狀況在此不多加敘述,本範例簡單介紹如何利用 Excel強大的繪圖功能,將其繪圖的成果自動送進 Word成為報告或論文。

透過 Excel來處理繪圖的原因是 Excel有強大的文字轉取精靈,一般格式化的文字檔可輕易的轉入 Excel,不論計算、繪圖、表格皆適宜,透過 Excel處理可節省發展資料讀取程式的時間。

以繪圖來說,繪圖範例做好後,調整資料內容或資料區間即可複製送入 Word,若有範例外的功能要調整,亦可利用「錄製巨集」取得修改簡例,範例可由錄製巨集進行修改,亦可重新打入。

在 Word部份來說,Word收Excel圖要貼成Graph5的格式,因此這部份由貼上到完成利用「錄製巨集」的功能,簡單的錄製成一巨集 "PasteGraph5"以方便處理。

  Sub自動繪圖送入word()   '  讀入所有欲處理之資料檔名   DataSSEDefineName$= "D:\STAFF\Netflow\Neural\annpc\paper\autodraw.in" OpenDataSSEDefineName$ForInputAs1 TotalFileInN=0 Do  LineInput#1,TempC$  IfTempC$<>""Then   TotalFileInN=TotalFileInN+1  EndIf LoopUntilEOF(1) Close1   ReDimFileSSEInC$(1ToTotalFileInN) OpenDataSSEDefineName$ForInputAs1 Fori=1ToTotalFileInN  LineInput#1,FileSSEInC$(i) Nexti Close1   '  依序處理所有讀入之資料檔   Fori=1ToTotalFileInN   '  Select如同滑鼠點選一下!相當於在畫面下方 Sheet1按一下滑鼠左鍵    Sheets("Sheet1").Select   '  利用Excel開啟一般ASCII檔    Workbooks.OpenText Filename:=FileSSEInC$(i),StartRow:=1,DataType:= xlFixedWidth  Columns("B:C").Select  Selection.Copy  Windows("autodraw.xls").Activate  Columns("A:B").Select  ActiveSheet.Paste  Forj=Len(FileSSEInC$(i))To1Step -1   IfMid(FileSSEInC$(i),j,1)= "\"Then    CloseWindowName$= Mid(FileSSEInC$(i),j+1)    ExitFor   EndIf  Nextj  Windows(CloseWindowName$).Activate  Range("a1").Select  Selection.Copy  ActiveWindow.Close    Sheets("Sheet1").Select  Columns("A").Select  Selection.Copy  Sheets("Sheet2").Select  Columns("A").Select  ActiveSheet.Paste  Sheets("Sheet1").Select  Columns("C").Select  Selection.Copy  Sheets("Sheet2").Select  Columns("B").Select  Selection.PasteSpecialPaste:=xlValues, Operation:=xlNone    Range("a1")="觀測流量"  Range("b1")="推算流量"  MaximumLine=0  Do   MaximumLine=MaximumLine+1   TempRange$="a"+ Format(MaximumLine,"#")   IfRange(TempRange$)="" Then    MaximumLine=MaximumLine-1    ExitDo   EndIf  Loop  summy=DoEvents()  ActiveSheet.DrawingObjects("Chart 1").Select  TempRange$="a1:b"+ Format(MaximumLine,"#")  ActiveChart.ChartWizard Source:=Range(TempRange$)  summy=DoEvents()  ActiveSheet.DrawingObjects("Chart 1").Select  Selection.Copy   '  切換或啟動 Word    Application.ActivateMicrosoftApp xlMicrosoftWord  summy=DoEvents()  SendKeys"{ENTER}",True  SendKeys"^{END}",True  SendKeys"{ENTER}",True  SendKeysFileSSEInC$(i),True  SendKeys"{ENTER}",True  SendKeys"%t",True  SendKeys"m",True  SendKeys"PasteGraph5",True  SendKeys"%r",True  SendKeys"{ENTER}",True  ForTimeSleep=1To50   summy=DoEvents()  NextTimeSleep  AppActivate"MicrosoftExcel" '回到 Excel。

  Nexti   EndSub



請為這篇文章評分?