简体   繁体   English

Excel VBA ClearContents错误

[英]Excel VBA ClearContents error

Im trying to run macro which should clear contents from sheets AA, BB and CC and then move into sheet MENU but its highliting me an error on line 4. Please see the code below. 我试图运行宏应该从表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

I got a little bit different approach posted on a different forum. 我在不同的论坛上发布了一些不同的方法。 Which would run more efficiently, I mean which one will will be putting less stress on a processing? 哪个会更有效率,我的意思是哪一个会减少对处理的压力?

    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

Update I understand this is not a code writing website but I would like to ask you if you could have a look at my code below. 更新我明白这不是代码编写网站,但我想问你是否可以查看下面的代码。

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

End Sub 结束子

Try this. 尝试这个。 I've declared your variables properly and also assigned values to your array using Array() rather than Split() both are fine, but Array() is more flexible 我已经正确地声明了你的变量并且使用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

Also, it's better to use ThisWorkbook.Sheets() rather than just Sheets() if your code refers to the same workbook you are writing your VBA in. If you don't do this then VBA will assume you are referring to the sheets in whichever workbook is active when you run the code - that's not usually a good thing. 此外,如果您的代码引用您正在编写VBA的同一工作簿,最好使用ThisWorkbook.Sheets()而不仅仅是Sheets() 。如果您不这样做,那么VBA将假设您指的是当您运行代码时,无论哪个工作簿都处于活动状态 - 这通常不是一件好事。

Update I've changed the code to delete what I think you might want deleted? 更新我已经更改了代码以删除我认为您可能想删除的内容?

采用:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM