我对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语言相关的警告都应考虑到这一点。
非常感谢你!
答案 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)中,转到“设计”功能区,然后使用“开始邮件合并”向导。地址来源将是您的电子表格。我认为这比你计划的要容易得多。
干杯 -