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")