Excel VBA ClearContents错误

我试图运行macros应该清除内容AA,BB和CC的内容,然后进入工作表的菜单,但它在我排第4行错误,请参阅下面的代码。

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 

我在不同的论坛上发布了一些不同的方法。 哪一个会更有效率运行,我的意思是哪一个会减less处理压力?

  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 

结束小组

尝试这个。 我已经正确地声明你的variables,并使用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 

此外,如果您的代码引用的是您正在编写VBA的同一工作簿,则最好使用ThisWorkbook.Sheets()而不是Sheets() 。如果您不这样做,则VBA将假定您指的是当你运行代码时,无论哪个工作簿是活动的 – 这通常不是一件好事。

更新我已经更改了代码来删除我认为您可能要删除的内容?

使用:

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