尝试用excel单元格内容替换书签时出现MS Word自动化错误
我的代码的目标是在word文档中查找书签,并用客户的姓名、地址或评估金额替换这些信息。我的代码搜索包含特定信息的书签(例如,书签看起来像[姓名]、[地址]、[评估]),然后用excel工作表中特定单元格中的信息替换它。我希望代码查看整个文档中的所有书签,并用适当的信息替换它,并保留书签。代码有两个问题。第一,它说“Me”使用不当(指代码中的Me.Repaint部分)。如果我尝试在没有Me.Repaint的情况下运行代码,我会得到一个VBA运行时错误“-2146959355(80080005)”:自动化错误。有没有人对我可以做什么不同的建议?多谢各位 我已尝试删除我。重新绘制,并尝试重新启动word。我还在VBA引用部分启用了excel对象尝试用excel单元格内容替换书签时出现MS Word自动化错误,excel,vba,ms-word,Excel,Vba,Ms Word,我的代码的目标是在word文档中查找书签,并用客户的姓名、地址或评估金额替换这些信息。我的代码搜索包含特定信息的书签(例如,书签看起来像[姓名]、[地址]、[评估]),然后用excel工作表中特定单元格中的信息替换它。我希望代码查看整个文档中的所有书签,并用适当的信息替换它,并保留书签。代码有两个问题。第一,它说“Me”使用不当(指代码中的Me.Repaint部分)。如果我尝试在没有Me.Repaint的情况下运行代码,我会得到一个VBA运行时错误“-2146959355(80080005)”:
Function Read_Excel_Cell(cellRin As Long) As String
Dim oExcel As Excel.Application
Dim myWB As Excel.Workbook
Set oExcel = New Excel.Application
Set myWB = oExcel.Workbooks.Open("excel file")
Read_Excel_Cell = myWB.Sheets(1).Cells(cellRin, 1)
Set myWB = Nothing
Set oExcel = Nothing
End Function
Sub clientinfoexcel()
Dim bmk As Bookmark
For Each bmk In ActiveDocument.Range.Bookmarks
cltext = bmk.Name
Dim clinfo1 As Range
Set clinfo1 = ActiveDocument.Bookmarks(cltext).Range
If clinfo1.Text Like "*name*" Then
clinfo1.Text = Text: Read_Excel_Cell (1)
ActiveDocument.Bookmarks.Add cltext, clinfo1
ElseIf clinfo1.Text Like "*address*" Then
clinfo1.Text = Text: Read_Excel_Cell (2)
ActiveDocument.Bookmarks.Add cltext, clinfo1
ElseIf clinfo1.Text Like "*appraisal*" Then
clinfo1.Text = Text: Read_Excel_Cell (3)
ActiveDocument.Bookmarks.Add cltext, clinfo1
End If
Next bmk
End Sub
出现自动错误。设置myWB和oExcel=nothing不会关闭工作簿或退出excel,因此可能会打开一组隐藏的excel实例-签入任务管理器 只需一次打开/关闭即可获取所需数据 例如(未经测试):
设置myWB和oExcel=nothing不会关闭工作簿或退出excel,因此可能会打开一堆隐藏的excel实例-签入任务管理器 只需一次打开/关闭即可获取所需数据 例如(未经测试):
我没有在问题中的代码中看到
Me.Repaint
,这可能会导致错误。。。?这是从用户窗体运行的吗?据我所知,这不是Word或Excel的一部分
在任何情况下,这些行的代码中都会出现三次语法错误:
clinfo1.Text = Text: Read_Excel_Cell (1)
这是不正确的:文本:
我相信你想要的是:
clinfo1.Text = Text:= Read_Excel_Cell(1)
指定参数时需要:=
,而不是:
除此之外,代码可能会更有效率。当For
循环已经为书签提供了bmk
对象时,无需重复ActiveDocument.Bookmarks[index]
。在我看来,Select Case
比许多ElseIf
语句更易于阅读、编写和维护
我还更改了Excel的代码,以便它只启动一次新的Excel实例—如果它找不到正在运行的Excel。处理Excel应用程序的方法多种多样——这只是一种可能性。如果您想进一步探讨这个问题,我建议您进行更多的研究(这里和其他地方有很多很多问题和代码示例),并可能针对该主题提出一个不同的、更狭隘的问题
Function Read_Excel_Cell(cellRin As Long) As String
Dim oExcel As Excel.Application
Dim myWB As Excel.Workbook
On Error Resume Next
Set oExcel = GetObject(, "Excel.Appplication")
If Err.Number = 429 Then
Set oExcel = New Excel.Application
End If
On Error GoTo 0
oExcel.Visible = True
For Each myWb in oExcel.Workbooks
If myWb.Name = "excel file" Then
Exit For
End If
Next
If myWb Is Nothing Then
Set myWB = oExcel.Workbooks.Open("excel file")
End If
Read_Excel_Cell = myWB.Sheets(1).Cells(cellRin, 1)
Set myWB = Nothing
Set oExcel = Nothing
End Function
Sub clientinfoexcel()
Dim bmk As Bookmark
For Each bmk In ActiveDocument.Range.Bookmarks
cltext = bmk.Name
Dim clinfo1 As Range
Set clinfo1 = bmk.Range
Select Case cltext
Case Like "*name*"
clinfo1.Text = Read_Excel_Cell(1)
ActiveDocument.Bookmarks.Add cltext, clinfo1
Case Like "*address*"
clinfo1.Text = Read_Excel_Cell(2)
ActiveDocument.Bookmarks.Add cltext, clinfo1
Case Like "*appraisal*" Then
clinfo1.Text = Read_Excel_Cell(3)
ActiveDocument.Bookmarks.Add cltext, clinfo1
End Select
Next bmk
End Sub
我没有在问题中的代码中看到
Me.Repaint
,这可能会导致错误。。。?这是从用户窗体运行的吗?据我所知,这不是Word或Excel的一部分
在任何情况下,这些行的代码中都会出现三次语法错误:
clinfo1.Text = Text: Read_Excel_Cell (1)
这是不正确的:文本:
我相信你想要的是:
clinfo1.Text = Text:= Read_Excel_Cell(1)
指定参数时需要:=
,而不是:
除此之外,代码可能会更有效率。当For
循环已经为书签提供了bmk
对象时,无需重复ActiveDocument.Bookmarks[index]
。在我看来,Select Case
比许多ElseIf
语句更易于阅读、编写和维护
我还更改了Excel的代码,以便它只启动一次新的Excel实例—如果它找不到正在运行的Excel。处理Excel应用程序的方法多种多样——这只是一种可能性。如果您想进一步探讨这个问题,我建议您进行更多的研究(这里和其他地方有很多很多问题和代码示例),并可能针对该主题提出一个不同的、更狭隘的问题
Function Read_Excel_Cell(cellRin As Long) As String
Dim oExcel As Excel.Application
Dim myWB As Excel.Workbook
On Error Resume Next
Set oExcel = GetObject(, "Excel.Appplication")
If Err.Number = 429 Then
Set oExcel = New Excel.Application
End If
On Error GoTo 0
oExcel.Visible = True
For Each myWb in oExcel.Workbooks
If myWb.Name = "excel file" Then
Exit For
End If
Next
If myWb Is Nothing Then
Set myWB = oExcel.Workbooks.Open("excel file")
End If
Read_Excel_Cell = myWB.Sheets(1).Cells(cellRin, 1)
Set myWB = Nothing
Set oExcel = Nothing
End Function
Sub clientinfoexcel()
Dim bmk As Bookmark
For Each bmk In ActiveDocument.Range.Bookmarks
cltext = bmk.Name
Dim clinfo1 As Range
Set clinfo1 = bmk.Range
Select Case cltext
Case Like "*name*"
clinfo1.Text = Read_Excel_Cell(1)
ActiveDocument.Bookmarks.Add cltext, clinfo1
Case Like "*address*"
clinfo1.Text = Read_Excel_Cell(2)
ActiveDocument.Bookmarks.Add cltext, clinfo1
Case Like "*appraisal*" Then
clinfo1.Text = Read_Excel_Cell(3)
ActiveDocument.Bookmarks.Add cltext, clinfo1
End Select
Next bmk
End Sub
设置myWB和oExcel=nothing不会关闭工作簿或退出excel,因此您可能有一堆隐藏的excel实例处于打开状态-签入任务管理器。设置myWB和oExcel=nothing不会关闭工作簿或退出excel,因此,您可能在任务管理器中打开了一堆隐藏的excel实例。我尝试了您提供的代码,但遇到了ByRef参数类型不匹配的错误。此外,由于某些原因,set-oExcel=New Excel。应用程序正在导致word停止响应,然后出现运行时错误:自动化错误我离开PC几天-回来时可以查看一下。我添加了一个变量声明,将
txt声明为String
,这可能是类型不匹配错误的原因。至于et oExcel=New Excel.Application
-这对我来说很有效,所以我不确定你的电脑上可能有什么问题。我尝试了你提供的代码,遇到了ByRef参数类型不匹配的错误。此外,由于某些原因,set-oExcel=New Excel。应用程序正在导致word停止响应,然后出现运行时错误:自动化错误我离开PC几天-回来时可以查看一下。我添加了一个变量声明,将txt声明为String
,这可能是类型不匹配错误的原因。至于et oExcel=New Excel.Application
的问题,这对我来说很有效,所以我不确定你的电脑上可能有什么问题。