Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Word书签导入Excel_Excel_Import_Ms Word_Bookmarks_Vba - Fatal编程技术网

将Word书签导入Excel

将Word书签导入Excel,excel,import,ms-word,bookmarks,vba,Excel,Import,Ms Word,Bookmarks,Vba,我正在尝试将Word书签从所选Word文档导入特定Excel单元格。我有一个宏,它获取excel数据并将其填充到Word模板中。我还需要能够将word文档导入Excel。这就是我到目前为止所做的: Sub Import() Dim wdDoc As Object Dim wdFileName As Variant Dim ws As Worksheet Dim nextRow As Range wdFileName = Application.GetOpenFilename("Word fil

我正在尝试将Word书签从所选Word文档导入特定Excel单元格。我有一个宏,它获取excel数据并将其填充到Word模板中。我还需要能够将word文档导入Excel。这就是我到目前为止所做的:

Sub Import()
Dim wdDoc As Object
Dim wdFileName As Variant
Dim ws As Worksheet
Dim nextRow As Range

wdFileName = Application.GetOpenFilename("Word files,*.doc;*.docx", , _
"Browse for document") 'dialog box
    If wdFileName = False Then
        MsgBox "No File Selected."
        Exit Sub
    Else
        Set wdDoc = CreateObject("Word.Application")
        wdDoc.Visible = True
            On Error Resume Next
        wdDoc.Documents.Open Filename:=wdFileName
            On Error GoTo 0
        wdDoc.Documents(wdFileName).Activate
            On Error GoTo 0
    End If


With wdDoc 'start import

Set ws = ThisWorkbook.Sheets("Sheet1")
Set nextRow = Cells(Rows.Count, "B").End(xlUp).Offset(1)

ws.Range("H" & (nextRow.Row)).Value2 = wdDoc.Bookmarks("Bookmark1").Range.Value2

End With
wdDoc.Close SaveChanges:=False
End Sub
我在“ws.Range(“H”和(nextRow.Row)).Value2=wdDoc.Bookmarks(“Named_”).Range.Value2”行中得到“运行时:438/对象不支持此属性或方法”


我在这里忽略了什么?

步骤1:在VBA窗口中,单击“工具”,然后单击“引用”,并确保“Microsoft Word xx.0对象库”旁边有一个复选框

步骤2:将问题行更改为-

ws.Range("H" & (nextRow.Row)).Value = _
ActiveDocument.Bookmarks("Name_Insured").Range.Text
步骤3:将最后一行更改为-

ActiveDocument.Close SaveChanges:=False

你可以像这样使用书签

Sub PushToWord()

Dim objWord As New Word.Application
Dim doc As Word.Document
Dim bkmk As Word.Bookmark
sWdFileName = Application.GetOpenFilename(, , , , False)
Set doc = objWord.Documents.Open(sWdFileName)
On Error Resume Next

    ActiveDocument.Variables("BrokerFirstName").Value = Range("B1").Value
    ActiveDocument.Variables("BrokerLastName").Value = Range("B2").Value
    ActiveDocument.Fields.Update

On Error Resume Next
objWord.Visible = True

End Sub
或者,使用DocVariables

Sub PushToWord()

Dim objWord As New Word.Application
Dim doc As Word.Document
Dim bkmk As Word.Bookmark
sWdFileName = Application.GetOpenFilename(, , , , False)
Set doc = objWord.Documents.Open(sWdFileName)
'On Error Resume Next

objWord.ActiveDocument.variables("BrokerFirstName").Value = Range("BrokerFirstName").Value
objWord.ActiveDocument.variables("BrokerLastName").Value = Range("BrokerLastName").Value
objWord.ActiveDocument.variables("Ryan").Value = Range("Ryan").Value


objWord.ActiveDocument.Fields.Update

'On Error Resume Next
objWord.Visible = True

End Sub

顺便说一句,您从Excel而不是Word运行这些代码示例。

感谢您的回复,我以前将其作为.text(用于ws.range和wddoc.bookmarks),但它仍然给我相同的错误。书签是一种选择,或者至少应该是。Try:ws.Range(“H”&(nextRow.Row)).Value=wdDoc.Bookmarks(“Named_”).Range.text我认为您遇到的问题是第一部分需要为Excel编写(通常使用.Value),第二部分需要为Word编写(根本不使用.Value)最初我就是这样得到的(我只是颠倒了导出代码)。从那时起,我几乎经历了每一次组合,每次我碰到这堵墙。明白了,对于将来寻找答案的任何人,我将
set wdDoc=Createobject
及其后的所有内容更改为
set wdDoc=Documents.Open(Filename:=wdFileName)