2017-06-20 57 views
0

我在「摘要」選項卡中添加了一行動態列標題,並在工作簿末尾添加了111個工作表,儘管此編號可能會更改。我搜索每個附加工作表中的每個列標題,並將任何匹配下面的單元格立即複製到其對應的列和行,即每個附加工作表的新行,在「摘要」選項卡中。輸出符合我的期望。循環遍歷每個附加工作表所需的時間不會。請讓我知道是否有明顯的方法來優化代碼或更有效地實現我想要的結果。提前致謝。在列標題搜索和工作表循環中提高性能VBA

Sub riasummary() 
    Dim riawksht  As Worksheet 
    Dim consolwksht  As Worksheet 
    Dim c    As Integer 
    Dim r    As Long 
    Dim sheader   As Range 
    Dim sheaders  As Range 
    Dim rheader   As Range 
    Dim rheaders  As Range 

    c = Sheets("Summary").Cells(1, Columns.Count).End(xlToLeft).Column 
    Set sheaders = Sheets("Summary").Range(Cells(1, 1), Cells(1, c)) 

    For Each riawksht In ActiveWorkbook.Worksheets 
     If riawksht.Name <> "Summary" Then 
      Set rheaders = riawksht.Range("a5:xfd12") 
      For Each rheader In rheaders 
       For Each sheader In sheaders 
        r = Sheets("Summary").Cells(Rows.Count, "a").End(xlUp).Row 
        If rheader.Value = sheader.Value Then 
         rheader.Offset(1, 0).Copy 
         sheader.Offset(r, 0).PasteSpecial xlPasteAll 
         Application.CutCopyMode = False 
         'sheader.Offset(1, 0).Value = rheader.Offset(1, 0).Value 

        End If 

       Next 
      Next 
     End If 
    Next 

End Sub 

作爲一個切線,我也偶爾會在下面的代碼行,我似乎無法破譯返回「應用程序定義或對象定義的錯誤」,並在這裏任何見解將不勝感激,以及。

Set sheaders = Sheets("Summary").Range(Cells(1, 1), Cells(1, c)) 
+0

因此,您的非概要標題可能在5到12行的任何地方? –

+0

更具體地說,只是第5,9和11行。 – Abagnale

回答

0
Set sheaders = Sheets("Summary").Range(Cells(1, 1), Cells(1, c)) 

應該是:

With Sheets("Summary") 
    Set sheaders = Sheets("Summary").Range(.Cells(1, 1), .Cells(1, c)) 
End With 

你應該總是避免不合格CellsRange電話,因爲他們將默認(在常規模塊)到活動工作表。

+0

這是有道理的,並已解決我的問題。謝謝你的澄清。 – Abagnale