2014-01-22 169 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