Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 选择工作簿时出现运行时错误9下标超出范围_Vba_Excel - Fatal编程技术网

Vba 选择工作簿时出现运行时错误9下标超出范围

Vba 选择工作簿时出现运行时错误9下标超出范围,vba,excel,Vba,Excel,我正在尝试使用VBA在Excel 2010中构建一个数据输入表单。在表单初始化期间,我将一个对象设置为引用另一个工作表,以便访问它。这就是我所拥有的: Private Sub UserForm_Initialize() Dim master As Excel.Workbook Dim masterworksheetFmn As Excel.Worksheet Dim masterworksheetAdv As Excel.Worksheet Dim masterworksheetTechs A

我正在尝试使用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")

但是,如果在运行宏之前打开第二个工作簿,则不会发生错误。我假设我必须先激活第二个工作簿或其他东西,否则我的参考资料写得不正确。我可以找到很多关于这个运行时错误的引用,但是没有一个直接说明我正在尝试做什么。我做错了什么?

当您使用
Excel.Workbooks
时,您指的是一个通用
工作簿
集合。如果要访问当前应用程序中的
工作簿
集合,则需要使用
application.Workbooks

您也可以在不使用
应用程序
限定符的情况下使用它,因为它假定您正在当前应用程序实例中工作,所以

Set master = Application.Workbooks("ServiceReturnsMaster.xlsm")

两者的作用应该相同


或者,如果工作簿在运行时未打开,则需要使用
工作簿.open()
方法:

Set master = Workbooks.Open("C:\Path\to\ServiceReturnsMaster.xlsm")

使用
Application.workbook
或只需
workbook
查找并替换并清除所有
Excel.
字符串即可。默认情况下,您正在应用程序对象中工作。是的,工作簿必须在同一个应用程序实例中打开,但它不必是活动工作簿。@ScottCraner-您能在不打开工作簿的情况下将工作簿对象设置为未打开的工作簿吗?我通常使用
set master=workbooks.open(…)
@Macro-Man我想要的是从另一个工作簿填充组合框,而不打开它,如下所示:“填充组合框,而masterworksheetFmn.Cells(I,1).Value”“ForemanBox.AddItem masterworksheetFmn.Cells(I,1).Value i=i+1循环是否还有其他方法需要使用?我不想打开另一个工作簿。如果不以这种或那种方式打开工作簿,则无法打开该工作簿。唯一的选择是在当前工作簿中使用引用已关闭工作簿中单元格的公式,然后使用这些公式的结果。理论上,您可以使用ADO或类似的工具来查询工作簿作为数据库,但对于您所做的工作来说,这将是荒谬的,完全是过火了doing@MacroMan有没有办法打开工作簿,使其最小化或至少在后台打开?目前,当我运行宏时,它会在窗体顶部打开工作簿。
Set master = Workbooks.Open("C:\Path\to\ServiceReturnsMaster.xlsm")