2014-01-22 204 views
0

我对VBA是完全陌生的,特别是在不同的程序中,但是我创建了一个真实世界的小任务,很快变得复杂,有人可能会给我一些指针或代码片段,以尝试实现以下目标:从Excel打开Word,传递变量和文本(VBA宏),远程控制Word

我有一个Excel文件,其中包含名称和数字(请参见下文),我想将它们单独传输到Word文档。

如果我已经强调A2单元格,然后单击[运行],我希望Word自动将打开,并输入了类似

- “嗨,迈克,你的电流量$ 12.37和你住在23 One Street。谢谢。“ -

金额应以粗体打印,之后Word应保存文件并关闭自身,无需进一步输入。

同样,当我选择了A3时,它应该打开另一个文档,写入相同的文本,但Julia的变量填入,保存到指定的位置并关闭。

A   B   C 
1 Name Address  Amount 
2 Mike 23 One Way $12.37 
3 Julia 3949 Street $39.23 

[BUTTON] 

所以,本质上,我想,我试图从Excel中“远程控制”Word,并将一些变量从Excel提供到Word中。说实话,我完全丧失了如何做到这一点。

我迄今发现的是:

Dim wdApp As Word.Application, wdDoc As Word.Document 

On Error Resume Next 
Set wdApp = GetObject(, "Word.Application") 
If Err.Number <> 0 Then 'Word isn't already running 
Set wdApp = CreateObject("Word.Application") 
End If 
On Error GoTo 0 

Set wdDoc = wdApp.Documents.Open("C:\temp\[NAME AFTER SELECTED FIELD A2].docx") 

wdApp.Visible = True 

... 

现在我不知道该怎么办! 如何将标准文本与选定字段的行中的变量传递到Word? 如何格式化它们(粗体,宋体,红色等)? 如何保存在指定的文件名下?

这甚至有可能吗?我知道VBA非常强大,所以我希望你能帮助我! 我使用的是Office 2013,因此任何与宏编程或VBA语言相关的警告都应该考虑到这一点。

非常感谢!

+2

在Word中创建一个预格式化的模板文档,书签中可以用Excel中的值替换。从你的问题来看,你是否需要每次创建一个新文档,或者如果你正在更新现有文档(每个人都有一个特定的文档),这并不清楚。以下是设置书签文本的方法:http://word.mvps.org/faqs/macrosvba/InsertingTextAtBookmark.htm –

回答

0

你可以做到这一点,但这将是非常困难的。

更容易的是使用Work中的电子表格。

在Word(2013)中转到设计功能区,然后使用开始邮件合并向导。地址的来源将是您的电子表格。我认为这比你计划的要容易得多。

Cheers -

1

请勿使用get/create对象。我的宏全部编码如下:

dim wdApp as New Word.Application 'Always use a new instance 
Set wdDoc = wdApp.Documents.Open("C:\temp\[NAME AFTER SELECTED FIELD A2].docx") 
wdApp.visible = true 

从那里你只需按照你在word中的工作。传递变量非常简单,因为数据类型在双方都存在(双精度,整数,字符串等全部包含在默认包含的标准VBA库中,因此不需要添加引用)。所以,如果我想告诉单词添加一个段落:

wdDoc.paragraphs.add 
wdDoc.paragraphs(wdDoc.paragraphs.count).range.text = "Hello World!" 

想要添加特定范围的文本吗?

dim xlRange as Excel.Range 
dim wdApp as New Word.Application 'Always use a new instance 
Set wdDoc = wdApp.Documents.Open("C:\temp\[NAME AFTER SELECTED FIELD A2].docx") 
wdApp.visible = true 

set xlRange = activesheet.range("A1") 'Just as an example 

wdDoc.paragraphs.add 
wdDoc.paragraphs(wdDoc.paragraphs.count).range.text = xlRange.value 

最后,说你想用一个变量名的形式Excel中打开指定的word文档:

dim name as string 
name = selection.cells(1).value 'Assuming they selected the cell 

dim wdApp as New Word.Application 'Always use a new instance 
Set wdDoc = wdApp.Documents.Open("C:\temp\" & name & ".docx") 
wdApp.visible = true 

我知道这是晚了一年,但嘿,希望它帮助。

作为最后的注意事项: 在单词macro中结束sub之前使用exit sub。退出子返回给调用者在哪里结束子不。

sub test 
'do the word stuff 
exit sub 'Stop it short of end sub 
end sub