【问题标题】:VBA Excel code to Access用于访问的 VBA Excel 代码
【发布时间】:2017-07-20 18:49:09
【问题描述】:

下面有一个我为 Excel 创建的代码。我现在正在尝试将其应用于 Access。对代码进行了一些更改,应该使其与 Access 兼容,但它仍然给我一个错误。我不明白这个错误是什么以及如何处理它:

Option Compare Database
Public Function OldMaturity(term As String, invoicedate As Date, days As Long) As Date

Dim d As Date
Select Case term.Value
    Case "STD":
        OldMaturity = DateAdd("y", days.Value, invoicedate.Value)

    Case "BONM":
        d = DateAdd("y", days.Value, invoicedate.Value)
        OldMaturity = DateAdd("m", 1, DateSerial(Year(d), Month(d), 1))

    Case "EOM":
        d = DateAdd("y", days.Value, invoicedate.Value)
        OldMaturity = DateAdd("y", -1, DateAdd("m", 1, DateSerial(Year(d), Month(d), 1)))

    Case Else:
        OldMaturity = CDate("99/99/9999")
End Select
End Function

Public Function NewMaturity(invoicedate As Date) As Date
Dim val1 As Long
Dim val2 As Long

val1 = invoicedate + 120
val2 = DateAdd("m", 1, val1)
NewMaturity = DateSerial(Year(val2), Month(val2), 1)

End Function

这是显示的错误:

【问题讨论】:

  • term 是一个字符串 - 它没有 Value 属性。应该只是Select Case term
  • 我看不到图像,但我猜这部分 val1 = invoicedate + 120 存在问题,因为您将日期定义的变量添加到不起作用的整数中。如果您尝试将 120 个单位添加到日期,请使用 DateAdd 函数,就像您在下一行中所做的那样。
  • 您需要从term.Valuedays.Valueinvoicedate.Value 中取出.Value。这些现在是值类型,而不是范围。

标签: ms-access vba


【解决方案1】:

NewMaturity 函数的替代版本:

Public Function NewMaturity(ByVal invoicedate As Date) As Date
    Dim d As Date
        d = DateAdd("m", 1, DateAdd("y", 120, invoicedate))

    NewMaturity = DateSerial(Year(d), Month(d), 1)
End Function

【讨论】:

    猜你喜欢
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-13
    相关资源
    最近更新 更多