在第二次运行VBA代码时出现“下标超出范围”错误

时间:2019-07-15 09:00:12

标签: excel vba

所以我知道这个问题经常被问到,而且我知道答案一百九十次是工作表名称无效或代码中不正确。但我敢肯定情况并非如此

但是,如果我犯了一个非常愚蠢的错误,我深表歉意。我是VBA的新手,刚刚接受了这项任务。

因此,下面的代码仅用于遍历不同电子表格中的两列并搜索相似之处。此刻非常简单,因为我真的只是刚开始,因此持续出现此错误会减慢进度。

当我运行一次代码时,它完成了,完成了我期望的操作,并且没有错误。但是,当我第二次不更改运行它时,将出现“运行时错误9”窗口。但是,如果我关闭代码中涉及的所有电子表格并重新打开它们,则代码将再次成功运行。

我已经调查了很多错误,但是找不到任何相关的内容。我认为这很简单,我很想念,但是我没有经验。这就是为什么我在这里

因此,我更改了工作表的名称,位置,并且在不同的电子表格中运行了类似的代码,而没有遇到相同的错误。这样看来床单的名称似乎是错误的。但是,如果是这种情况,则不应第一次运行。或者当我关闭并重新打开它们时。

Sub Test()

Dim wb1 As Workbook, wb2 As Workbook
Dim ws1 As Worksheet, ws2 As Worksheet
Dim cell As Range

Set wb1 = Workbooks.Open("C:\Users\user\Documents\Projects\CMM Update\CMM.xlsm")
Set ws1 = wb1.Sheets("CMM")

Set wb2 = Workbooks.Open("C:\Users\user\Documents\Projects\CMM Update\04-Jul.xlsx")
Set ws2 = wb2.Sheets("Data")

For Each cell In ws1.Range("B1:B25")
    If cell.Value = ws2.Range("A1").Value Then
        MsgBox "Active Cell"
        Exit Sub
    Else
        MsgBox "Not Active Cell"

   End If
Next cell     

End Sub

2 个答案:

答案 0 :(得分:0)

如果我的怀疑是正确的,并且由于工作簿已经打开,宏失败,请尝试以下操作。它检查工作簿是否已经打开:

Sub Test()

Dim wb1 As Workbook, wb2 As Workbook
Dim ws1 As Worksheet, ws2 As Worksheet
Dim cell As Range

'Test if wb1 is open
On Error Resume Next
    Set wb1 = Workbooks.Open("C:\Users\user\Documents\Projects\CMM Update\CMM.xlsm")
On Error GoTo 0
If err.Number <> 0 Then Set wb1 = Workbooks("CMM")
err.Clear

'Test if wb2 is open
On Error Resume Next
    Set wb2 = Workbooks.Open("C:\Users\user\Documents\Projects\CMM Update\04-Jul.xlsx")
On Error GoTo 0
If err.Number <> 0 Then Set wb2 = Workbooks("04-Jul")
err.Clear

Set ws1 = wb1.Sheets("CMM")
Set ws2 = wb2.Sheets("Data")

For Each cell In ws1.Range("B1:B25")
    If cell.Value = ws2.Range("A1").Value Then
        MsgBox "Active Cell"
        Exit Sub
    Else
        MsgBox "Not Active Cell"
   End If
Next cell     

End Sub

答案 1 :(得分:0)

好的,这很简单。我只需要将ActiveWorkbook.close添加到循环的末尾。

感谢迈克的帮助。是您的最后一条评论使我意识到,由于工作簿仍处于打开状态,因此错误即将发生。那就是我对VBA的兴趣。