2015-06-24 132 views
0

我正在編寫一個模塊,用於打開文件夾中的每個工作簿並從中複製一些信息。它可以在該文件夾中的大多數文件上順利運行,但當由模塊打開時,某些工作簿會顯示不同的名稱。我的代碼如下打開時重命名工作簿

Sub AutoUpdate() 
Application.ScreenUpdating = False 
Application.DisplayAlerts = False 
Sheets(1).Cells(1, 10).Value = Now() 
'refreshes timestamp 
Dim counter As Integer 
Dim form 
form = Dir("Macintosh HD:Users:user:Documents:Folder:") 
'Finds first form in folder 
counter = 1 
Do Until form = "" 
    Workbooks.Open ("Macintosh HD:Users:user:Documents:Folder:" & form) 
    Workbooks("Inventory.xlsm").Sheets(2).Cells(counter, 1).Value = Workbooks(form).Sheets(1).Range("D3").Value 
    Workbooks("Inventory.xlsm").Sheets(2).Cells(counter, 2).Value = Workbooks(form).Sheets(1).Range("D5").Value 
    Workbooks("Inventory.xlsm").Sheets(2).Cells(counter, 3).Value = Workbooks(form).Sheets(1).Range("D1").Value 
    Workbooks("Inventory.xlsm").Sheets(2).Cells(counter, 4).Value = Workbooks(form).Sheets(1).Range("D2").Value 
    Workbooks("Inventory.xlsm").Sheets(2).Cells(counter, 5).Value = Workbooks(form).Sheets(1).Range("L69").Value 
    Workbooks("Inventory.xlsm").Sheets(2).Cells(counter, 6).Value = Workbooks(form).Sheets(1).Range("K36").Value 
    Workbooks("Inventory.xlsm").Sheets(2).Cells(counter, 7).Value = Workbooks(form).Sheets(1).Range("C37").Value 
    Workbooks(form).Close 
    counter = counter + 1 
    form = Dir 
    'cycles through all forms 
Loop 
Workbooks("Inventory.xlsm").Sheets(2).Range("A:G").Sort Key1:=Workbooks("Inventory.xlsm").Sheets(2).Range("A:A"), Order1:=xlAscending, Key2:=Workbooks("Inventory.xlsm").Sheets(1).Range("C:C"), Order2:=xlAscending, Orientation:=xlSortRows 
Application.ScreenUpdating = True 
Application.DisplayAlerts = False 
End Sub 

這拉動從所述第一工作簿45中的數據,然後返回「運行時錯誤9下標超出範圍」。打開的工作簿顯示名稱爲文件名稱,並附加兩個看似隨機的數字。當我手動打開文件時,名稱將作爲文件名讀取。

+0

做了我回答解決你的問題?名稱中的隨機字符會使'Workbooks(form).Close'失敗。我還注意到,當你指定鍵時,你的'Sort'語句引用了2個不同的工作表。注意'表格(2)'和'表格(1)' – joehanna

回答

0

而不是使用Workbooks(form)來訪問數據,你應該簡單地在打開每個文件後使用ActiveWorkbook。您也可以關閉打開的工作簿ActiveWorkbook.Close

你也可以定義一個變量,像這樣: - Dim wb As Workbook,然後用這樣打開的工作簿指定變量: -

set wb = Workbooks.Open ("Macintosh HD:Users:user:Documents:Folder:" & form)

那麼你可以參考一下該工作簿使用wb。例如

Workbooks("Inventory.xlsm").Sheets(2).Cells(counter, 1).Value = wb.Sheets(1).Range("D3").Value 

,然後關閉它是這樣的: -

wb.Close 

不要忘了是一個很好的資源公民,並在年底與此釋放內存:

set wb = Nothing