2013-06-20 130 views
0

我想從多個工作簿中導入數據,這些工作簿全部來自同一張工作表索引(3)。 我是vba的新手,我想出瞭如何打開多個文件,並將數據從一張紙複製到另一張工作簿中的單個文件,但我似乎無法弄清楚如何爲多個文件做這件事。 我突出顯示錯誤的位置,它告訴我「對象不支持此屬性或方法」如何在for循環中爲excel定義一個對象vba

請問您可以幫忙嗎? 感謝

Sub dataimport() 

' Set Vars 
Dim ArbinBook As Workbook, DataBook As Workbook 
Dim i As Integer, j As Integer 
Dim Caption As String 
Dim ArbinFile As Variant, DataFile As Variant 


' make weak assumption that active workbook is the target 
Set DataBook = Application.ActiveWorkbook 

' get Arbin workbook 
Caption = "Please select an input file" 
    ' To set open destination: 
    ' ChDrive ("E") 
    ' ChDir ("E:\Chapters\chap14") 
    ' With Application 

'Set "arbinfile" as variant, the "true" at end makes it into an array 
ArbinFile = Application.GetOpenFilename(, , Caption, , True) 

'Exit when canceled 
If Not IsArray(ArbinFile) Then 
    MsgBox "No file was selected." 
    Exit Sub 
End If 

Dim targetSheet As Worksheet 
Set targetSheet = DataBook.Sheets(1) 


'Open for every integer i selected in the array "arbinfile" 
For i = LBound(ArbinFile) To UBound(ArbinFile) 
     Set ArbinBook = Workbooks.Open(ArbinFile(i)) 


targetSheet.Range("A2", "G150").Value = ArbinBook.Sheets(3).Range("A2", "G150").Value 

    **ERROR at the line above** 

     Workbooks(DataSheet).Activate      'Reactivate the data book 
     Worksheets(1).Activate        'Reactivate the data sheet 
     ActiveWorkbook.Sheets(1).Copy _ 
      after:=ActiveWorkbook.Sheets(1) 
     Workbooks(ArbinFile(1)).Activate     'Reactivate the arbin book(i) 


     ArbinBook.Close 

Next i 
Beep 

End Sub 
+0

嘗試不使用在任的範圍內來電 – Brad

+0

'.value'是誤差在循環的開始發生,或當你要複製的範圍內? (上面或下面哪裏出現** ERROR HERE **的行?) –

+0

嗨,對不起,錯誤出現在行「targetsheet.range ...」 –

回答

1

我的直覺告訴我,ArbinBook.Sheets(3)是圖表表,而不是一個工作表(或者,至少,這是其他的東西比工作表)。它也可能被隱藏,但它仍然會被索引爲(3)。

如果是這樣,請將Sheets(3)更改爲Worksheets(3)

加入:順便說一句如果這是真的,這也說明了爲什麼使用索引號是不可靠的。如果可能,請參考工作表的名稱。 (我明白這可能不總是可能的。)

添加了(來自評論)您的代碼中沒有任何名爲DataSheet的東西。將Option Explicit添加到模塊的頂部以指示所有此類錯誤。

+0

嗨,謝謝,錯誤現在不同,說「自動化錯誤「 –

+0

所以當它產生錯誤時,它會帶你到哪? **添加了**,但是在這行'Workbooks(ArbinFile(1))中的1。Activate'應該是** i **。 –

+0

好的,謝謝,我解決了。但錯誤仍然與之前一樣 –

0

嘗試改變線Set ArbinBook = Workbooks.Open(ArbinFile(i))

Set ArbinBook = Workbooks(arbinfile(i))

我可能是錯的,但我認爲這是試圖設置您的工作簿對象,成爲打開另一個工作簿中的作用,而不是誣指爲workboook 。

+0

'Workbooks.Open(「somefile」)'打開工作簿,然後'ArbinBook'將引用本書。您的第二個陳述假定工作簿已經打開。 –

+0

哦,我明白了。我認爲這一錯誤正在發生。 – Acantud

-1
Sub Multiple() 
Application.DisplayAlerts = False 
Application.EnableEvents = False 
Dim exlApp As Excel.Application 
Dim exlWb1 As Excel.Workbook 
Dim exlWb2 As Excel.Workbook 
Dim exlWb3 As Excel.Workbook 
Dim exlWs1 As Excel.Worksheet 
Dim exlWs2 As Excel.Worksheet 
Dim exlWs3 As Excel.Worksheet 
Set exlApp = CreateObject("Excel.Application") 
Set exlWb1 = exlApp.Workbooks.Open("C:\yourpath1\file1.xls") 
Set exlWb2 = exlApp.Workbooks.Open("C:\yourpath2\file2.xls") 
Set exlWb3 = exlApp.Workbooks.Open("C:\yourpath3\file3.xls") 
Set exlWs1 = exlWb.Sheets("Sheet1") 
Set exlWs2 = exlWb.Sheets("Sheet1") 
Set exlWs3 = exlWb.Sheets("Sheet1") 
exlWb1.Activate 
exlWb2.Activate 
exlWb3.Activate 
'code 
exlWb.Close savechanges:=True 
exlWb.Close savechanges:=True 
exlWb.Close savechanges:=True 
Set exlWs1 = Nothing 
Set exlWs2 = Nothing 
Set exlWs3 = Nothing 
Set exlWb1 = Nothing 
Set exlWb2 = Nothing 
Set exlWb3 = Nothing 
exlApp.Quit 
Set exlApp = Nothing 
Application.EnableEvents = True 
Application.DisplayAlerts = True 
End Sub 
+0

你已經硬編碼了循環中通常應該做什麼,並且在內存中需要1/3的對象......更不用說,如果你有3個以上的工作簿,或者少於3個工作簿,這種方法不起作用超過3個工作簿,您不斷需要添加新的'Workbook'和'Worksheet'變量等。 –