2017-06-01 987 views
-1

我有一個表名數組。我想從其他文件複製數據並將數據粘貼到各自的工作表中。但它沒有找到該工作表。它創建在這個步驟中的錯誤:使用VBA Excel查找和激活工作表

worksheets.(sheets(i)).Activate 

這裏是我的代碼:

Sub NewWorkshet() 
    Dim criteria(40) As Integer 
    Dim i As Integer  
    Dim MyFile As String 

    MyFile = Application.GetOpenFilename() 

    criteria(0) = 335 
    criteria(1) = 336  
    criteria(2) = 337   
    criteria(3) = 338 
    criteria(4) = 339   
    criteria(5) = 351   
    criteria(6) = 392   
    criteria(7) = 393 

    Dim sheets As Variant   
    sheets = Array(a335, a336, a337, a338, a339, a351, a392, a393) 

    For i = 0 To 7   
     ' Remove Filter 
     Windows("firstbook.xlsx").Activate 
     ActiveSheet.Range("$A$1:$S$6274").AutoFilter Field:=17 
     Workbooks.Open (MyFile) 
     Worksheets("first").Select 
     ActiveSheet.Range("$A$1:$O$3339").AutoFilter Field:=2, Criteria1:=criteria(i) 

     Range("A2").Select 
     Range(Selection, Selection.End(xlToRight)).Select 
     Range(Selection, Selection.End(xlDown)).Select 
     Selection.Copy 

     Windows("firstbook").Activate 
     Worksheets("sheets(i)").Select 
     Range("B2").Select 
     Selection.End(xlDown).Select 
     Selection.Offset(1, -1).Select 
     ActiveSheet.Paste 

     Workbooks(MyFile).Close SaveChanges:=False 
    Next i 
End Sub 
+0

尼萊什請澄清。你有一個叫做「firstbook」的工作簿,裏面有表格名稱「a335」,「a336」等,你想複製到哪些書到哪?另一個工作簿並創建具有相同名稱的工作表? – micstr

回答

0

它的治療工作表( 「表(I)」),字面上的字張(I)選擇不作爲變量。所以它不會改變,它不會找到你的工作表。

您需要爲此創建一個字符串。

嘗試添加Dim MySheet As String

然後在循環使用:

MySheet = "sheets(" & i & ")" 

然後MySheet的工作可以被引用,並會改變,因爲你想要的。

+0

正如你在MySheet =「sheets(」&i&「)」之後所建議的那樣,我使用了Worksheets(MySheet)。選擇..但它不工作。它在此步驟顯示錯誤 - 工作表(MySheet)。選擇 –

+0

您是否在正確的工作簿中。這可能會造成麻煩。你需要激活新的工作簿嗎?我傾向於使用ThisWorbook.sheets(etc。 – micstr

+0

它顯示錯誤,當我使用ThisWorkbook.sheets(表(i))。選擇 –

0

的問題是,

Worksheets("sheets(i)").Select 

正在尋找一個叫 「張(I)」 工作表作爲文本/名稱。
如果改用

Worksheets(sheets(i)).Select 

則尋找一個名爲像變量/數組的值workhseet sheets(i)

+0

謝謝對於VBA指南!:D – KoderM16

+0

@Peh非常感謝您提供的指導性建議,我將按照我的代碼演示進行工作,正如您告訴我使用此工作表(工作表(i))選擇 但仍顯示錯誤 –

+0

@ NILESHSUTHAR如果你不告訴**你得到哪個**錯誤(錯誤信息),沒有人可以提供幫助。當然,數組'sheets'應該由'sheets = Array(「a335」,「a336」,「a337」,「a338」,「a339」,「a351」,「a392」,「a393」 )',當然你需要確保這些表名存在你當前選擇的工作簿中(或者選擇正確的工作表)。但我真的建議首先使用指南來改善你的代碼,這將減少你可以遇到的許多問題。如果底座是錯誤代碼,則很難糾正細節。 –

0

你的問題是,你沒有設置你的「牀單」值作爲文本。

sheets = Array(a335, a336, a337, a338, a339, a351, a392, a393) 

代碼應該讀

Dim sheets(0 To 7) As Variant 
sheets(0) = "a335" 
sheets(1) = "a336" 
sheets(2) = "a337" 
sheets(3) = "a338" 
sheets(4) = "a339" 
sheets(5) = "a351" 
sheets(6) = "a392" 
sheets(7) = "a393" 

然後參考如下;

Worksheets(sheets(i)).Select 
+0

按照你的建議使用後應該如何引用我的數組元素?我在做這個--- MySheet =「sheets(」&i&「)」 工作表(MySheet).Select但是這也顯示一個錯誤。當我打印MySheet時,它顯示工作表(0),但應顯示a335。如何解決這個 –

+0

這很奇怪我只是再次測試我自己的代碼,現在它不起作用。但是,下面的代碼一直用來填充你的數組。 點心片(0至7)變 片(0)= 「A335」 片材(1)= 「A336」 片(2)= 「A337」 片材(3)= 「A338」 片(5)=「a351」 (6)=「a392」 表(7)=「a393」 然後,請參閱以下內容。 工作表(表(i))。選擇 – TomW

+0

是的。它不起作用。 MySheet引用「a335」當我使用MySheet =工作表(i)但它顯示工作表(MySheet)中的錯誤。選擇...我應該如何解決這個問題? –

相關問題