1. 程式人生 > >word巨集、巨集程式設計以及VBA

word巨集、巨集程式設計以及VBA

整理自網路

 

word巨集是什麼呢?

巨集是一個批量處理程式命令,正確地運用它可以提高工作效率。微軟的office軟體允許使用者自己編寫,叫VBA的指令碼來增加其靈活性,進一步擴充它的能力。

如完成一個一開啟word檔案同時要開啟某個檔案的功能,必須要自己編寫一段稱之為巨集的指令碼。

具體做法是在選單欄點選開發工具-巨集,"巨集"彈出的對話方塊輸入巨集名,然後按"建立"按鈕會開啟visual basic編輯器,你就可以程式設計了,這個就是巨集。

學會它會有很多樂趣的。玩過街機模擬器的人肯定有體會,在格鬥遊戲中,用模擬器來錄製巨集,以實現一鍵放絕招。

 

典型應用

1.加速日常編輯和格式設定

2.使對話方塊中的選項更易於訪問

3.自動執行一系列複雜的任務

 

Word巨集功能介紹和使用

簡單點說就是批處理,但是要比批處理功能更強大.使你一個簡單的操作,比如一個左鍵點選,就可以完成多項任務,很方便的. 比如我們從網上覆制的網頁內容貼上到Word以後可能會不少空行,有的行距又很大,手工去除空行、改行距、進行頁面設定等等較麻煩,如果你錄製一個巨集以後,你只要按一下你設定的快捷鍵,一切工作就自動完成了。

另外,我們經常使用的一些功能也在不知不覺地使用巨集,比如Word的稿紙功能實際上是已經設定好的"頁首和頁尾"的一個巨集。

巨集是一系列 Word 命令和指令,這些命令和指令組合在一起,形成了一個單獨的命令,以實現任務執行的自動化。

所以, 如果在 Microsoft Word 中反覆執行某項任務,可以使用巨集自動執行該任務。

 

比如說你的電腦每天要監控並記錄很多組的資料,而且這些資料是不斷變化更新的(發/變電站記錄表記等),這樣你就需要做個巨集來將伺服器裡這些資料定時轉到一個或多個WORD文件裡來,便於計算存檔和列印.你的領導辦公室在遠一些的地方也可以通過網路來呼叫這個巨集來將資料傳到他的辦公桌的電腦上.當你啟動做好了的這個含有巨集的檔案的時候會彈出一個視窗問你是否起用巨集.

 

為了讓你具體地瞭解運用,下面舉個例子:錄製一個進行頁面設定的巨集。

 

你任意開啟一個Word文件後用滑鼠依次點選開發工具-巨集-錄製巨集,再點選"鍵盤",在"請按新快捷鍵"內填入你想設定的快捷鍵(如Ctrl+1),再單擊右邊的"指定"按鈕及"關閉"按鈕,這時開始錄製巨集,螢幕上有一個工具條,有暫停(恢復)、結束按鈕。你可以對開啟的Word文件,像以前一樣地進行頁面設定,設定完以後你點一下工具條上的"結束"按鈕,巨集就錄製好了。下次你要對一篇Word文件像錄製巨集時一樣重新進行頁面設定時,只要開啟這篇Word,再按一下"Ctrl+1"(即您設定的快捷鍵),一切OK。

 

巨集的一些典型應用

加速日常編輯和格式設定 .

組合多個命令,例如插入具有指定尺寸和邊框、指定行數和列數的表格 .

使對話方塊中的選項更易於訪問 .

自動執行一系列複雜的任務 .

Word 提供兩種方法來建立巨集:巨集錄製器和 Visual Basic 編輯器 。

 

微軟Word和巨集病毒

Visual Basic for Applications (VBA),是 Microsoft Office 裡的一種程式語言. 但由上面的定義,它完全不是一種巨集語言。然而,它的功能已經從中發展並最終替代了使用者應用程式的巨集思想,所以他被廣泛地錯誤地稱為是一種巨集語言。

VBA 可以訪問許多作業系統函式並支援文件開啟時自動執行巨集。這使得用這種語言寫計算機病毒成為可能。1990年代中後期,巨集病毒成為了最流行的計算機病毒型別之一。其它的包括巨集語言的專案,故意從其巨集語言中排除了一些功能(如:自動執行)以避免破壞程式。然而,這一特性在很多事務中受到歡迎。

 

VBA是什麼?

Visual Basic for Applications(VBA)是Visual Basic的一種巨集語言,是微軟開發出來在其桌面應用程式中執行通用的自動化(OLE)任務的程式語言。主要能用來擴充套件Windows的應用程式功能,特別是Microsoft Office軟體。也可說是一種應用程式視覺化的Basic 指令碼。該語言於1993年由微軟公司開發的的應用程式共享一種通用的自動化語言--------Visual Basic For Application(VBA),實際上VBA是寄生於VB應用程式的版本。微軟在1994年發行的Excel5.0版本中,即具備了VBA的巨集功能。

用途

