[英]Populate excel data in word document with VBA
I have a word document and I would like to populate same words coming from excel. 我有一个Word文档,我想填充来自excel的相同单词。 Lets say both are located in c:\\test I have some knowledge to using vba but this one is a bit over it.
可以说它们都位于c:\\ test中,我对使用vba有一定的了解,但是这个有点过头了。 In my word document I have a sentence lets say: I am
firstname
lastname
and my username is username
and this is my department: department
在我的Word文档我有一句话可以说:我
firstname
lastname
和我的用户名是username
,这是我的部门: department
I have an excel called data, with a sheet called sheet1 with a table called users and some column: username, firstname, lastname, department. 我有一个称为data的excel,有一个名为sheet1的工作表,其中包含一个名为users的表和一些列:用户名,名字,姓氏,部门。 The table is an odbc connected table and it refreshes when the workbook opens.
该表是一个odbc连接表,在工作簿打开时将刷新。
username
and based on that value the other boxes will be filled in. username
并根据该值填写其他框。 Code Below: 下面的代码:
Dim objExcel As Object
Set objExcel = CreateObject("Excel.Application")
Dim username As String
Dim firstname As String
Dim lastname As String
Dim department As String
username = InputBox("Please enter the username", "Input")
Set exWb = objExcel.Workbooks.Open("C:\test\data.xlsx")
username = objExcel.WorksheetFunction.VLookup(username, _
eexWb.ActiveSheet.Range("A:F"), 1, False)
firstname = objExcel.WorksheetFunction.VLookup(username, _
eexWb.ActiveSheet.Range("A:F"), 2, False)
lastname = objExcel.WorksheetFunction.VLookup(username, _
eexWb.ActiveSheet.Range("A:F"), 3, False)
department = objExcel.WorksheetFunction.VLookup(username, _
eexWb.ActiveSheet.Range("A:F"), 4, False)
exWb.Close
Set exWb = Nothing
The below code should accomplish what you need. 下面的代码应该可以满足您的需求。 Take the following notes:
请注意以下几点:
UpdateBookmark
procedure to get it to work properly. UpdateBookmark
过程以使其正常工作。 Code: 码:
Sub LoadInfo()
Dim objExcel As Excel.Application 'note early binding (set in Tools > References > Microsoft Excel XX.X library
Set objExcel = New Excel.Application
Dim username As String
Dim firstname As String
Dim lastname As String
Dim department As String
username = InputBox("Please enter the username", "Input")
Dim exWB as Excel.Workbook
Set exWB = objExcel.Workbooks.Open("C:\test\data.xlsx")
With exWB.Worksheets("Sheet1")
Dim rngUN As Excel.Range
Set rngUN = .Columns("A").Find(what:=username, lookat:=xlWhole)
If Not rngUN Is Nothing Then
firstname = rngUN.Offset(, 2)
lastname = rngUN.Offset(, 3)
department = rngUN.Offset(, 4)
Else
MsgBox "Username Not Found. Exiting Sub"
GoTo ExitSub
End If
End With
UpdateBookmark "username", username, ActiveDocument, False
UpdateBookmark "firstname", firstname, ActiveDocument, False
UpdateBookmark "lastname", lastname, ActiveDocument, False
UpdateBookmark "department", department, ActiveDocument, False
ExitSub:
exWB.Close
objExcel.Quit
End Sub
Sub UpdateBookmark(BookmarkToUpdate As String, TextToUse As String, wDoc As Word.Document, Optional bReplace As Boolean)
'updates a bookmark range in Word without removing the bookmark name
Dim BMRange As Word.Range
Dim sTest As String
With wDoc
Set BMRange = .Bookmarks(BookmarkToUpdate).Range
'if text already exists, add new to old with a carriange return in between
sTest = BMRange.Text
If sTest = "" Or bReplace Then
BMRange.Text = TextToUse
Else
BMRange.Text = sTest & vbCr & TextToUse
End If
.Bookmarks.Add BookmarkToUpdate, BMRange
End With
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.