gpt4 book ai didi

vba - 从新列的日期值中减去一年

转载 作者:行者123 更新时间:2023-12-04 21:55:20 25 4
gpt4 key购买 nike

我正在运行一个宏,以将日期值从单元格 J4 获取到最后一行的值,并将新值放在 L4:L 上,并从同一行的 J 列上的值中减去年份。

我拥有的这一步的代码是:

Private Sub Update_Click() 
Dim inputWS1 As Worksheet
Set inputWS1 = ThisWorkbook.Sheets("Universal")

lastRowUniversal = inputWS1.Cells(Rows.Count, "A").End(xlUp).Row

inputWS1.Range("L4:L" & lastRowUniversal).Value = Evaluate("=IF(ISNUMBER(J4:J" & lastRowUniversal & "),DATE(YEAR(J4:J" & lastRowUniversal & ")-1,MONTH(J4:J" & lastRowUniversal & "),DAY(J4:J" & lastRowUniversal & ")),J4:J" & lastRowUniversal & ")")

`

宏通过,但是 L4:L 上的值显示“1/0/1900”。所以我知道 lastrow 变量正在工作,因为它只运行到 J4 结束的最后一行。

你们能帮我纠正这个问题,如果 J4 上的值是 02/01/2017 它在 L4 上显示 02/01/2016?

谢谢!

最佳答案

Evaluate 有两种形式:

  • 应用程序(默认)- 使用 ActiveSheet 的范围:那可能不是您期望/想要的工作表。
  • 工作表(需要使用工作表对象进行限定)- 使用限定工作表的范围
  • 进行操作

    您应该使用工作表表单,否则您可能会得到意想不到的结果。

    这对我有用:
    Sub Tester()

    Const dtFORM As String = "=IF(ISNUMBER(J4:J<r>),DATE(YEAR(J4:J<r>)-1," & _
    "MONTH(J4:J<r>),DAY(J4:J<r>)),J4:J<r>)"

    Dim inputWS1 As Worksheet, lastRowUniversal

    Set inputWS1 = ThisWorkbook.Sheets("Universal")

    lastRowUniversal = inputWS1.Cells(Rows.Count, "A").End(xlUp).Row

    '### use the *worksheet* form of Evaluate ###
    inputWS1.Range("L4:L" & lastRowUniversal).Value = _
    inputWS1.Evaluate(Replace(dtFORM, "<r>", lastRowUniversal))

    End Sub

    关于vba - 从新列的日期值中减去一年,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46067499/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com