繁体   English   中英

VBA不一致的运行时错误“ 91”

[英]VBA Inconsistent Run-time error '91'

就像前言一样,我不是一个程序员。 只是试图为一个宏使用一次创可贴。

当前需要在excel中遍历约3700行,并在约100个单词的文档中找到某些单词。

基本上,第1行需要找到单词“驴”(单元格A1)并搜索单元格A4中列出的文档,然后生成找到该单词的次数,如果大于2,则将单元格标记为“是”。

我的问题是,有时它将运行完成,有时在打开下一个文档时,我收到错误消息

运行时错误“ 91”:未设置对象变量或带块变量

通常,重新启动excel或更改要搜索的文档的文件路径会将其修复一次或两次。 这使我相信它与内存有关,但是我不确定。

任何想法是什么问题? 谢谢!

这是原样的代码,是的,它很草率。

Sub FindName()
    Dim wrdApp As Object
    Dim wrdDoc As Object
    Dim maxRowCount As Integer
    Dim TP As String
    Dim FindWord As String
    Dim result As String
    Dim RowCount As Integer
    Dim i As Long
    Dim iCount As Integer

    TP = "003"

        i = 115
        maxRowCount = 140

     On Error Resume Next
            Set wrdApp = GetObject(, "Word.Application")
            If Err.Number > 0 Then Set wrdApp = CreateObject("Word.Application")
            On Error GoTo 0
            wrdApp.Visible = True

    Set wrdDoc = wrdApp.Documents.Open("C:\TP\X-" & TP & ".docx")

    For i = i To maxRowCount



      If Cells(i, 4).Text = TP Then

         FindWord = Cells(i, 1).Text

         '// Defines selection for Word's find function
         wrdDoc.ActiveWindow.Selection.GoTo What:=wdGoToSection, Which:=wdGoToFirst
         wrdDoc.SelectAllEditableRanges
         iCount = 0

         '// Word Find Method Setup Block
         With wrdDoc.ActiveWindow.Selection.Find
             .Text = FindWord
             .Replacement.Text = ""
             .Forward = True
             .Wrap = 1 ' wdFindContinue (Word constant not defined in Excel)
             .Format = False
             .MatchCase = True
             .MatchWholeWord = True
             .MatchWildcards = False
             .MatchSoundsLike = False
             .MatchAllWordForms = False
            Do While wrdDoc.ActiveWindow.Selection.Find.Execute
                iCount = iCount + 1
                wrdDoc.ActiveWindow.Selection.MoveRight
               ' MsgBox iCount
            Loop
         End With


         '// Unnecessary storing, I know
         result = iCount
         Cells(i, 6).Value = result
         If result > 1 Then
                Cells(i, 7).Value = "YES"
         Else
                Cells(i, 7).Value = "NO"
         End If



      Else

      TP = Cells(i, 4).Text
      FindWord = Cells(i, 1).Value
        '// Close and don't save application
        wrdApp.Quit SaveChanges:=0 ' wdDoNotSaveChanges (Word constant not defined in Excel)

        Set wrdApp = Nothing
        Set wrdDoc = Nothing

            On Error Resume Next
            Set wrdApp = GetObject(, "Word.Application")
            If Err.Number > 0 Then Set wrdApp = CreateObject("Word.Application")
            On Error GoTo 0


        Set wrdDoc = wrdApp.Documents.Open("C:\TP\X-" & TP & ".docx")



        '// Defines selection for Word's find function

         wrdDoc.ActiveWindow.Selection.GoTo What:=wdGoToSection, Which:=wdGoToFirst
         wrdDoc.SelectAllEditableRanges
         iCount = 0
         '// Word Find Method Setup Block
         With wrdDoc.ActiveWindow.Selection.Find
             .Text = FindWord
             .Replacement.Text = ""
             .Forward = True
             .Wrap = 1 ' wdFindContinue (Word constant not defined in Excel)
             .Format = False
             .MatchCase = True
             .MatchWholeWord = True
             .MatchWildcards = False
             .MatchSoundsLike = False
             .MatchAllWordForms = False
            Do While wrdDoc.ActiveWindow.Selection.Find.Execute
                iCount = iCount + 1
                wrdDoc.ActiveWindow.Selection.MoveRight
            Loop
         End With


         '// Unnecessary storing, I know
         result = iCount
         Cells(i, 6).Value = result
         If result > 1 Then
                Cells(i, 7).Value = "YES"
         Else
                Cells(i, 7).Value = "NO"
         End If
      End If
    Next i


End Sub

您在错误行上的语法似乎正确。 您可以:
-通过插入debug.print行以显示文件名表达式来验证文件名
-手动打开Word,删除代码中的On error ,然后再次运行,以验证Word实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM