繁体   English   中英

清除多个列的宏

[英]Macro to Clear multiple Columns

下面是我打开工作簿时自动运行TimeStamp宏的代码。 但是,仅在时间为上午6:45或更高版本时运行。 我的问题是,如果时间在上午6:45之前并且在运行TimeStamp宏之前,我试图使其从第2行开始清除A到D列中的单元格内容。 我尝试仅使用列A来执行此操作,调试器说最上面的问题。 我似乎无法弄清楚为什么这是一个问题。 我认为我正在打破某种语法规则,但不确定。

Private Sub Workbook_Open()
    If Time > TimeSerial(6, 45, 0) Then
    Call TimeStamp
    Else
        Sub Clear()
            Dim wb3 As Workbook
            Set wb3 = ThisWorkbook
                With wb3.Worksheets("Avnet")
                 .Range("A2:A" & .Range("A2").End(xlDown).Row).ClearContents
                End With
        End Sub
    Application.Wait "06:45:00"
    Call TimeStamp
End Sub

在我添加Sub Clear()部分之前,它起作用了……

更新:只是试图使Sub Clear()成为一个单独的模块,并使用call Clear()但这都不起作用。 这是它的样子

清除()代码

Sub Clear()
    Dim wb3 As Workbook
    Set wb3 = ThisWorkbook
    With wb3.Worksheets("Avnet")
        Range("A2:A" & .Range("A2").End(xlDown).Row).ClearContents
    End With
End Sub

调用Clear()的部分

Private Sub Workbook_Open()
    If Time > TimeSerial(20, 0, 0) Then
    Call TimeStamp
    Else
    Call Clear
    Application.Wait "19:35:00"
    Call TimeStamp
End Sub

在子对象中声明子对象是行不通的(我确定是99.9999%,但从未尝试过这样做!)

移动你的Sub Clear声明,以便它的后Workbook_Open ,然后只需调用Clear从内部Workbook_Open ,在调用同样的方式TimeStamp (您在WorkBook_open的结尾处还缺少End If'

因此,您的代码将变为:

Private Sub Workbook_Open()
    If Time > TimeSerial(6, 45, 0) Then
        Call TimeStamp
    Else
        Call Clear 
        Application.Wait "06:45:00"
        Call TimeStamp
    End If 
End Sub

Sub Clear()
    Dim wb3 As Workbook
    Set wb3 = ThisWorkbook
    With wb3.Worksheets("Avnet")
       .Range("A2:A" & .Range("A2").End(xlDown).Row).ClearContents
    End With
End Sub

顺便说一句,您的Workbook_Open代码可以简化为:

Private Sub Workbook_Open()
    If Time <= TimeSerial(6, 45, 0) Then
        Call Clear 
        Application.Wait "06:45:00"
    End If 

    Call TimeStamp
End Sub

暂无
暂无

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

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