尝试访问打开的工作簿会使'subsript超出范围'

时间:2018-06-07 13:14:37

标签: excel vba excel-vba

我有一个我无法解决的奇怪问题。

我在Workbook“1.xlsm”中有一个宏。这个宏正在打开Workbook“2.xlsx”,并且正在向Workbook“1.xlsm”获取一些数据。这段代码在我的电脑上工作得很完美,但它在我朋友的电脑上给出了错误'下标超出范围'。我的操作系统是Win 8.1,Excel 2010,我的朋友Win 10,excel 2016。 以下是代码的一部分:

Private Sub Workbook_Open()
Dim i as integer
Dim Miesiac as integer
Dim TempS1 as single

Miesiac = Month(Cells(2, 9))
Workbooks.Open ("D:\2.xlsx")
i = 2
Do While Workbooks("2").Worksheets(1).Cells(i, 2) <> ""
    If Month(Workbooks("2").Worksheets(1).Cells(i, 2)) = Miesiac Then
        TempS1 = Workbooks("2").Worksheets(1).Cells(i, 6) - Workbooks("2").Worksheets(1).Cells(i, 5)
    EndIf
    i=i+1
Loop
Workbooks("2").Close
Cells(7, 4) = TempS1
End Sub

与'Do While'循环一致我在朋友的计算机上得到提及的错误,而我的工作正常。工作簿“2.xlsx:在我朋友的计算机上打开,我用debug.print获取它的名字。 还有一个认为这个代码是This_Workbook区域,因为这个宏是Workbook_Open。 在我看来,好像我的朋友计算机上有一些系统/ excel设置,但我找不到哪一个。 编辑:我已经把可运行的代码放了几行。

1 个答案:

答案 0 :(得分:0)

如果将工作簿存储为对象而不是使用workbooks("name")命令访问它,也许你会有更好的运气。

我对此进行了测试,发现它在Excel 2010和2016上都有效。

Private Sub Workbook_Open()
    Dim wb  As Excel.Workbook, _
        i   As Long
    Set wb = Excel.Workbooks.Open("D:\2.xlsx")
    Let i = 1
    Do Until IsEmpty(wb.Sheets(1).Cells(i, 2))
        ''  some operation
        i = i + 1
    Loop
End Sub

这将从

进入已编辑的来源
Private Sub Workbook_Open()

    Dim wb      As Excel.Workbook, _
        i       As Long, _
        Miesiac As Integer, _
        TempS1  As Single

    Set wb = Excel.Workbooks.Open("D:\2.xlsx")
    Let i = 2

    With wb.Sheets(1)
        Do Until IsEmpty(.Cells(i, 2))
            If Month(.Cells(i, 2)) = Miesiac Then Let TempS1 = .Cells(i, 6) - .Cells(i, 5)
            Let i = i + 1
        Loop
    End With
    Call wb.Close
    Let ThisWorkbook.[D7] = TempS1

End Sub