excel - 如何将工作簿 - 工作表和范围作为变量引用
问题描述
我一直收到运行时错误 9,“下标超出范围”。不知道该怎么做。我通过下面的最后一行代码得到错误。
Dim Sheetstarybpm As Worksheet
Dim countrowsoldbpm1 As Long
Dim rng2 As Range
With Application.FileDialog(msoFileDialogFilePicker)
'Makes sure the user can select only one file
.AllowMultiSelect = False
.Title = "Select BPM Report for previous month"
.ButtonName = "OK"
'Filter to just the following types of files to narrow down selection options
.Filters.Add "Excel Files", "*.xlsx; *.xlsm; *.xls; *.xlsb", 1
'Show the dialog box
.Show
oldbpm = .SelectedItems.Item(1)
End With
Workbooks.Open oldbpm
Set Sheetstarybpm = ActiveSheet
countrowsoldbpm1 = Range("a10", Range("a10").End(xlDown)).Rows.Count
Set myrange = Range("A10:CW" & countrowsoldbpm1)
Set rng2 = Workbooks(oldbpm).Worksheets(Sheetstarybpm).Range(myrange)
解决方案
您错误地使用了对象方法。存储后,Sheetstarybpm
您可以进一步使用它...因此,在打开工作簿时,将其存储为工作簿对象,以便以后可以在需要时引用它。此外,在设置工作表对象时,您现在可以显式引用您的工作簿,因为您已经存储了它(更好的编码实践)。还建议在设置范围时明确定义工作表对象引用。请参阅下面的修改代码。
Dim Sheetstarybpm As Worksheet
Dim countrowsoldbpm1 As Long
Dim myWB As Workbook
With Application.FileDialog(msoFileDialogFilePicker)
'Makes sure the user can select only one file
.AllowMultiSelect = False
.Title = "Select BPM Report for previous month"
.ButtonName = "OK"
'Filter to just the following types of files to narrow down selection options
.Filters.Add "Excel Files", "*.xlsx; *.xlsm; *.xls; *.xlsb", 1
'Show the dialog box
.Show
oldbpm = .SelectedItems.Item(1)
End With
Set myWB = Workbooks.Open(oldbpm)
Set Sheetstarybpm = myWB.ActiveSheet
countrowsoldbpm1 = Sheetstarybpm.Range("a10", Range("a10").End(xlDown)).Rows.Count
Set myrange = Sheetstarybpm.Range("A10:CW" & countrowsoldbpm1)
编辑:从代码中删除,因为它与OP 在评论中指出rng2
的相同。myrange
推荐阅读
- classification - 将 GPS 数据聚类为“k”组
- wordpress - 如何更改帖子类型“页面”上 CPT 循环的摘录长度?
- python - 如果同一索引处的值相等,则删除两个列表的尾随项
- c# - 为什么我的代码在没有 DataContext 的情况下按预期工作并且在我添加 DataContext 时会中断?
- apache-flink - 如何组织一个复杂的 Apache Flink 应用程序
- python - 使用 HMMLearn.multinomialhmm(discrete hmm) 预测下一次观察
- python - python当前会话不会在命令行退出
- python - Python 3 中的字符串比较
- git - 从 Azure 发布管道执行 Git 推送
- sql - 使用 SQL Server 中关于订单跟踪的“数据透视”将行转换为列