2013-05-30 94 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 
相关问题