由於微軟Office軟體的普及,人們常見的辦公軟體Office軟體中的WordExcelAccessPowerpoint都可以利用VBA使這些軟體的應用更高效率,例如:通過一段VBA程式碼,可以實現畫面的切換;可以VBA6實現複雜邏輯的統計(比如從多個表中,自動生成按合同號來跟蹤生產量、入庫量、銷售量、庫存量的統計清單)等。

掌握了VBA,可以發揮以下作用:

1.規範使用者的操作,控制使用者的操作行為;

2.操作介面人性化,方便使用者的操作;

3.多個步驟的手工操作通過執行VBA程式碼可以迅速的實現;

4.實現一些VB無法實現的功能。

5.VBA製做EXCEL登入系統。

6.利用VBA可以Excel內輕鬆開發出功能強大的自動化程式。

 

與VB的區別

VB是設計用於建立標準的應用程式,VBA是使已有的應用程式(EXCEL)自動化

VB具有自己的開發環境,VBA必須寄生於已有的應用程式.

要執行VB開發的應用程式,使用者不必安裝VB,因為VB開發出的應用程式是可執行檔案(*.EXE),VBA開發的程式必須依賴於它的父應用程式,例如EXCEL.

VBAVB的一個子集。

儘管存在這些不同,VBAVB在結構上仍然十分相似.事實上,如果你已經瞭解了VB,會發現學習VBA非常快.相應的,學完VBA會給學習VB打下堅實的基礎.而且,當學會在EXCEL中用VBA建立解決方案後,即已具備在WORD ACCESS OUTLOOK FOXPRO POWERPOINT 中用VBA建立解決方案的大部分知識.

VBA一個關鍵特徵是你所學的知識在微軟的一些產品中可以相互轉化.

VBA可以稱作EXCEL"遙控器".

VBA究竟是什麼?更確切地講,它是一種自動化語言,它可以使常用的程式自動化,可以建立自定義的解決方案.

此外,如果你願意,還可以將EXCEL用做開發平臺實現應用程式.

Office取得巨大成功的一個重要原因就是VBA,使用VBA可以完成很多事情,基於ExcelWordVBA小程式不計其數。

VBA程式設計師很多是業餘程式設計師,正因為業餘,解決的卻是工作中需要解決的問題;所以,VBA程式大多都是隻是在部門內部或個人使用的小工具。

集成了VBA的其他應用程式也很多,但真正能為程式增色的不多。

大多數人看到了VBA可以自動化一個程式,可以擴充套件已有程式,但沒有看到在Office中,VBA程式碼可以是錄製的,而不是寫出來的,帶來的好處是,學習曲線變得非常緩。如果沒有巨集錄製功能,要熟悉某個Office元件的物件模型,絕非一日之功。

ArcGIS為例,ArcGIS擴充套件必須使用ArcObject,不管是使用VBA也罷,VB也罷,還是C++也罷。但同時,ArcObject的學習不是一天兩天可以搞定,對於業餘程式設計師,要使用VBA來擴充套件ArcGIS,幾乎沒有可能;專業程式設計師又不屑使用VBA;而對於公司,如果要基於ArcObject來擴充套件ArcGIS,選擇VBA意味著原始碼的保護很困難。所以,ArcGISVBA就如同雞肋。

不過,學習AO的時候,使用VBA比使用其他語言要容易一些,寫幾行程式碼,然後直接執行測試結果,這種互動式的學習應該是最好的學習方法。

ArcGIS以及AOOffice相比,還有一個很大的差別,就是ArcGIS缺乏中等粒度的物件,例如WordExcelRange物件。對於Office開發,可以在對底層小粒度物件一無所知的狀況下做很多事情,這就是抽象的力量。常人可以處理的複雜度是有限的,面對數十個物件和幾百個物件,後者需要付出的努力不是10倍,而是數十倍或更多,因為在學習過程中,必須可以把這些物件在大腦中很好的組織,以控制其複雜度。

Visual Basic for Applications(簡稱VBA)是新一代標準巨集語言,是基於Visual Basic for Windows 發展而來的。它與傳統的巨集語言不同,傳統的巨集語言不具有高階語言的特徵,沒有面向物件的程式設計概念和方法。而VBA 提供了面向物件的程式設計方法,提供了相當完整的程式設計語言。VBA 易於學習掌握,可以使用巨集記錄器記錄使用者的各種操作並將其轉換為VBA 程式程式碼。這樣使用者可以容易地將日常工作轉換為VBA 程式程式碼,使工作自動化。因此,對於在工作中需要經常使用Office 套裝軟體的使用者,學用VBA 有助於使工作自動化,提高工作效率。另外,由於VBA 可以直接應用Office 套裝軟體的各項強大功能,所以對於程式設計人員的程式設計和開發更加方便快捷。

 

上述內容來自於百科

 

選單欄中沒有開發工具怎麼辦?

依次點選:檔案——選項——自定義功能區——主選項卡——開發工具,即可。

如下圖所示,選單欄中出現了“開發工具”。

 

 

例項

1:用巨集編寫“hello world !”程式

開發工具——巨集,輸入名稱“HelloWorld”,點選建立,在程式碼編寫去輸入如下程式碼:

