首页 > 解决方案 > 关于如何将硬编码值转换为变量的 VBA Excel 宏问题

问题描述

我是 VBA 新手,所以感谢所有重定向。我有以下(Excel 生成)宏。还有两个问题。两者都是关于如何删除硬编码并转移到变量。

在第一个命令中,我如何等效 Ctrl End 来指定完整范围?行数每天都会变化,因此需要一种方法来每天包含所有行。

在第二个命令中,如何使用 Date 函数为 Criteria1 指定 (today-1) 和为 Criteria2 指定 (today)。

我尝试使用Date,和其他几种变体Date()"Date"但无济于事。

Excel 的特定版本是 2013。如果有更好的方法可以做到这一点,请随时告诉我如何。我怀疑还有更多更好的方法。

我正在尝试自动化通常每天手动花费 30m 的报告。这只是代码的一小部分。

干杯! ——保罗

Sub Macro7Step2()
'
' Macro7Step2 Macro
'

'
    ActiveSheet.Range("$A$1:$AT$9272").AutoFilter Field:=17, Criteria1:= _
        ">=8/23/2021", Operator:=xlAnd, Criteria2:="<=8/24/2021"
    ActiveSheet.Range("$A$1:$AT$9272").AutoFilter Field:=3, Criteria1:= _
        "In Production"
End Sub

标签: excelvbaautofilterobject-model

解决方案


CurrentRegion和过滤日期

Option Explicit

Sub Macro7Step2()
'
' Macro7Step2 Macro
'

'
    Dim ws As Worksheet: Set ws = ActiveSheet
    ' or rather something like the following instead:
    'Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Sheet1")
    If ws.AutoFilterMode Then
        ws.AutoFilterMode = False
    End If

    Dim rg As Range: Set rg = ws.Range("A1").CurrentRegion
    
    rg.AutoFilter Field:=17, _
        Criteria1:=">=" & Date - 1, Operator:=xlAnd, Criteria2:="<=" & Date)
    ' If the previous doesn't work (it doesn't on my end),
    ' try the following instead (note the '\'):
    'rg.AutoFilter Field:=17, _
        Criteria1:=">=" & Format(Date - 1, "mm\/dd\/yyyy"), Operator:=xlAnd, _
        Criteria2:="<=" & Format(Date, "mm\/dd\/yyyy")
        
    rg.AutoFilter Field:=3, Criteria1:="In Production"
    
End Sub

推荐阅读