標題:
[發問]
讀取表格
[打印本頁]
作者:
kannas
時間:
2010-11-28 16:27
標題:
讀取表格
本帖最後由 kannas 於 2010-12-2 21:35 編輯
請問如何用Excel 的VB,寫成讀取word的表格,
並把它轉變在Excel上面,格式要跟word上的一樣。
作者:
et5323
時間:
2010-11-29 12:10
你可以参考下这里:
http://forum.twbts.com/viewthrea ... &page=1#pid9388
提问题最好有附件.
作者:
kannas
時間:
2010-12-1 01:05
我指的是程式執行時,
會自動讀取指定路徑的word檔案,
並把檔案寫回Excel上面,
但我希望他的格式不會變。
有點像是
http://tw.myblog.yahoo.com/jw!_DIL5waFHwVKfL8odMZ4urti/article?mid=1617&prev=1572&next=1615&l=f&fid=16
這個的程式
但是我用這個弄,格式會變,雖然位子一樣,但格式卻沒了。
作者:
kimbal
時間:
2010-12-2 22:06
我指的是程式執行時,
會自動讀取指定路徑的word檔案,
並把檔案寫回Excel上面,
但我希望他的格式不會變 ...
kannas 發表於 2010-12-1 01:05
一個非常懶的方法
copy and paste....
Sub dsa()
Dim Wd 'Word
Dim Dc '文件
Dim Tb '內表
Dim i, j '定位
Sheet1.UsedRange.EntireRow.Delete 'Excel Sheet1 清表
Set Wd = CreateObject("Word.Application")
Dim RgR As Range
Set Dc = Wd.Documents.Open("C:\temp\1.DOC ") '檔名
Wd.Visible = True
With Wd.Selection.Find
.Text = "^l"
.Replacement.Text = " "
End With
Wd.Selection.Find.Execute Replace:=2
With Wd.Selection.Find
.Text = "^p"
.Replacement.Text = " "
End With
Wd.Selection.Find.Execute Replace:=2
For Each Tb In Dc.tables
Set RgR = Sheet1.UsedRange.EntireRow.Offset(Sheet1.UsedRange.Rows.Count + 1, 0).Cells(1)
Tb.Range.Copy
RgR.Select
ActiveSheet.PasteSpecial Format:="HTML"
Next
Wd.Quit
End Sub
複製代碼
作者:
kannas
時間:
2010-12-17 11:01
本帖最後由 kannas 於 2010-12-17 11:05 編輯
我的表格上有些格內有分行
我想讓他在Excel內只在一個格想用Chr來分行
上面那個程式他會更改到word的資料,變得每次都會問是否存word檔案
可以的話可以解釋每個程式的意思嗎?
因為我有些看不懂,我想了解每步驟的意思。
感謝。
作者:
Hsieh
時間:
2010-12-17 15:52
本帖最後由 Hsieh 於 2010-12-17 15:54 編輯
回復
5#
kannas
Sub WriteWordTb()
Dim Tb As Table, Ar()
Set Wd = CreateObject("Word.Application") '創建WORD程式物件
Cells.Clear '清空工作表內容
With Wd '關於WORD程式物件
With .Documents.Open(ThisWorkbook.Path & "\1.doc") '開啟指定的檔案
For Each Tb In .tables 'doc文件中的每個Table
For i = 1 To Tb.Rows.Count
For j = 1 To Tb.Columns.Count
For s = 0 To Tb.Cell(i, j).Range.Sentences.Count - 1
ReDim Preserve Ar(s)
Ar(s) = Tb.Cell(i, j).Range.Sentences(s + 1)
Next
mystr = Join(Ar, Chr(10))
Cells(i, j) = mystr
Erase Ar
Next
Next
Next
End With
.Quit '關閉程式
End With
End Sub
複製代碼
作者:
kannas
時間:
2010-12-17 19:55
回復
6#
Hsieh
這個程式無法執行耶
它顯示編譯錯誤: 使用者自訂型態尚未定義
作者:
Hsieh
時間:
2010-12-17 20:04
本帖最後由 Hsieh 於 2010-12-23 14:19 編輯
]
回復
7#
kannas
須引用項目
MicroSoft Word 12.0 Object Library
[attach]4132[/attach]
或取消Tb變數宣告
Sub WriteWordTb()
Dim Ar()
Set Wd = CreateObject("Word.Application") '創建WORD程式物件
Cells.Clear '清空工作表內容
With Wd '關於WORD程式物件
With .Documents.Open(ThisWorkbook.Path & "\1.doc") '開啟指定的檔案
For Each Tb In .tables 'doc文件中的每個Table
For i = 1 To Tb.Rows.Count
For j = 1 To Tb.Columns.Count
For s = 0 To Tb.Cell(i, j).Range.Sentences.Count - 1
ReDim Preserve Ar(s)
Ar(s) = Tb.Cell(i, j).Range.Sentences(s + 1)
Next
mystr = Join(Ar, Chr(10))
Cells(i, j) = mystr
Erase Ar
Next
Next
Next
End With
.Quit '關閉程式
End With
End Sub
複製代碼
作者:
kannas
時間:
2010-12-20 22:39
回復
8#
Hsieh
請問我用上面那個程式後,因為有些表格內他的字數有點小多,
用自動調整欄寬的話,整個表格就會破壞掉,變得很寬。
像是有一串字,點下格子內他會顯示全部的字,如果沒點就只顯示表格大小所能顯示的字數,其他則不顯示,
可以把它弄成像是自動換行嗎?
讓表格看起來不會很奇怪?
問了這麼多 真是麻煩各位了 謝謝!!!
作者:
Hsieh
時間:
2010-12-20 23:17
本帖最後由 Hsieh 於 2010-12-23 14:05 編輯
所以,妳並非要讓文字依據WORD表格內容換行
那就設定EXCEL自動換列
Sub WriteWordTb()
Dim Tb As Table, Ar()
Set Wd = CreateObject("Word.Application") '創建WORD程式物件
Cells.Clear '清空工作表內容
With Wd '關於WORD程式物件
With .Documents.Open(ThisWorkbook.Path & "\1.doc") '開啟指定的檔案
For Each Tb In .tables 'doc文件中的每個Table
For i = 1 To Tb.Rows.Count
For j = 1 To Tb.Columns.Count
For s = 0 To Tb.Cell(i, j).Range.Sentences.Count - 1
ReDim Preserve Ar(s)
Ar(s) = Tb.Cell(i, j).Range.Sentences(s + 1)
Next
mystr = Join(Ar, Chr(10))
With Cells(i, j)
.Value = mystr
.WrapText = True
End With
Erase Ar
Next
Next
Next
End With
.Quit '關閉程式
End With
End Sub
複製代碼
作者:
kannas
時間:
2010-12-23 01:33
回復
10#
Hsieh
請問Join的程式有辦法用And來寫嗎?
我聽人說這個比較簡單,Join是比較高階的用法
我不明白用And寫的話,是要哪些條件連結哪些條件??
*ReDim Preserve Ar(s)
*Ar(s) = Tb.Cell(i, j).Range.Sentences(s + 1)
Next
*mystr = Join(Ar, Chr(10))
*.Value = mystr
*.WrapText = True
End With
Erase Ar
還有可以解釋上面有*的程式意思嗎?
我雖然大概知道意思,但有人問我時,我真的無法達出來。
麻煩您了 謝謝!
作者:
老夏
時間:
2010-12-23 11:19
捨簡而就繁
[attach]4192[/attach]
作者:
Hsieh
時間:
2010-12-23 14:29
回復
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)
Sub WriteWordTb()
Dim Tb As Table, Ar()
Set Wd = CreateObject("Word.Application") '創建WORD程式物件
Cells.Clear '清空工作表內容
With Wd '關於WORD程式物件
With .Documents.Open(ThisWorkbook.Path & "\1.doc") '開啟指定的檔案
For Each Tb In .tables 'doc文件中的每個Table
For i = 1 To Tb.Rows.Count
For j = 1 To Tb.Columns.Count
For s = 0 To Tb.Cell(i, j).Range.Sentences.Count - 1
If mystr="" Then
mystr=Tb.Cell(i, j).Range.Sentences(s + 1)
Else
mystr= mystr & chr(10) & Tb.Cell(i, j).Range.Sentences(s + 1) '連接每句
End If
Next
With Cells(i, j)
.Value = mystr '儲存格的值
mystr="" '把變數歸零
.WrapText = True '儲存格設定成自動換行
End With
Next
Next
Next
End With
.Quit '關閉程式
End With
End Sub
複製代碼
作者:
FAlonso
時間:
2010-12-25 19:14
為什麼H大可以有這些指令,但我沒有?
Uploaded with ImageShack.us
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)