【发布时间】:2016-09-26 00:13:15
【问题描述】:
我正在尝试使用以下代码
PrintWB 具有以下值"C:\Users\jarora\Desktop\Master Test Sheet.xlsx"
PrintWB = .Cells(i, 1) & "\" & .Cells(i, 2)
Workbooks(PrintWB).Sheets(Sheetname).Printout From:=Frompage, To:=Topage
引用工作簿对象时,上面的行给我错误“下标超出范围错误”。
在引用 Workbook 对象时,我在上面的行中收到以下错误:
下标超出范围错误
任何帮助都将不胜感激,因为这是我试图拼凑的最后一块拼图。
【问题讨论】:
-
您的工作簿
Master Test Sheet.xlsx是否打开?因为Workbooks()是 excel 中所有当前打开的工作簿中的collection。换言之,如果该工作簿未打开,则它不在Workbooks()集合中。如果它是打开的,那么您可以通过 2 种方式之一调用它。按索引或按名称。索引是一个数字,所以 1 将是第一个打开的书。名称将是“Master Test Sheet.xlsx”。不是整个地址。 -
你怎么知道抛出错误的不是
.Sheets(Sheetname)?为了确保你可以把它分成两行。声明一个工作簿变量,比如wb,然后在一行中有Set wb = Workbooks(PrintWB),在下一行有wb.Sheets(SheetName).etc.,看看哪一行触发了错误。 -
@JohnColeman 我们知道
.Sheets(Sheetname)没有抛出错误,因为Workbooks(PrintWB)中的PrintWB是整个文件路径,这不是Workbooks()可接受的格式。Workbooks()正在寻找索引号或文件名。在他的例子中,文件名是"Master Test Sheet.xlsx"。 -
@Tyeler 好点。我错过了那个细节。尽管如此,将这些东西分成两行并不是一个坏主意,部分是出于调试原因,部分是出于一般设计。
-
@JohnColeman 我完全同意你的看法。在我的回答中,我最终做了类似的事情,因为我需要代码的工作簿名称才能按照他期望的方式工作