2016-08-19 101 views
0

我在一個選項卡上有一個名爲「區域列表」的列表和一個將區域名稱放入單元格C3中的模板。每個分區的分支數量(分佈在1 & 500+以上,取決於分區)的分佈數量非常多,所以報告模板在某些情況下有很多空白區域。我想出了這個循環遍歷區域列表,複製模板選項卡,重命名區名稱,插入區的名稱到單元格C3,然後我有另一個循環隱藏空白行。遍歷列表並隱藏空白

它可以工作,但需要花費很長時間,如每個選項卡5分鐘,然後在四個選項卡後,我在第一個像Sub CreateTabsFromList中出現對象錯誤。

代碼有問題,或者這只是一個非常低效的方法嗎?如果有的話,誰能幫助一個更好的方法?

Sub HideRows() 
Dim r As Range, c As Range 
Set r = Range("a1:a1000") 'Sets range well beyond the last possible row with data 
Application.ScreenUpdating = False 
For Each c In r 
If Len(c.Text) = 0 Then 
    c.EntireRow.Hidden = True 'Hide the row if the cell in A is blank 
Else 
    c.EntireRow.Hidden = False 
End If 
Next c 
Application.ScreenUpdating = True 
End Sub 


Sub CreateSheetsFromAList() 
Dim MyCell As Range, MyRange As Range 

Set MyRange = Sheets("District List").Range("A1") 
Set MyRange = Range(MyRange, MyRange.End(xlDown)) 

For Each MyCell In MyRange 
    Sheets("Template").Copy After:=Sheets(Sheets.Count) 'creates a new worksheet 
    Range("C3").Value = MyCell.Value 'Pastes value in C3 
    Sheets(Sheets.Count).Name = MyCell.Value 'renames worksheet 
    HideRows 'Hides rows where cell in column A is "" 


Next MyCell 

結束子

+0

你從不標記任何答案?你從來沒有得到一個有效的答案你的問題,或者你只是不知道該怎麼做? – cyboashu

+0

我猜你在問我關於我的一篇舊帖子,我剛纔回去並給出了答案。對於我剛剛發佈的這個,幾分鐘前還沒有得到答案。 – AngelOfDef

回答

0

刪除/隱藏行,由1 1是最慢的方法。總是將它們放在一個範圍內,並一次刪除/隱藏它們,循環遍歷單元比循環數組慢。

Sub HideRows() 

    Dim lCtr As Long 
    Dim rngDel As Range 
    Dim r  As Range 
    Dim arr 

    Set r = Range("a1:a1000") 'Sets range well beyond the last possible row with data 
    Application.ScreenUpdating = False 

    arr = r 
    For lCtr = LBound(arr) To UBound(arr) 
     If arr(lCtr, 1) = "" Then 
      If rngDel Is Nothing Then 
       Set rngDel = Cells(lCtr, 1) 'harcoded 1 as you are using column A 
      Else 
       Set rngDel = Union(rngDel, Cells(lCtr, 1)) 
      End If 
     End If 
    Next 


    If Not rngDel Is Nothing Then 
     rngDel.EntireRow.Hidden=True 
    End If 

    Application.ScreenUpdating = True 
End Sub 

對於1000行需要幾分之一秒。