Sub HelloWorld()

MsgBox ("hello world !")

End Sub
執行結果,如下圖:

2:簡單的使用者互動

建立如下巨集程式:
 

Sub Hello()

Dim X

X = InputBox("您的姓名是:")

MsgBox (" 歡迎" & X & "來到巨集程式設計世界!")

End Sub
 

執行效果如下圖:

可以定製title和佔位字串:

Sub Hello()

Dim X

Dim Y

X = InputBox("您的姓名是:", " 姓名輸入框(這是title)", " 您的姓名請輸入到這兒.(這是佔位字串)")

Y = MsgBox(" 歡迎您" & X & "朋友!", 0, "這裡是歡迎對話方塊.(這是title)")

End Sub

還可以使用選擇結構,根據輸入的名字是否為空,執行不同的邏輯:

Sub Hello()

Dim X

Dim Y

X = InputBox("您的姓名是:", " 姓名輸入框", " 您的姓名請輸入到這兒。")

If X <> "" Then                             '如果X的值不為“空”,那麼

Y = MsgBox(" 歡迎您" & X & "朋友!", 0, " 這裡是歡迎對話方塊.")

Else                                         '否則(即,X的值為“空”)

End If                                       '結束

End Sub

執行效果,感興趣的可以嘗試一下。

3:在巨集程式設計中使用迴圈、選擇結構,以及生成隨機數,資料型別轉換

Sub Hello()

Dim a, b, c, d                              '申明瞭四個變數,變數間用英文逗號分開,與前面例項二申明變數的寫法不同,結果相同。

a = 0                                       '這個變數用於計算您猜了多少次。

Randomize                                   '準備生成一個隨機的數字,先初始化隨機數生成器。

b = Int(100 * Rnd)                          '生成一個百以內的隨機數,“Rnd”就是“隨機數生成函式”。

Do                                          '開始迴圈

a = a + 1                                   '您猜的次數增添一次。當再次迴圈到這兒時,次數會繼續往上加。

c = InputBox("請輸入您所猜的數")            '將取得的值賦予變數“c”,“c”是字串!

d = CInt(c)                                 '將變數“c”轉化為整數,再將值賦給“d”。

If b < d Then                               '進行比較,如果猜大了。

MsgBox ("您猜的數大了")                     '顯示比較的結果。

ElseIf b > d Then                           '進行比較,如果猜小了。

MsgBox ("您猜的數小了")                     '顯示比較的結果。

Else: b = d                                 '進行比較,如果猜對了。

MsgBox ("哈哈,您猜對了!")                   '顯示比較的結果。

Exit Do                                     '既然已經猜對了,就跳出迴圈。

End If                                      '結束比較。

Loop                                        '回到前面的Do,繼續迴圈。

MsgBox ("您猜了" & a & "次!")               '彈出訊息框,並使用了字串連線。

End Sub                                     '結束程式。
 

上述例子來自於網友的“從零開始,步入Word巨集程式設計的世界”,主要用於巨集程式設計的教學,感興趣的可以自行百度,還有更多的例子。

下面的兩個例子,也來自於網路,但是更具有現實意義,是我用來解決實際工作中遇到的問題的。

 

4:如何利用巨集選中word文件裡的所有表格?

Sub SelectAllTables()
     Dim mytable As Table
      Application.ScreenUpdating = False
      For Each mytable In ActiveDocument.Tables
         mytable.Range.Editors.Add wdEditorEveryone
     Next     
    ActiveDocument.SelectAllEditableRanges (wdEditorEveryone)
    ActiveDocument.DeleteAllEditableRanges (wdEditorEveryone)
     Application.ScreenUpdating = True
End Sub

為什麼要選中所有表格呢?

當你處理一個有許多個表格的Word檔案時,比如由資料庫匯出資料字典時,資料庫中可能有50多個表,匯出到word就會相應地

有50多個表格,這些表格的原始格式,可能並不滿足我們的需要,比如,表格只顯示外邊框,內部邊框的線條都不顯示,那麼我

們要一個一個地修改表格屬性麼?還是利用Ctrl選中所有表格後再設定表格屬性?或者還有別的方法?

利用巨集,我們只需要幾行程式碼,就可以選中所有表格,不是很高效、很快捷麼?

 

 

5:如何利用巨集同時為所有表格設定樣式?

Sub AutoAdapt()

Application.Browser.Target = wdBrowseTable

For i = 1 To ActiveDocument.Tables.Count

   With ActiveDocument.Tables(i)

   .AutoFitBehavior (wdAutoFitWindow)  '根據視窗調整內容

   .Range.ParagraphFormat.Alignment = wdAlignParagraphCenter  '水平居中

   .Range.ParagraphFormat.Alignment = wdCellAlignVerticalCenter  '垂直居中

   .Borders(wdBorderHorizontal).LineStyle = wdLineStyleInset  '加水平線

   End With

Next i

End Sub

利用巨集,不僅僅可以選中所有的表格,甚至還可以直接操作表格的屬性,是不是很強大?

有興趣的朋友可以多學一點巨集程式設計的知識,好像挺有趣的。