• Home
  • Market
  • Finance
  • Running
  • Reading
  • Research
  • Travel
  • Lifestyle
  • About Me
No Result
View All Result
  • Home
  • Market
  • Finance
  • Running
  • Reading
  • Research
  • Travel
  • Lifestyle
  • About Me
No Result
View All Result
閱讀、跑步與書寫 ~~只要努力學習,知識一定能夠成為力量

自學Excel VBA系列-如何用VBA控制WORD?

2022 年 7 月 18 日
Home Reading Programming

VBA的最強大的實務功能莫過於協助我們解決繁冗重複的工作,讓我們空出頭腦去處理更多更有意義的事情,好比說是換個公司名號、改個日期,發送通知信件等等。一直點擊EXCEL名單,在WORD裡面COPY AND PASTE,每天重覆千萬次相同操作,可以說是痛苦兼無聊。

所以,接下來,讓我們看看怎樣可以試著偷偷地終結這種無聊生活吧,為什麼要偷偷地呢?因為你要是讓其它人知道,你的工作量就會被編程加重哦。

開個玩笑,我們正式進入主題之前,最好要先有點VBA的基礎,可以參考<Excel VBA的自學心得分享>。

記得,開始之前一定要在VBA裡面的工具–>設定引用項目–>勾選Microsoft Office 14.0 Object Library。

自學VBA WORD

內容目錄

  • 啟動、關閉Word應用程式
  • Set的物件變數
  • 開啟指定路徑的Word文件
  • 自學VBA-練習實作

啟動、關閉Word應用程式

‘啟動Word 然後關閉

Sub launchWord()

      ‘宣告儲存Word的變數

      Dim wdApp As Word.Application

      ‘對wdapp這個對象賦值

      Set wdApp = New Word.Application

      ‘顯示Word

      wdApp.Visible = True

      MsgBox  “OPEN WORD”

     ‘關閉Word

     wdApp.Quit

     ‘物件不參照任何內容

     Set wdApp = Nothing

End Sub

Set的物件變數

關於Set的物件變數,如果已經了解Set的朋友,可以跳過。

剛才的例子執行了三個動作:1) 打開word。2) 輸出訊息方塊。 3) 關閉word。

整個程式碼大概就只有Set的用法比較難理解,下面我們再舉個例子來解釋Set。

‘不使用set物件變數

Sub controlWorksheet()

‘輸出工作表名稱

MsgBox Worksheets(“sheet1”).Name

‘將工作表複製到右側

Worksheets(“sheet1”).Copy After:=Worksheets(“sheet1”)

End Sub

執行了兩個動作:1)輸出工作表名稱的訊息方塊。2) 將工作表複製到右側。我們可以看到Worksheets(“sheet1”)重複了三次,重複的程式寫法,會降低程式的可讀性和可維護性,下面我們可以用Set來解決重複編寫的問題。

‘使用set物件變數

Sub controlWorksheet2()

‘宣告Worksheet型的物件變數

Dim ws As Worksheet

‘將工作表Sheet1儲存在變數

Set ws = Worksheets(“sheet1”)

‘輸出工作表名稱

MsgBox ws.Name

‘將工作表複製到右側

ws.Copy After:=ws

End Sub

我們大概可以歸納出Set跟我們通常對變數賦值有點不一樣,再舉個例子,

例子1) 如果儲存格”A1”的值為1,

我們用set rng=range(“A1”) ,這個時候rng的值會參照range(“A1”)的值,

我們寫rng = 2,儲存格range(“A1”)等於2。

例子2) 如果儲存格”A1”的值為1,

我們不用set直接賦值給rng, rng=range(“A1”),這時候rng等於1,

我們寫rng = 2,這時候,儲存格range(“A1”)仍然等於1。

這就是rng作為變數直接賦值以及rng作為對象賦予一個參照的不同地方。以後只要關於對象的操作,Set就會經常出現在各種地方,所以為什麼我會花這麼多篇幅去解釋。

