我已经为一个更大的项目编写这个测试代码几天了,并且不断遇到这些 438 错误。我在这里收到了第一个帮助:438 Error,但现在情况越来越严重,我在 WordDoc 上的所有方法上都收到了错误。这个想法只是根据电子表格中的值对模板文档中的占位符进行查找/替换(复制以避免冲突)。据我发现,word 文档有 .Content.Find.etc 方法,但我无法让它运行来完成我的测试。
错误发生在第 22 行,即使只是使用“.Content”。
由于这是我第一个访问 Word 的 VBA 脚本,我可能会犯一些简单的错误。但值得注意的是,Word 文档在出现错误行之前已成功复制并打开。
Option Explicit
Sub Merge()
1 Dim WordDoc As Word.Document, N As Variant, i As Integer, j As Integer
2 'i = Range("C2").Value 'set formula to count relevant items
3 Dim wordApp As Word.Application
4 Dim source As String
5 Dim destination As String
6 Dim xlobj As Object
7 Set xlobj = CreateObject("Scripting.FileSystemObject")
8 'format: object.copyfile,source,destination,file overright(True is default)
9 source = "C:\Users\brian\Documents\Fiverr leads\hhornig89 - loan sheets\Documents\Loan Model V1\MERGE TEMPLATE - CONSTRUCTION LOAN AGREEMENT.docx"
10 destination = "C:\Users\brian\Documents\Fiverr leads\hhornig89 - loan sheets\Documents\Loan Model V1\WORKING - CONSTRUCTION LOAN AGREEMENT.docx"
11 xlobj.CopyFile source, destination, True
12 Set xlobj = Nothing
13 Set wordApp = CreateObject(Class:="Word.Application")
14 wordApp.Options.SaveInterval = 0
15 Set WordDoc = wordApp.Documents.Open("C:\Users\brian\Documents\Fiverr leads\hhornig89 - loan sheets\Documents\Loan Model V1\WORKING - CONSTRUCTION LOAN AGREEMENT.docx")
16 wordApp.Visible = True
17 Dim dataws As Worksheet
18 Set dataws = ThisWorkbook.Worksheets("Merge Fields")
19 N = dataws.Range("a1:b1").Value 'test range
20 'For j = 1 To i
21 With wordApp
22 With WordDoc.Content.Find
23 .Text = N(1, 1)
24 .Replacement.Text = N(1, 2)
25 .Wrap = wdFindContinue
26 .MatchWholeWord = True
27 .Execute Replace:=wdReplaceAll
28 End With
29 End With
30 'Next j
31 wordApp.ActiveDocument.Save
32 wordApp.ActiveDocument.Close
33 wordApp.Quit
34
35 Set wordApp = Nothing
36 Set WordDoc = Nothing
End Sub
我会放弃库参考并在此处使用后期绑定。抛弃
WordDoc
,只参考ActiveDocument
:
Option Explicit
Sub Merge()
Dim N As Variant, i As Integer, j As Integer
'i = Range("C2").Value 'set formula to count relevant items
Dim wordApp As Object
Dim source As String
Dim destination As String
Dim xlobj As Object
Set xlobj = CreateObject("Scripting.FileSystemObject")
'format: object.copyfile,source,destination,file overright(True is default)
source = "C:\Users\brian\Documents\Fiverr leads\hhornig89 - loan sheets\Documents\Loan Model V1\MERGE TEMPLATE - CONSTRUCTION LOAN AGREEMENT.docx"
destination = "C:\Users\brian\Documents\Fiverr leads\hhornig89 - loan sheets\Documents\Loan Model V1\WORKING - CONSTRUCTION LOAN AGREEMENT.docx"
xlobj.CopyFile source, destination, True
Set xlobj = Nothing
Set wordApp = CreateObject("word.Application")
wordApp.Options.SaveInterval = 0 'what's the point of this?
wordApp.Documents.Open ("C:\Users\brian\Documents\Fiverr leads\hhornig89 - loan sheets\Documents\Loan Model V1\WORKING - CONSTRUCTION LOAN AGREEMENT.docx")
wordApp.Visible = True
Dim dataws As Worksheet
Set dataws = ThisWorkbook.Worksheets("Merge Fields")
N = dataws.Range("a1:b1").Value 'test range
'For j = 1 To i
With wordApp
.ActiveDocument.Content.Find.Execute FindText:=N(1, 1), ReplaceWith:=N(1, 2), Replace:=2
End With
'Next j
wordApp.ActiveDocument.Close True
wordApp.Quit
Set wordApp = Nothing
End Sub