【问题标题】:Isnumber is giving error as Object defined error in Excel VBAIsnumber 在 Excel VBA 中给出错误作为对象定义的错误
【发布时间】:2018-08-21 01:24:01
【问题描述】:

当我尝试在 vba 中使用该公式时,我在一列中有两种不同的日期格式,它给出了应用程序定义的对象错误..

例如:日期格式

9/5/2018 17:51 ==> 2018 年 5 月 9 日

17/07/2018 15:45:20 ==> 这是 2018 年 7 月 17 日

公式:

=IF(ISNUMBER(DAY(N2)),DAY(N2),MID(N2,FIND("/",N2,1)+1,FIND("/20",N2,1)-4))&"/"&IF(ISNUMBER(MONTH(N2)),MONTH(N2),MID(N2,1,FIND("/",N2,1)-1))&"/"&IF(ISNUMBER(N2),YEAR(N2),MID(N2,FIND("/20",N2,1)+1,4))


Sub test()
Dim LastRow As Long
LastRow = ActiveSheet.Range("D" & Rows.Count).End(xlUp).Row
For i = 2 To LastRow

           ActiveSheet.Range(i, 2).Formula = " If(ISNUMBER (DAY(Range(""D"" & i))),DAY(Range(""D"" & i)),MID(Range(""D"" & i),FIND(""/"",Range(""D"" & i),1)+1,FIND(""/20"",Range(""D"" & i),1)-4))&""/""&IF(ISNUMBER(MONTH(Range(""D"" & i))),MONTH(Range(""D"" & i)),MID(Range(""D"" & i),1,FIND(""/"",Range(""D"" & i),1)-1))&""/""&IF(ISNUMBER(Range(""D"" & i)),YEAR(Range(""D"" & i)),MID(Range(""D"" & i),FIND(""/20"",Range(""D"" & i),1)+1,4))"
Next i
End Sub

【问题讨论】:

  • 既然用的是日期,为什么不用IsDate
  • 你能帮我纠正上面的 vba .. 我试过 isnumber @GMalc
  • 已经很晚了,我明天会回来,但是请通读这些 SO 问题/答案,它们可能会帮助您更好地理解。 IsNumber vs IsDateIsDate
  • 你想做什么?如果您使用 VBA,则无需使用公式

标签: vba excel


【解决方案1】:
  1. 从公式中删除Range(......DAY(Range(""D"" & i))...
  2. 另外,您缺少= 符号..."=If(ISNUMBER (DAY...

其他人已经给了你一些建议。让我解释一下为什么您会收到 Application - defined object 错误。

你的公式

=IF(ISNUMBER(DAY(N2)),DAY(N2),MID(N2,FIND("/",N2,1)+1,FIND("/20",N2,1)-4))&"/"&IF(ISNUMBER(MONTH(N2)),MONTH(N2),MID(N2,1,FIND("/",N2,1)-1))&"/"&IF(ISNUMBER(N2),YEAR(N2),MID(N2,FIND("/20",N2,1)+1,4))

可以写成(在VBA中)

"=IF(ISNUMBER(DAY(N" & "2" & _
")),DAY(N" & "2" & _
"),MID(N" & "2" & _
",FIND(""/"",N" & "2" & _
",1)+1,FIND(""/20"",N" & "2" & _
",1)-4))&""/""&IF(ISNUMBER(MONTH(N" & "2" & _
")),MONTH(N" & "2" & _
"),MID(N" & "2" & _
",1,FIND(""/"",N" & "2" & _
",1)-1))&""/""&IF(ISNUMBER(N" & "2" & _
"),YEAR(N" & "2" & _
"),MID(N" & "2" & _
",FIND(""/20"",N" & "2" & _
",1)+1,4))

可以进一步适应

"=IF(ISNUMBER(DAY(N" & i & _
")),DAY(N" & i & _
"),MID(N" & i & _
",FIND(""/"",N" & i & _
",1)+1,FIND(""/20"",N" & i & _
",1)-4))&""/""&IF(ISNUMBER(MONTH(N" & i & _
")),MONTH(N" & i & _
"),MID(N" & i & _
",1,FIND(""/"",N" & i & _
",1)-1))&""/""&IF(ISNUMBER(N" & i & _
"),YEAR(N" & i & _
"),MID(N" & i & _
",FIND(""/20"",N" & i & _
",1)+1,4))

所以你看我们在公式中不需要Range()。现在你可以在循环中使用它了。

话虽如此,不需要使用循环。您可以一次性输入一个范围内的公式。看这个例子

Sub test()
    Dim LastRow As Long
    Dim ws As Worksheet
    Dim sFormula As String

    '~~> Change this to the relevant sheet
    '~~> Stop using `Activesheet`. Active sheet
    '~~> may not be the sheet you think is active
    Set ws = Sheet1

    sFormula = "=IF(ISNUMBER(DAY(N2)),DAY(N2),MID(N2,FIND(""/"",N2,1)" & _
               "+1,FIND(""/20"",N2,1)-4))&""/""&IF(ISNUMBER(MONTH(N2))," & _
               "MONTH(N2),MID(N2,1,FIND(""/"",N2,1)-1))&""/""&IF(" & _
               "ISNUMBER(N2),YEAR(N2),MID(N2,FIND(""/20"",N2,1)+1,4))"
    With ws
        LastRow = .Range("D" & .Rows.Count).End(xlUp).Row

        .Range("B2:B" & LastRow).Formula = sFormula
    End With
End Sub

【讨论】:

  • 非常感谢它按预期工作@Siddharth Rout
猜你喜欢
  • 1970-01-01
  • 2017-03-18
  • 1970-01-01
  • 1970-01-01
  • 2019-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多