下面我們再回到Word的操作。

開啟指定路徑的Word文件

‘打開指定路徑的Word文件 然後關閉

Sub openWord()

‘—啟動Word應用程式—

      Dim wdApp As Word.Application

      Set wdApp = New Word.Application

      wdApp.Visible = True

‘—打開Word文件—

      ‘打開文件的路徑

      Dim path As String

      path = “C:\openword”

      ‘打開文件

      Dim wdDoc As Word.Document

      Set wdDoc = wdApp.Documents.Open(path & “\word.docx”)

      MsgBox “文件已打開”

     ‘關閉Word

     wdDoc.Close

     ‘物件不參照任何內容

     Set wdDoc = Nothing

‘—關閉Word應用程式—

     wdApp.Quit

     Set wdApp = Nothing

End Sub


打開指定文件的寫法跟最開始的launchWord()一樣,只是多了一個指定路徑文件的操作,當然,在此之前,請不忘記要先預備好指定路徑的檔案才能夠打開,我們隨便加上一些字以及表格作為標誌。

Word檔的原始檔內容

正式開始對Word文件的操作

在打開與關閉Word之間的地方加入以下語法

     ‘在段落開頭插入文字

      wdDoc.Paragraphs(1).Range.InsertBefore “2020年1月1日”

      wdDoc.Paragraphs(3).Range.InsertBefore “A公司”

      ‘將字串插入表格內的儲存格

      wdDoc.Tables(1).Cell(Row:=1, Column:=1).Range.InsertBefore “你好”

      wdDoc.Tables(2).Cell(Row:=1, Column:=1).Range.InsertBefore “感謝支持”

主要的寫法是在段落加入文字或者在表格加入文字,用表格的用處很多,只要框線無色就不會顯示是表格,而且表格可以固定位置,即使插入多行文字,也不會影響後面的段落。

跑程式後的結果

自學VBA-練習實作

下面我們動手動作實作一下,打開指定路徑的Word文件,然後添加Excel裡面的資訊,再另存新檔,關閉Word。

Word檔的原始檔內容
Excel檔的原始檔內容

‘打開指定路徑的Word文件 然後關閉

Sub openExample()

‘—啟動Word應用程式—

      Dim wdApp As Word.Application

      Set wdApp = New Word.Application

      wdApp.Visible = True

‘—打開Word文件—

      ‘打開文件的路徑

      Dim path As String

      path = “C:\openword”

      ‘打開文件

      Dim wdDoc As Word.Document

      Set wdDoc = wdApp.Documents.Open(path & “\example.docx”)

      ‘MsgBox “文件已打開”

      ‘在段落開頭插入文字

      wdDoc.Paragraphs(1).Range.InsertBefore Format(Now, “yyyy年m月d日”)

      wdDoc.Paragraphs(5).Range.InsertBefore Cells(1, 1)

      ‘將字串插入表格內的儲存格

      wdDoc.Tables(1).Cell(Row:=1, Column:=1).Range.InsertBefore Cells(1, 2) & Cells(1, 3)

      ‘使用其它名稱儲存檔案

      wdDoc.SaveAs path & “\” & Cells(1, 1).Value & “.docx”

      ‘關閉Word

      wdDoc.Close savechanges:=wdDoNotSaveChanges

      ‘物件不參照任何內容

      Set wdDoc = Nothing

‘—關閉Word應用程式—

     wdApp.Quit

     Set wdApp = Nothing

End Sub

跑程式後的結果

這個例子再加上Excel裡面儲存格的值,最後再加上特定名字儲存起來。

如果要做N次的話,各位朋友應該知道怎麼做了吧。

就是寫個FOR NEXT,然後將cells(i , j) 放入適當的變數就可以囉。

Dim i As Long 

‘有多少筆資料迴圈多少次

