【问题标题】:VBA workbook object giving "Subscript Out of range Error"VBA 工作簿对象给出“下标超出范围错误”
【发布时间】: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 我完全同意你的看法。在我的回答中,我最终做了类似的事情,因为我需要代码的工作簿名称才能按照他期望的方式工作

标签: vba excel range out


【解决方案1】:

您遇到的问题是您尝试打印 Excel 看不到的工作簿。 Workbooks() 是所有打开工作簿的集合。

第 1 步是打开目标工作簿。不过,在我们打开它之前,最好检查文件路径是否准确。一个简单的IF STATEMENT 就足够了:If Dir(yourfilepath) <> "" Then

第 2 步是打开目标工作簿,打印目标工作表,然后关闭工作簿。我添加了Workbooks(targetworkbook).Saved = True 行。这将隐藏“您要保存更改吗?”当我们尝试关闭工作簿时弹出的对话框。我们知道我们没有进行任何更改,因此使用此方法是安全的。

WBPath = .Cells(i, 1) & "\" & .Cells(i, 2)
PrintWB = .Cells(i,2) 'I'm assuming this is "Master Test Sheet.xlsx"
If Dir(WBPath) <> "" Then
    Workbooks.Open (WBPath)
    Workbooks(PrintWB).Sheets(Sheetname).PrintOut From:=1, To:=1
    Workbooks(PrintWB).Saved = True
    Workbooks(PrintWB).Close
Else: MsgBox "File not found.", vbCritical
End If

【讨论】:

  • 如果这回答了您的问题,您介意将其标记为答案吗?很高兴我能帮上忙!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-27
  • 2017-06-16
  • 2014-04-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多