2017-04-20 156 views
0

我只是試圖從「工作簿」頂部單元格匹配時將值從一個工作簿複製並粘貼到另一個工作簿工作表的名稱。Excel VBA如何將WorkSheet名稱與單元格值匹配,然後複製並粘貼一系列單元格

但它在大多數時間給我錯誤1004。有任何想法嗎?

Sub Cycle() 

Dim ws As Worksheet 
Dim y As Integer 

For Each ws In ThisWorkbook.Sheets 
      ActiveSheet.Name = Worksheets("Target").Cells(1, y) 
      Worksheets("Target").Range(Cells(2, y), Cells(24, y)).Copy 
      Selection.Copy 
      ActiveSheet.Range("e3").Paste 
      Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
      :=False, Transpose:=False 

      y = y + 1 


     Next ws 

End Sub 
+0

Excel沒有列0,所以當'y'爲0時'Cells(1,y)'不起作用。(初始化'y'爲1並且它可能不會崩潰 - 但是我不'你認爲你的代碼正在做你認爲它將要做的事情。) – YowE3K

+0

對,它不工作,它只是複製並粘貼到同一個目標工作表的值,但我實際上想要在目標的不同列中的值工作表要複製到多個工作表 – user7892858

回答

0

我不知道,如果我知道你想要什麼,而是讓這個嘗試:

Sub Cycle() 

Dim ws As Worksheet 
Dim wsTarg As Worksheet: Set wsTarg = Worksheets("Target") 
Dim y As Integer 

For Each ws In ThisWorkbook.Sheets 
    y = 1 
    While (wsTarg.Cells(1, y) <> vbNullString) 
     If ws.Name = wsTarg.Cells(1, y) Then 
      wsTarg.Range(wsTarg.Cells(3, y), wsTarg.Cells(25, y)).Value = _ 
       ws.Range(ws.Cells(1, 1), ws.Cells(23, 1)).Value 
     End If 
     y = y + 1 
    Wend 
Next ws 
End Sub 

這不是做的最好的方法(我們可以優化,以避免驗證列,其已被複制並且不驗證目標電子表格),但它會查找所有工作表並與目標工作表第一行上的所有單元格進行比較。如果工作表名稱與單元名稱完全相同,它會將第一列(單元格1到23)複製到目標工作表中,單元格3到25.

我希望這有助於!

+0

親愛的布魯諾,感謝您的快速回復。雖然複製的單元格並未粘貼在工作表中。這些單元格被複制並粘貼在同一個「目標」表單中。我在同一文件excel文件中有大約50張表格,最後是「目標」表格。你介意告訴我如何解決它? – user7892858

+0

哦,現在我明白了。你想完全相反。從「目標」工作表複製到其他工作表!因此它只是反轉這一行: 'ws.Range(ws.Cells(1,1),ws.Cells(23,1))。Value = wsTarg.Range(wsTarg.Cells(3,y ),wsTarg.Cells(25,y))。Value當我們倒過程時,反轉所有代碼也許是個好主意。這會讓它變得更快。請讓我知道你是否需要大規模地做這個,所以我們可以改進它。 :) –

相關問題