我的代码有什么问题 - “运行时错误91:对象变量或块变量未设置”

问题描述:

您能检查一下我在代码中丢失了什么吗? 当它达到wrd.Visible = True时,它给我错误“运行时错误91:对象变量或未设置块变量”。我的代码有什么问题 - “运行时错误91:对象变量或块变量未设置”

我已经激活了的Microsoft Word 14.0对象库

OBL SS

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 
+0

该错误必须来自其他地方 - 代码功能正常,只要您安装了Word 2010。 –

+0

在询问429号码之前,错误号是否高于零? – reporter

+0

@ DarrenBartrup-Cook是的,我使用的是2010版本。 –

我一般会建议不要使用早期绑定,尽管它可以与智能感知帮助。我可以通过在引用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 
+0

谢谢!有用。我需要稍微改变。请帮帮我。我如何将Set oDoc = oWD.Documents.Add'设置为'Set oDoc'作为活动文档,因为我的word doc已经打开。有没有办法控制或获得文档标题的访问权限? –

+0

我尝试使用'Set oDoc = oWD.ActiveDocument'。它不适用于已经打开并给我错误的文件**这个命令不可用,因为没有文档是打开的**但是,当我使用代码'Set oDoc = oWD.Documents.Add'添加文档时,它然后检测活动文档。 –

+0

我添加了评论代码来展示如何分配'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 

我一直在使用这个多年没有失败。