Dim maxRow As Long

  maxRow = Cells(Rows.Count, 1).End(xlUp).row

  For i = 1 to maxrRow

  …………….

  Next i

如果需要學習vba對outlook的操作,可以參考《自學Excel VBA系列-如何用VBA控制OutLook?》這篇。

Tags: ExcelWord程式學習VBA
Share584Tweet365Share146
Charlie chacha

Charlie chacha

Related Posts

EXCEL VLOOKUP 文字轉數字 數字轉文字
Programming

自學Excel系列 – 使用Vlookup函數的1個小技巧, 文字與數字之間的轉換問題(文字轉數字 數字轉文字)

2023 年 7 月 6 日

Vlookup函數 Vlookup的泛用性相信學過Excel的人都應該知道,有時候因為資料的性質,我們無法(最主要是沒有時間)一格一格去改變資料的屬性,導致我們使用Vlookup時無法找到目標的值,所...

自學Excel VBA系列-如何用VBA控制OutLook?
Lifestyle

Excel強大的組合函數練習,資料庫關鍵字搜索,Address + Match + Index + Find 組合拳

2023 年 3 月 18 日

想要把Excel的功能變得強大,函數組合使用必不可少,例如之前介紹的Offset函數,《一個強大的Excel函數OFFSET,動態選取資料範圍》,非常好用。本文介紹另外一個經常會使用到的組合拳:Add...

AI人工智能
Market

探索人工智能,了解OpenAI的未來與潛力–ChatGPT使用心得 ChatGPT可以幫到你做什麼?人工智能 語言生成 數據分析

2023 年 7 月 6 日

OpenAI ChatGPT ChatGPT的名號,大家都應該非常熟悉。地區破解什麼就不討論,兩個條件,地區VPN,以及SMS認證服務,還不能是虛擬號碼,我花了幾天時間也找不到方便安全的省錢方法,建議...

vba 自學
Programming

自學VBA系列,網頁抓取的按鈕選擇及下拉式選單問題

2022 年 12 月 29 日

網頁抓取的過程中經常會出現各種各樣的問題,今天就按鈕選擇及下拉式選單碰到的問題略作解釋。 按鈕選擇問題: Sub NewUpdatedata() 'Dim ur As String, b, ie As...

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

About Me

閱讀、跑步與書寫 ~~只要努力學習,知識一定能夠成為力量

Charlie Chacha

Blogger and Runner

Welcome to my blog! I'm Charlie Chacha, and here I'll be sharing valuable insights on living a fulfilling life and achieving financial success. Join me as we delve into topics such as effective time management, personal growth, and the art of learning. I firmly believe that putting in the effort and embracing continuous learning is the key to unlocking a prosperous future. So, let's embark on this journey together and discover how to thrive in both life and finances!

Categories

  • Finance (37)
  • Lifestyle (7)
  • Market (22)
  • Programming (13)
  • Reading (41)
  • Research (21)
  • Running (41)
  • Sports (2)
  • Travel (3)

Popular

  • JAVA學習筆記 ArrayList

    一個強大的Excel函數OFFSET,動態選取資料範圍

    2422 shares
    Share 969 Tweet 606
  • Excel VBA的自學心得分享

    1924 shares
    Share 770 Tweet 481
  • 自學Excel VBA系列-如何用VBA控制WORD?

    1460 shares
    Share 584 Tweet 365
  • 自學Excel VBA系列-如何用VBA控制OutLook?

    1208 shares
    Share 483 Tweet 302
  • 自學Excel系列 – 使用Vlookup函數的1個小技巧, 文字與數字之間的轉換問題(文字轉數字 數字轉文字)

    635 shares
    Share 254 Tweet 159

Instagram

    Go to the Customizer > JNews : Social, Like & View > Instagram Feed Setting, to connect your Instagram account.
No Result
View All Result
  • Home
  • Market
  • Finance
  • Running
  • Reading
  • Research
  • Travel
  • Lifestyle
  • About Me