Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA ClearContents错误_Vba_Excel_Macros - Fatal编程技术网

Excel VBA ClearContents错误

Excel VBA ClearContents错误,vba,excel,macros,Vba,Excel,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

我试图运行宏,该宏应该清除工作表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
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
我在另一个论坛上发布了一个稍微不同的方法。哪一个运行效率更高,我的意思是哪一个对处理的压力更小

    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 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 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
末端接头

使用:

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

试试这个。我正确地声明了变量,并使用
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的同一工作簿,则最好使用
thiswoolk.Sheets()
,而不仅仅是
Sheets()
。如果您不这样做,那么VBA将假定您在运行代码时引用的是处于活动状态的工作簿中的工作表-这通常不是一件好事

更新
我更改了代码以删除我认为您可能需要删除的内容?

我按照您的建议执行了操作,现在突出显示了第2行。你的建议行。你希望
AA
BB
CC
是什么?床单名称?这些并没有声明,所以VBA假设它们是某种变量,我想…我担心宏只删除每张工作表中左下角的一个单元格,而不是删除整个表格@Martin不清楚您到底要删除什么:最后一行?所有的行?最后一行的单元格
A到C
?一旦你澄清了它,我可以相应地编辑答案。如果一开始不清楚,我很抱歉。我想通过选择A3:C3,然后在按住Ctrl+Shift的同时按下向下箭头来删除所有内容。我想使用这个方法,因为我将有不同数量的包含数据的行。前一次可能是A3:C15,下一次我想删除A3:C36,但范围将始终从A3开始。感谢澄清,我根据更新代码我已更新了原始帖子,请检查并告诉我哪一个将使用较少的计算机资源处理。