2016-12-13 4 views
1

시트 AA, BB 및 CC에서 내용을 지워야하는 매크로를 실행하고 시트 MENU로 이동하지만 라인 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()은 당신의 코드를 참조하는 경우 ThisWorkbook.Sheets()보다는 Sheets()를 사용하는 것이 좋습니다,

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 

또한 더 유연했습니다 동일한 통합 문서에 VBA를 작성하고 있습니다. 이렇게하지 않으면 VBA는 코드를 실행할 때 활성화 된 통합 문서에서 시트를 참조한다고 가정합니다. 일반적으로 좋은 것은 아닙니다.

업데이트 나는 당신이 삭제 할 수 있습니다 생각 무엇을 삭제하는 코드를 변경했습니다?

+0

전체 테이블을 삭제하는 대신 모든 시트의 왼쪽 하단 셀만 삭제하는 것이 두려운 것 같습니다. [이미지의 링크 따라 가기] (https://s29.postimg.org/anfea8nmf/image.png) – Martin

+1

@Martin 정확히 무엇을 지우고 싶은지 명확하지 않습니다. 마지막 줄? 모든 행? 마지막 행의 셀 A ~ C? 일단 CallumDA가 명확하게 대답을 편집 할 수 있습니다. –

+0

처음에 명확하지 않은 경우 죄송합니다. A3 : C3을 선택한 다음 Ctrl + Shift를 누른 상태에서 아래쪽 화살표를 눌러 모든 내용을 삭제하고 싶습니다. 데이터가 들어있는 행의 양이 달라 지므로이 메서드를 사용하고 싶습니다. 한번은 A3 : C15 다음 번에 A3 : C36을 삭제하고 싶지만 범위는 항상 A3에서 시작합니다. – Martin

0

사용 :

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

당신이 제안한 것처럼 그것을했습니다. 그리고 이제 2 행을 강조합니다. 당신의 제안의 라인. – Martin