返回列表 上一主題 發帖

[發問] 讀取表格

本帖最後由 Hsieh 於 2010-12-17 15:54 編輯

回復 5# kannas
  1. Sub WriteWordTb()
  2. Dim Tb As Table, Ar()
  3. Set Wd = CreateObject("Word.Application") '創建WORD程式物件
  4. Cells.Clear '清空工作表內容
  5. With Wd '關於WORD程式物件
  6.   With .Documents.Open(ThisWorkbook.Path & "\1.doc") '開啟指定的檔案
  7.     For Each Tb In .tables 'doc文件中的每個Table
  8.     For i = 1 To Tb.Rows.Count
  9.         For j = 1 To Tb.Columns.Count
  10.            For s = 0 To Tb.Cell(i, j).Range.Sentences.Count - 1
  11.               ReDim Preserve Ar(s)
  12.               Ar(s) = Tb.Cell(i, j).Range.Sentences(s + 1)
  13.            Next
  14.          mystr = Join(Ar, Chr(10))
  15.         Cells(i, j) = mystr
  16.         Erase Ar
  17.         Next
  18.     Next
  19.     Next
  20.   End With
  21.   .Quit '關閉程式
  22. End With
  23. End Sub
複製代碼
學海無涯_不恥下問

TOP

本帖最後由 Hsieh 於 2010-12-23 14:19 編輯

]回復 7# kannas


    須引用項目
MicroSoft Word 12.0 Object Library

或取消Tb變數宣告
  1. Sub WriteWordTb()
  2. Dim Ar()
  3. Set Wd = CreateObject("Word.Application") '創建WORD程式物件
  4. Cells.Clear '清空工作表內容
  5. With Wd '關於WORD程式物件
  6.   With .Documents.Open(ThisWorkbook.Path & "\1.doc") '開啟指定的檔案
  7.     For Each Tb In .tables 'doc文件中的每個Table
  8.     For i = 1 To Tb.Rows.Count
  9.         For j = 1 To Tb.Columns.Count
  10.            For s = 0 To Tb.Cell(i, j).Range.Sentences.Count - 1
  11.               ReDim Preserve Ar(s)
  12.               Ar(s) = Tb.Cell(i, j).Range.Sentences(s + 1)
  13.            Next
  14.          mystr = Join(Ar, Chr(10))
  15.         Cells(i, j) = mystr
  16.         Erase Ar
  17.         Next
  18.     Next
  19.     Next
  20.   End With
  21.   .Quit '關閉程式
  22. End With
  23. End Sub
複製代碼
學海無涯_不恥下問

TOP

本帖最後由 Hsieh 於 2010-12-23 14:05 編輯

所以,妳並非要讓文字依據WORD表格內容換行
那就設定EXCEL自動換列
  1. Sub WriteWordTb()
  2. Dim Tb As Table, Ar()
  3. Set Wd = CreateObject("Word.Application") '創建WORD程式物件
  4. Cells.Clear '清空工作表內容
  5. With Wd '關於WORD程式物件
  6.   With .Documents.Open(ThisWorkbook.Path & "\1.doc") '開啟指定的檔案
  7.     For Each Tb In .tables 'doc文件中的每個Table
  8.     For i = 1 To Tb.Rows.Count
  9.         For j = 1 To Tb.Columns.Count
  10.            For s = 0 To Tb.Cell(i, j).Range.Sentences.Count - 1
  11.               ReDim Preserve Ar(s)
  12.               Ar(s) = Tb.Cell(i, j).Range.Sentences(s + 1)
  13.            Next
  14.          mystr = Join(Ar, Chr(10))
  15.         With Cells(i, j)
  16.         .Value = mystr
  17.         .WrapText = True
  18.         End With
  19.         Erase Ar
  20.         Next
  21.     Next
  22.     Next
  23.   End With
  24.   .Quit '關閉程式
  25. End With
  26. End Sub
複製代碼
學海無涯_不恥下問

TOP

回復 11# kannas
老夏前輩的物件包裝方法是妳該學習方向
http://forum.twbts.com/viewthread.php?tid=782&extra=&highlight=word&page=1
參考之前的討論,你對物件聯結的方法會有較多的認識

單就VBA語法討論,你所提到的join方法
這是字串的連結函數,你可參考VBA說明
就能知道此函數用法及用途
你要用&代替JOIN函數當然也行
那就是在取得表格內的每一句字串,
用mystr=mystr & chr(10) & Tb.Cell(i, j).Range.Sentences(s + 1)
  1. Sub WriteWordTb()
  2. Dim Tb As Table, Ar()
  3. Set Wd = CreateObject("Word.Application") '創建WORD程式物件
  4. Cells.Clear '清空工作表內容
  5. With Wd '關於WORD程式物件
  6.   With .Documents.Open(ThisWorkbook.Path & "\1.doc") '開啟指定的檔案
  7.     For Each Tb In .tables 'doc文件中的每個Table
  8.     For i = 1 To Tb.Rows.Count
  9.         For j = 1 To Tb.Columns.Count
  10.            For s = 0 To Tb.Cell(i, j).Range.Sentences.Count - 1
  11.                 If mystr="" Then
  12.                 mystr=Tb.Cell(i, j).Range.Sentences(s + 1)
  13.                 Else
  14.                mystr= mystr & chr(10) & Tb.Cell(i, j).Range.Sentences(s + 1) '連接每句
  15.                End If
  16.            Next
  17.         With Cells(i, j)
  18.         .Value = mystr '儲存格的值
  19.          mystr=""   '把變數歸零
  20.         .WrapText = True  '儲存格設定成自動換行
  21.         End With
  22.         Next
  23.     Next
  24.     Next
  25.   End With
  26.   .Quit '關閉程式
  27. End With
  28. End Sub
複製代碼
學海無涯_不恥下問

TOP

        靜思自在 : 【停滯不前,終無所得】人都迷於尋找奇蹟,因而停滯不前;縱使時間再多、路再長,也了無用處,終無所得。
返回列表 上一主題