我正在尝试使用VBA在Excel 2010中构建数据输入表单。在表单初始化期间,我正在设置一个对象以引用另一个工作表,以便我可以访问它。这就是我所拥有的:
Private Sub UserForm_Initialize()
Dim master As Excel.Workbook
Dim masterworksheetFmn As Excel.Worksheet
Dim masterworksheetAdv As Excel.Worksheet
Dim masterworksheetTechs As Excel.Worksheet
Dim i As Integer
Set master = Excel.Workbooks("ServiceReturnsMaster.xlsm")
Set masterworksheetFmn = master.Worksheets("Foremen")
Set masterworksheetAdv = master.Worksheets("Advisors")
Set masterworksheetTechs = master.Worksheets("Techs")
当我运行宏时,我得到“运行时错误9:下标超出范围”。这发生在这一行:
Set master = Excel.Workbooks("ServiceReturnsMaster.xlsm")
但是,如果我在运行宏之前打开第二个工作簿,则不会发生错误。我假设我必须先激活第二个工作簿或某些东西,否则我的参考文献写得不正确。我可以找到许多对此运行时错误的引用,但没有一个直接解决我正在尝试做的事情。我做错了什么?
答案 0 :(得分:4)
当您使用Excel.Workbooks
时,您指的是通用 Workbooks
集合。如果您想访问当前应用中的Workbooks
集合,则需要使用Application.Workbooks
。
您也可以在没有Application
限定符的情况下使用它,因为它假设您在当前的应用程序实例中工作,所以
Set master = Application.Workbooks("ServiceReturnsMaster.xlsm")
或
Set master = Workbooks("ServiceReturnsMaster.xlsm")
两者都应该完全相同。
或者,如果您的工作簿在运行时未打开,则需要使用Workbooks.Open()
方法:
Set master = Workbooks.Open("C:\Path\to\ServiceReturnsMaster.xlsm")