【问题标题】:VBA - Assigning Date Format to Column and Apply Date FilterVBA - 将日期格式分配给列并应用日期过滤器
【发布时间】:2018-04-11 20:07:55
【问题描述】:

我有两个宏,它们按日期过滤工作表列,然后删除不相关的列。

但是,它有很多错误,我需要一些帮助来纠正它。

这是第一个宏应该发生的事情:

1) 以日期格式 dd-mm-yyyy 从第 2 行到最后一行格式化 B 列 - 目前不会发生这种情况,并且在某些时候它会将格式应用于整个B列,包括数据后面的空单元格

2) 在 B 列(日期)上应用过滤器以显示除当天前一天以外的所有记录 - 正确了一半,因为它不包括过滤器中的当天。当我运行“删除”宏时,显示的单元格是当天和前一天,我应该只看到前一天。

Sub DateFilter()

Dim ws1 As Worksheet
Dim c As Range
Dim LastRow As Long
Dim Current_Date As Date

On Error Resume Next

Set ws1 = ActiveWorkbook.Sheets("Sheet")

LastRow = ws1.Cells(Rows.Count, 1).End(xlUp).Row

With ws1

    For Each c In ActiveSheet.Range("B2:B" & LastRow).Cells

        Current_Date = CDate(c)
        c.Value = Current_Date

    Next c

End With

x = CLng(Date)
ws1.UsedRange.AutoFilter Field:=2, Criteria1:="<" & x, Operator:=xlAnd, Criteria2:="<" & x - 1

End Sub

【问题讨论】:

  • 这看起来像是 4 个独立的问题,或者至少不止一个?我会将每个帖子保留在一个问题上。在您的第一个中,“LastRow”是根据 A 列定义的——也许这就是问题所在。为什么不只是应用一种格式?
  • @SJR 抱歉,我已更新帖子并删除了问题的第二部分。我以后会尽量不要再这样做了。 :)
  • @SJR 关于你的第二个问题,B 列中的一些字段是 mm-dd-yyyy,有些是 yyyy-mm-dd,但我希望它们都是 dd-mm-年年。
  • 好的,谢谢。请参阅@Zac 的回答,尽管根据这些信息可能需要进行一些修改。

标签: vba excel


【解决方案1】:

正如@SJR 所建议的,您在一篇文章中有太多问题,所以我只看第一个宏。要获得第二个宏的解决方案,请启动一个新线程

下面的代码应该可以满足您对第一个宏的要求,并带有一些 cmets 以帮助您理解代码

Sub DateFilter()

    Dim oWS As Worksheet: Set oWS = ThisWorkbook.Worksheets("Sheet")

    ' On Error Resume Next      VERY very bad idea as this will hide all issues in the code!

    With oWS

        ' Set the range format to specified date format. This will automatically update
        ' the values in the cells to a date.. no need to copy and paste them
        .Range("B2:B" & .Cells(.Rows.count, 2).End(xlUp).Row).NumberFormat = "dd-mm-yyyy"

        ' Set the autofilter to display all dates other than yesterdays
        .Range("B:B").AutoFilter Field:=1, Criteria1:="<" & CLng(DateAdd("d", -1, Date)), Operator:=xlOr, Criteria2:=">" & CLng(DateAdd("d", -1, Date))

    End With

End Sub

【讨论】:

  • 感谢您提供此代码和您的 cmets,非常感谢。代码正常工作,除了有一个问题,我在上面对 SJR 的回复中提到,B 列中的一些字段是 mm-dd-yyyy,有些是 yyyy-mm-dd,但我希望它们都是 dd- mm-yyyy。应用过滤器后,仍会显示 yyyy-mm-dd 格式的字段。
  • 嗯,奇怪,它对我有用。您能否在问题中提供您的工作表样本?
  • 我看到有些字段也只显示为一般数字。这也是我需要应用日期格式的原因。我会尽快上传一个示例。
  • 我不知道该说什么@Zac,我现在又试了一次,效果 100%。所以我想这已经解决了!谢谢你的帮助:)
  • 没问题,很高兴它有帮助
猜你喜欢
  • 2021-09-19
  • 2016-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-29
  • 1970-01-01
相关资源
最近更新 更多