【问题标题】:VBA Date + For logicVBA日期+逻辑
【发布时间】:2018-12-05 14:20:07
【问题描述】:

有人可以帮助我吗?似乎我的 for 逻辑根本不起作用,因为它一直在上午 12:00 返回我的开始时间 这是我的代码

Sub forlogic()
    Dim i As Single
    Dim totalrow As Double
    Dim startdate As Date
    Dim mydate As Date

    totalrow = Sheet1.Range("A1", Sheet1.Range("A1").End(xlDown)).Rows.Count
    mydate = Date

    Debug.Print mydate

    mydate = mydate - 90

    Debug.Print mydate

    For i = 1 To i = rowtotal Step 2
        startdate = Format(Range("E" & i).Value, "short date")
        startdate = Format(Date, "mm/dd/yyyy")

        If mydate > startdate Then
            Range("M" & i).Value = "Expired"
        End If

        i = i + 1
    Next i
    Debug.Print startdate
End Sub

它不断地返回我

12:00:00 AM 开始日期

【问题讨论】:

    标签: excel vba date for-loop format


    【解决方案1】:

    以下代码经过测试并按预期工作。更新列表:

    1) 要参考工作表,Thisworkbook.Sheets("Sheet1") 我将其调暗为ws
    2) 更新totalrow计算
    3) 由于您只对IF 语句的一个结果执行操作,因此您可以压缩为 1 行。
    4) 添加Option Explicit 以捕获错误,例如将totalrowrowtotal 交换(这会捕获您的工作表引用错误)
    5) 调整了i的增量(这个默认为1,不用写Step 1

    这已经过测试并且在我这边工作正常。

    Option Explicit
    
    Sub forlogic()
    Dim totalrow As Long, i As Long
    Dim startdate As Date, mydate As Date
    Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
    
    totalrow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
    mydate = Date - 90
    
    For i = 1 To totalrow
        startdate = Format(ws.Range("E" & i).Value2, "mm/dd/yyyy")
        If mydate > startdate Then ws.Range("M" & i).Value = "Expired"
    Next i
    
    End Sub
    

    【讨论】:

    • @JéssicaSartori - 如果这样做成功并解决了您的问题,请单击帖子左侧的复选标记将其标记为答案。这也将从未回答队列中删除问题。谢谢!
    • 我的错误是在 For 条件上,我正在执行“For i = 1 To i = rowtotal”,它应该是:“For i = 1 To rowtotal”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 2020-05-22
    • 1970-01-01
    • 2019-04-24
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    相关资源
    最近更新 更多