从Excel打开Word,传递变量和文本(VBA宏),远程控制Word

时间:2014-01-22 00:08:37

标签: excel vba excel-vba ms-word

我对VBA完全不熟悉,特别是在不同的程序中,但我创建了一个现实世界的小任务,很快变得复杂,有人可以给我一些指针或代码片段来试图实现以下目标: / p>

我有一个Excel文件,里面填充了姓名和号码(见下文),我想将它们单独转移到Word文档中。

如果我突出显示了单元格A2并单击[BUTTON],我希望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? 如何格式化它们(粗体,Arial,红色等)? 如何在指定的文件名下保存?

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

非常感谢你!

2 个答案:

答案 0 :(得分: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

从那里你就可以按照自己的意思工作。传递变量非常简单,因为数据类型存在于两端(double,integer,string等都包含在默认包含的标准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

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

作为最后的说明: 在word宏中的end sub之前使用exit sub。 Exit sub返回调用者,而end sub则没有。

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

答案 1 :(得分:0)

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

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

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

干杯 -