2013-05-30 171 views
-1

我試圖自動生成一個Word文檔(.docm)使用數據從我的Excel(.xlsm)使用VB宏。如何從Excel複製表格到Word使用VB

目前我能夠從Excel中複製信息的一些部分到word文檔。 問題是,我找不到解決方案將表信息傳遞給單詞書籤。

Sub Word() 

Dim wdApp As Word.Application 
Dim WDDoc As Word.Document 
Dim BMRange As Word.Range 
Dim cliente As Range 
Dim CPE As Range 
Dim localidade As Range 
Dim numproposta As Range 
Dim DIRECT, saveAsName, data As String 
Dim table1 As Table 

Set wdApp = CreateObject("Word.Application") 'Create an instance of word 
Set WDDoc = wdApp.Documents.Open("C:\Users\PT13217294\test.docm") 'Open word file 
wdApp.Visible = True 

'excel ranges 
'Windows(shtname).Activate 

Set cliente = Sheets("Dados").Range("C10") 
Set CPE = Sheets("Dados").Range("C15") 
Set localidade = Sheets("Dados").Range("C13") 
Set table1 = Sheets("Cálculos").Range("B5:K17") 

'word's bookmark 

'cabeçalho 
ActiveDocument.Bookmarks("cliente4").Range.Text = cliente 

'rodapé 
ActiveDocument.Bookmarks("num_proposta4").Range.Text = numproposta 

'corpo texto 
Set BMRange = WDDoc.Goto(What:=wdGoToBookmark, Name:="cliente1") 
BMRange.Text = cliente 

Set BMRange = WDDoc.Goto(What:=wdGoToBookmark, Name:="Table") 
BMRange.Text = table1 

'Guardar word na pasta das propostas 
With wdApp.ActiveDocument 
saveAsName = "C:\Users\PT13217294\test.docm" 
ActiveDocument.SaveAs Filename:=saveAsName 
wdApp.Quit 
End With 

Set BMRange = Nothing 
Set WDDoc = Nothing 
Set wdApp = Nothing 

我應該怎麼做才能解決這個問題? 由於提前,

安德烈

+1

首先,你應該使用'Option Explicit'進行編程......其次,檢查你的代碼中的變量名 - 你有'table1',然後你試圖把它放入'talbe'的書籤中。什麼都沒有...... –

+0

哦,這是我的錯誤,當我將代碼複製到這裏。它有相同的名字。 – andrescpacheco

回答

1

您不能分配Excel Range Object(這是table1在你的代碼)到Word Range.Text Properties。在這種情況下,我們通常需要在兩個應用程序之間複製粘貼。

因此,你需要做到以下幾點:

'....your code here 
Set BMRange = WDDoc.Goto(What:=wdGoToBookmark, Name:="Table") 
'new code for you 
    table1.Copy 
    BMRange.Paste 
'rest of your code 
'Guardar word na pasta das propostas 
With wdApp.ActiveDocument 
'...and so on 

如果它需要你需要粘貼時進行實驗表形成。 上述解決方案已經過嘗試和測試。

+0

我更改代碼段到什麼ü建議: -'Set BMRange = WDDoc.Goto(什麼:= wdGoToBookmark,名稱:= 「表」)'' table1.Copy' 'BMRange.Paste' 而我收到一個編譯錯誤:未找到方法或數據成員。 – andrescpacheco

0

在您使用卡茲的建議(Option Explicit防止這種錯誤的),一旦你已經被複制的表,你可以嘗試這樣的事情(未經測試):

Dim wdRange as Object 
Set wdRng = WDDoc.Bookmarks("Table").Range 
wdApp.Goto(What:=wdGoToBookmark, Name:="Table") 
wdApp.Selection.PasteAndFormat wdTableOriginalFormatting '## Modify as needed 

您可能需要添加一些邏輯來刪除現有表的形狀,以粘貼在新的一個前。

我想,如果你刪除,那麼你威力也要做到這一點(我有這個在我的例子Excel中 - > Word宏,但它已經有一段時間,因爲我用它):

wdApp.Selection.Bookmarks.Add "Table", wdRng 
相關問題