事情越來越多
怕自己忘記 所以來寫個網誌 紀錄一下
過程很曲折 燒了很多腦細胞
沒有學過相關的 所以請多多包涵

概形容一下 這個文件主要是做甚麼
我每個月都要整理一份清單出來,後來連我同事(上司的助理)要跟我核對數量和金額
大概每個月會有10多筆WORD檔...
WORD檔內容我大改排版內容,改成表格(讓系統方便抓取某一個儲存格格式)
我要WORD檔案內,某4格格子的內容(若按照EXCEL邏輯講,是要4格不同儲存格的內容)
然後將這個變成一份清單,最後依分類,合計數量和金額
困難點1:用EXCEL開WORD檔(用錄製也錄不出來)
困難點2:每個檔案名稱不一樣,且每個月檔案數量也不一樣
困難點3:取出清單後,還要依種類不同合計金額和數量


twp = ThisWorkbook.Path            '此EXCEL檔案存放位置

Dim WDapp As Object                'Word 應用程式

Set WDapp = New Word.Application            '啟動Word
WDapp.Visible = True                                        '顯示Word

path1 = twp & "\文件\" & "*.docx"              '在做迴圈部分前 先告知檔案位置
file1 = Dir(path1): r = 1                            '在文件資料夾下 將每個檔案隱藏編上編號1.2.3....

Do While file1 <> ""                                    '迴圈的一種,設定讀取到資料夾最後一個編號檔名是空白 就停止迴圈

WDapp.Documents.Open (twp & "\文件\" & file1)                    '用WORD開啟文件

x = x + 1                                                       '因為我要一份文件,顯示在同一列上,不同文件不同列

Workbooks("清單").Sheets(1).Cells(x + 1, 1).Value = _
WDapp.Documents(file1).Tables(1).cell(1, 2).Range.Text
Workbooks("清單").Sheets(1).Cells(x + 1, 2).Value =  _
(WDapp.Documents(file1).Tables(1).cell(6, 4).Range.Text
Workbooks("清單").Sheets(1).Cells(x + 1, 3).Value =  _
WDapp.Documents(file1).Tables(1).cell(6, 2).Range.Text
Workbooks("清單").Sheets(1).Cells(x + 1, 4).Value =  _
Val(WDapp.Documents(file1).Tables(1).cell(8, 6).Range.Text)

WDapp.Documents(file1).Close                       '關閉WORD文件

file1 = Dir                                       '取得下一個檔名
Loop

WDapp.Quit           '關閉WORD檔案(程式)

Set WDapp = Nothing

End sub


很重要要說三次
*一定要開啟     工具->設定引用項目->Microsoft Word 15.0 Object Libary
*一定要開啟     工具->設定引用項目->Microsoft Word 15.0 Object Libary
*一定要開啟     工具->設定引用項目->Microsoft Word 15.0 Object Libary
不然無法用EXCEL開啟WORD檔
反之如果要用WORD檔開啟EXCEL 一樣要去把Microsoft Excel打開

ThisWorkbook.Path
這東西實在很方便,假設今天你放在隨身碟上,換到另一台電腦,這東西不太會失效
假設這原本的EXCEL放在"C:\新資料夾\清單.xls"
ThisWorkbook.Path  這個會顯示"C:\新資料夾"
改換到其他資料夾上("F:\AAA\BBB\清單.xls")  他前面會自動幫你改為"F:\AAA\BBB"
所以不用太擔心程式會跑掉

Val(WDapp.Documents(file1).Tables(1).cell(8, 6).Range.Text)
以上會輸入成"字串",導致後續EXCEL無法再計算,所以前面加上Val,方便轉為數值,再用EXCEL函數計算。

另外WORD表格,不管你表格多麼複雜
WORD都是算列在算欄,跟上一列的欄數是否有分割或合併都沒有關係

Cell
EXCEL 是用Cells   Word是用Cell
Excel寫錯 少一個s     顯示438  物件不支援此屬性或方法
Word寫錯 多一個s    找不到方法或資料成員

另外我有測試過
把前面啟動WORD和開啟WORD文件拿掉,是否系統可以不用開啟直接讀資料....
沒辦法,還是要開啟WORD文件...(不知道有沒有辦法加快...)

其實在做這份檔案之前,我是有想過用WORD的巨集做
但是WORD巨集沒有EXCEL那麼方便
他多半都使用鍵盤的快速鍵
這部分有看到別人提供參考資料
http://blog.bestdaylong.com/2008/04/word.html

但是上面只能列出WORD清單,不能種類計算(WORD沒有SUMIF這種東西,只有SUM)
那時候EXCEL一直無法讀取WORD檔
所以繞了一下遠路
先用WORD巨集,列出資料夾下面全部清單(上面的網址有介紹)
再將做好的清單,利用WORD全部貼到EXCEL做計算
(word巨集:word表格貼到EXCEL上 https://www.youtube.com/watch?v=TA52dEn3KVE)
再將計算好的貼回到WORD(--->這個我還沒有Google到就發現EXCEL可以直接把數值讀出)

 

參考資料
1. https://blog.gtwang.org/programming/excel-vba-programming-loop/
2. https://blog.xuite.net/crdotlin/excel/7623464-%E5%B0%87Word%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E8%A1%A8%E6%A0%BC%E8%A4%87%E8%A3%BD%E5%88%B0Excel%E5%B7%A5%E4%BD%9C%E8%A1%A8%E7%9A%84%E7%89%B9%E5%AE%9A%E4%BD%8D%E7%BD%AE
3. http://forum.twbts.com/index.php
4. https://hk.saowen.com/a/915e486d328d6e834ddfc38335b31989bc4ef3a96c97b8cc397c0b68dbe37c80
5. http://blog.bestdaylong.com/2008/04/word.html
6. https://www.youtube.com/watch?v=TA52dEn3KVE

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 future0613 的頭像
    future0613

    心の日記

    future0613 發表在 痞客邦 留言(0) 人氣()