2016-12-13 161 views
1

我試着運行宏,應清除張AA,BB和CC的內容,然後移動到表菜單,但其highliting我就行4.有誤,請參見下面的代碼。Excel的VBA clearContents中錯誤

Sub clear_sheets() 

Snames = Split(AA, BB, CC) 

For Count = 0 To UBound(Snames) 

    Sheets(Snames(Count)).Range("A3:C3").End(xlDown).ClearContents 

Next 
    Sheets("MENU").Select 
Optimise (False) 

End Sub 

我在不同的論壇上發佈了一些不同的方法。哪一個會更有效率地運行,我的意思是哪一個會減輕處理的壓力?

Sub clear_sheets() 

Optimise (True) 

Snames = Split("AA, BB, CC", ", ") 

For count = 0 To UBound(Snames) 
MyRange = Range("A3:C3", Range("A3:C3").End(xlDown)).Address 

    ThisWorkbook.Sheets(Snames(count)).Range(MyRange).ClearContents 

Next 
    Sheets("MENU").Select 
Optimise (False) 

End Sub 

更新 我明白這不是一個代碼編寫的網站,但我想問問你,如果你能有一個看看下面我的代碼。

Sub distribute_dsp_data_9() 

Sheets("raw_data_1_9").Visible = True 

Sheets("raw_data_1_9").Select 
ActiveSheet.ListObjects("COMP_summ_9").Range.AutoFilter Field:=2, Criteria1 _ 
    :="DTTD" 
Range("C2").Select 
Range(Selection, Selection.End(xlDown)).Select 
Range(Selection, Selection.End(xlToLeft)).Select 
Selection.Copy 
Sheets("DTTD").Select 
Range("A3").Select 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 

Sheets("raw_data_1_9").Select 
ActiveSheet.ListObjects("COMP_summ_9").Range.AutoFilter Field:=2, Criteria1 _ 
    :="FDTL" 
Range("C2").Select 
Range(Selection, Selection.End(xlDown)).Select 
Range(Selection, Selection.End(xlToLeft)).Select 
Selection.Copy 
Sheets("FDTL").Select 
Range("A3").Select 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 

Sheets("raw_data_1_9").Select 
ActiveSheet.ListObjects("COMP_summ_9").Range.AutoFilter Field:=2, Criteria1 _ 
    :="FULL" 
Range("C2").Select 
Range(Selection, Selection.End(xlDown)).Select 
Range(Selection, Selection.End(xlToLeft)).Select 
Selection.Copy 
Sheets("FUL ON").Select 
Range("A3").Select 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 

Sheets("raw_data_1_9").Select 
ActiveSheet.ListObjects("COMP_summ_9").Range.AutoFilter Field:=2 

Sheets("raw_data_1_9").Visible = False 

末次

+0

你有什麼期望'AA','BB','CC',是?圖紙名稱?這些都沒有聲明,所以VBA假設他們是我認爲的某種變量... – BruceWayne

回答

3

試試這個。我已經正確聲明的變量,並賦值使用Array()您的陣列,而不是Split()都是罰款,但Array()更靈活

Sub clear_sheets() 
    Dim sheetNames As Variant 
    Dim count As Integer 
    sheetNames = Array("AA", "BB", "CC") 

    For Count = 0 To UBound(Snames) 
     With Sheets(sheetNames(Count)) 
      Range(.Range("A3"), .Range("C3").End(xlDown)).ClearContents 
     End With 
    Next 

    Sheets("MENU").Select 
    Optimise (False) 
End Sub 

此外,最好使用ThisWorkbook.Sheets()而不僅僅是Sheets()如果你的代碼是指與您正在編寫VBA的工作簿相同。如果您不這樣做,那麼VBA將假定您在運行代碼時所指的工作簿處於活動狀態 - 這通常不是好事。

更新 我已經改變了代碼刪除我認爲你可能要刪除嗎?

+0

恐怕宏刪除在每片而不是刪除整個表只左下細胞[遵循TOT的圖像的鏈接(https://s29.postimg.org/anfea8nmf/image.png) – Martin

+1

@馬丁目前還不清楚你想要刪除什麼:最後一行?所有的行?從最後一行開始的單元格「A到C」?一旦你澄清它,CallumDA可以相應地編輯答案。 –

+0

對不起,如果它在開始時不清楚。我想通過選擇A3:C3來刪除所有內容,然後在按住Ctrl + Shift的同時按下箭頭。我想要使​​用這種方法,因爲我將有不同數量的包含數據的行。有一次,它可能是A3:C15下次A3:C36,我想刪除,但範圍始終始於A3。 – Martin

0

用途:

Snames = Split("AA", "BB", "CC") 
+0

我按照您的建議做了它,現在它突出顯示第2行。您的建議的路線。 – Martin