我的代码有什么问题 - “运行时错误91:对象变量或块变量未设置”
您能检查一下我在代码中丢失了什么吗? 当它达到wrd.Visible = True
时,它给我错误“运行时错误91:对象变量或未设置块变量”。我的代码有什么问题 - “运行时错误91:对象变量或块变量未设置”
我已经激活了的Microsoft Word 14.0对象库
Sub Exceltoword_template()
'Declares and set w as active worksheet
Dim w As Worksheet
Set w = ActiveWorkbook.ActiveSheet
'Declaration for word app
Dim wrd As Object
Dim worddoc As Word.Document
'Optimize Code
Application.ScreenUpdating = False
Application.EnableEvents = False
On Error Resume Next
'Is MS Word already opened?
' Set wrd = GetObject(class:="Word.Application")
Set wrd = GetObject(class:="Word.Application")
'Clear the error between errors
Err.Clear
'If MS Word is not already open then open MS Word
If wrd Is Nothing Then Set wrd = CreateObject(class:="Word.Application")
' Handle if the Word Application is not found
If Err.Number = 429 Then
MsgBox "Microsoft Word could not be found, aborting."
GoTo EndRoutine
End If
On Error GoTo 0
'Make MS Word Visible and Active
wrd.Visible = True
wrd.Activate
EndRoutine:
'Optimize Code
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
我一般会建议不要使用早期绑定,尽管它可以与智能感知帮助。我可以通过在引用Word时忽略单词Set
而获得与您相同的错误,但除此之外它可以正常工作。
试试这个代码;它不需要对Word的引用:
Public Sub Test()
Dim oWD As Object
Dim oDoc As Object
Dim wrkSht As Worksheet
Set wrkSht = ThisWorkbook.Worksheets("Sheet1") 'Be precise, don't trust to Active or Selection.
Set oWD = CreateWD
Set oDoc = oWD.Documents.Add 'Create a new document.
'Set oDoc = oWD.ActiveDocument
'Set oDoc = oWD.Documents("My Document.docx")
'Set oDoc = oWD.Windows("My Document.docx [Compatibility Mode]") '- As it appears on the title bar of the document.
With oDoc
'Coding for Word
End With
End Sub
Public Function CreateWD(Optional bVisible As Boolean = True) As Object
Dim oTmpWD As Object
'''''''''''''''''''''''''''''''''''''''''''''''''''''
'Defer error trapping in case Word is not running. '
'''''''''''''''''''''''''''''''''''''''''''''''''''''
On Error Resume Next
Set oTmpWD = GetObject(, "Word.Application")
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
'If an error occurs then create an instance of Word. '
'Reinstate error handling. '
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
If Err.Number <> 0 Then
Err.Clear
On Error GoTo ERROR_HANDLER
Set oTmpWD = CreateObject("Word.Application")
End If
oTmpWD.Visible = bVisible
Set CreateWD = oTmpWD
On Error GoTo 0
Exit Function
ERROR_HANDLER:
Select Case Err.Number
Case Else
MsgBox "Error " & Err.Number & vbCr & _
" (" & Err.Description & ") in procedure CreateWD."
Err.Clear
End Select
End Function
谢谢!有用。我需要稍微改变。请帮帮我。我如何将Set oDoc = oWD.Documents.Add'设置为'Set oDoc'作为活动文档,因为我的word doc已经打开。有没有办法控制或获得文档标题的访问权限? –
我尝试使用'Set oDoc = oWD.ActiveDocument'。它不适用于已经打开并给我错误的文件**这个命令不可用,因为没有文档是打开的**但是,当我使用代码'Set oDoc = oWD.Documents.Add'添加文档时,它然后检测活动文档。 –
我添加了评论代码来展示如何分配'oDoc'。 –
我发布此作为参考。这是非常类似的代码,我用它来打开Outlook的检查,并精确地反映你的意图,只是它更简化了它。
'requires early binding (reference set for Microsoft Word Object Library)
'first check if outlook is running and if not open it
Dim wdApp As Word.Application
On Error Resume Next
Set wdApp = GetObject(, "Word.Application")
On Error GoTo 0
If wdApp Is Nothing Then Set wdApp = New Word.Application
我一直在使用这个多年没有失败。
该错误必须来自其他地方 - 代码功能正常,只要您安装了Word 2010。 –
在询问429号码之前,错误号是否高于零? – reporter
@ DarrenBartrup-Cook是的,我使用的是2010版本。 –