2016-09-26 101 views
0

我嘗試使用下面的代碼 PrintWB有以下值"C:\Users\jarora\Desktop\Master Test Sheet.xlsx"VBA工作簿對象,提供「下標超出範圍的錯誤」

PrintWB = .Cells(i, 1) & "\" & .Cells(i, 2) 
Workbooks(PrintWB).Sheets(Sheetname).Printout From:=Frompage, To:=Topage 

上面一行是給我的錯誤「下標超出範圍的錯誤」時,引用工作簿對象。

我引用工作簿對象時獲得上述線以下錯誤:

下標超出範圍錯誤的

任何幫助將非常讚賞,因爲這是我的拼圖的最後一塊我正在努力拼湊。

+3

您的工作手冊「Master Test Sheet.xlsx」是否打開?因爲'Workbooks()'是excel中所有當前打開的工作簿的集合。換句話說,如果該工作簿未打開,則不在「Workbooks()」集合中。如果它是開放的,那麼你可以通過2種方式中的其中一種進行調用。按索引或按名稱。索引是一個數字,所以1將是第一本打開的書。名稱將是「Master Test Sheet.xlsx」。不是整個地址。 – Tyeler

+1

你怎麼知道它不是'.Sheets(Sheetname)'這是拋出錯誤?確定你可以把它分成兩行。聲明一個工作簿變量,比如'wb',然後在一行中有'Set wb = Workbooks(PrintWB)',並在下一行有'wb.Sheets(SheetName).etc.'查看哪一行觸發錯誤。 –

+0

@JohnColeman我們知道'.Sheets(Sheetname)'不會拋出錯誤,因爲'Workbooks(PrintWB)'中的'PrintWB'是整個文件路徑,它不是'Workbooks()'接受的格式。 'Workbooks()'正在查找INDEX號碼或文件名稱。在他的情況下,文件名將是'「Master Test Sheet.xlsx」'。 – Tyeler

回答

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 
+0

哇!這工作就像一個魅力..謝謝泰勒。 – user6879637

+0

如果這回答你的問題,你介意把這個標記爲答案嗎?很高興我能幫上忙! – Tyeler

+0

@johncoleman謝謝你的啓發。 – user6879637