将小数传递给vba的问题

时间:2016-08-31 10:35:47

标签: vba ms-access access-vba ms-access-2010

我在访问字段(使用DAO记录集)中将十进制数传递给vba变量时遇到了一些麻烦。我尝试在access和vba(单/货币)中更改数据类型,但同一行在调试器中不断突出显示,运行时错误94"无效使用null"。 令我困惑的是,当我将光标放在调试器中的变量上时; quickinfo显示变量保持正确的值,但记录集字段为空。这仅适用于Decimal字段,其他字段(字符串/整数)不会突出显示。

调试器中突出显示的行是&!39; Start Loop块中的rs!Field4。奇怪的是rs.Field3设置了numField3变量。两者之间的唯一区别是字段3包含整数,字段4包含小数。两者都是msAccess号码,但我在解决问题时已更改为货币。 任何反馈都会很好 感谢

    Private Sub Command1_Click()

    'Set Database and Recordset variables
    Dim thisDB As DAO.Database
    Dim rs As DAO.Recordset
    Set thisDB = CurrentDb
    Set rs = thisDB.OpenRecordset("tblTable1")

    'Declare and set recordset variables variables
    Dim strField1 As String
    Dim strField2 As String
    Dim numField3 As Currency
    Dim numField4 As Currency
    Dim dtField5 As Date
    Dim dtField6 As Date

    'Declare dynamic variables
    Dim dtVar1 As Date 
    Dim intVar2 As Integer 
    Dim dtVar3 As Date 

    'DecalreSQL Variables
    Dim num1 As Currency
    Dim num2 As Currency
    Dim num3 As Currency

    Dim StrSQL As String
    Dim strValues As String

    'Start Loop
    Do While Not rs.EOF
        strField1 = rs!Field1
        strField2 = rs!Field2
        numField3 = rs!Field3
        numField4 = rs!Field4
        dtField5 = rs!Field5
        dtField6 = rs!Field6

    If strField1 = "This" And strField2 = "That" Then
    'Perform calculations
        dtVar1 = 0
        dtVar3 = 0
         num3 = 0

    Do While dtVar3 < dtField6

        If ’Something’ Then
        This calculation sets variables            
        ElseIf ‘SomethingElse’ Then
        This calculation sets variables            
        Else
        This calculation sets variables
        End If


        'Build SQL Query and apprend to table
        strValues = dtVar1& "," & num1 & "," &num2 & "," & num3
        StrSQL = "INSERT INTO tblTable2 (Field1, Field2, Field3, Field4 );"
        StrSQL = StrSQL & "VALUES ('" & strValues & "')"

        DoCmd.SetWarnings False
        DoCmd.RunSQL StrSQL
        DoCmd.SetWarnings True

        dtVar3 = dtVar1
    Loop

    End If
    rs.MoveNext
    Loop
    rs.Close
    End Sub

1 个答案:

答案 0 :(得分:0)

当您将光标悬停在变量上时,它尚未分配。您实际上是显示分配给numField4变量的最后一条记录的值。

这意味着您当前的记录集字段Field4实际上是空的。要将它分配给数字变量,您需要捕获该条件。

numField4 = Nz(rs!Field4, 0)

你应该重复Field3以涵盖这种可能性