使用VBA在Word文档中填充Excel数据

时间:2016-03-31 12:49:14

标签: excel forms vba ms-word vlookup

我有一个word文档,我想填写来自excel的相同单词。可以说两者都位于c:\ test中 我对使用vba有一些了解,但这个有点过了。 在我的word文档中,我有句话可以说: 我是firstname lastname,我的用户名是username,这是我的部门:department

我有一个名为data的excel,带有一个名为sheet1的表,其中包含一个名为users的表和一些列:username,firstname,lastname,department。该表是一个odbc连接表,它会在工作簿打开时刷新。

  1. 我的第一个问题是我应该使用什么样的对象来获取firstname,lastname,username,deparment in word?我插入了一个Rich文本控件内容,并在其中包含一个旧表单/ textform字段,并将书签重命名为firstname,lastname ..等。
  2. 我想使用宏和vlookup从excel中填充单词中的数据。我真的不知道如何做到这一点,我有一些代码,但它不起作用。当宏启动时,会弹出一个窗口询问username,并根据该值填写其他框。
  3. 以下代码:

    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
    

1 个答案:

答案 0 :(得分:2)

以下代码应该可以满足您的需求。请注意以下事项:

  1. 我使用早期绑定(利用intellisense)。在Word VBE中,在工具>参考,检查Microsoft Excel XX.X对象库
  2. 您可以创建一个简单的书签,而无需插入对象。您可能仍希望这样做,但您可能需要调整UpdateBookmark程序才能使其正常工作。
  3. 代码:

    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