我有一个我无法解决的奇怪问题。
我在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设置,但我找不到哪一个。 编辑:我已经把可运行的代码放了几行。
答案 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