2016-08-15 70 views
0

Dears, 任何人都可以帮助我为什么停止带有错误消息的代码(运行时错误'9':下标超出范围)?VBA中的工作簿表单最后一个单元格运行错误

的代码片段:

CollectFileName = "C:\Users\g\Documents\CAFM\VBS\access.xlsx" 

    Workbooks.Open (CollectFileName) 
    ActiveWindow.Visible = False 

LastDayRow = Workbooks(CollectFileName).Sheets(1).Range("B" & Rows.Count).End(xlUp).Row 
+0

您试图查看的工作表实际上是名为“1”还是称为“工作表1”。这将解释为什么它认为它超出范围,如果名称不正确。你正在调用一些不存在的东西。 – Gallus

+1

@Gallus它确实存在。 '1'是表格集合的索引号。 – Brian

回答

3

当使用一个工作簿指定表,你也应该做同样的Rows.Count(和其他人一样Cells(), Columns()Rows()等):

LastDayRow = Workbooks(CollectFileName).Sheets(1).Range("B" & Workbooks(CollectFileName).Sheets(1).Rows.Count).End(xlUp).Row

CollectFileName = "C:\Users\g\Documents\CAFM\VBS\access.xlsx" 
Dim wb as Workbook 
Set wb = Workbooks.Open(CollectFileName) 

With wb.Sheets(1) 
    lastDayRow = .Range("B" & .Rows.Count).End(xlUp).Row 
End With 
+1

FWIW - 虽然这可以解决问题,但下标超出范围是由于OP将完整的字符串“C:\ Users \ g \ Documents \ CAFM \ VBS \ access.xlsx”传递到“WorkBooks”而导致的只是''access.xlsx“''。通过分配变量'wb'可以避免这种情况。 'With'块是一个增加的“良好实践”。 –

+0

@ScottCraner - 感谢您的澄清! – BruceWayne

+0

你说得对。 “wb”是解决方案。感谢大家的帮助。 – vergab

相关问题