2017-02-15 2 views
0

私はAccess VBAのレコードセットをループし、変数の値をVBAの文字列として抽出します。それは私にNULL値についてのMsgBoxとエラーになりますVBAにアクセスする:VBA文字列のSQL文字

Sub test() 
Dim rs As DAO.Recordset 
Dim m As String 

Set rs = CurrentDb.openrecordset("myTable") 

If Not (rs.EOF And rs.bof) Then 
rs.movefirst 

Do Until rs.EOF 
debug.print rs!myField 'works 
MsgBox rs!myField 'doesn't work 

rs.movenext 
Loop 

End If 

rs.Close 

End Sub 

が、それはのDebug.Printのために正常に動作します:これは動作しません。私はrs!myFieldをVBA文字列変数に抽出することはできません。テーブルの文字変数にはnull値が含まれていますが、まだそれを使用できるはずです。

+0

のようなもの試してみてくださいあなたは、単にMsgBoxにNZ( "nullの場合、値" RS myFieldでは、!)行うことができます。 'myStr = rs.Fields( "のMyField")はその後、あなたのメッセージボックスでmyStrそれを使用する[値] 。 –

+0

'myStr'に値を代入すると同じエラーが発生しますが、' debug.print'はコードFWIWで動作します。 – Carl

答えて

1

私は問題があると思います。 NullvbNullStringと同じではありません。詳細については、hereを参照してください。それはJavaですが、その考え方は成り立ちます。

あなたはこのようなif文でNull発生を処理する必要があります:あなたがNULL可能フィールドを持っており、VBAでテキストとしてそれらを扱いたい場合は、あなたがvbNullStringを追加することによって、それらを「合体」することができます

Sub test() 
    Dim rs As DAO.Recordset: Set rs = CurrentDb.OpenRecordset("myTable") 
    Dim MyStr As String 
    If Not (rs.EOF And rs.BOF) Then rs.MoveFirst 

    Do Until rs.EOF 
     If IsNull(rs!MyField) Then 
      MyStr = vbNullString 
     Else 
      MyStr = rs!MyField 
     End If 
     MsgBox (MyStr) 
     rs.MoveNext 
    Loop 

    rs.Close 
End Sub 
2

:それがMsgBoxに渡されたラップの前に

MsgBox rs!myField & vbNullString 

連結はStringに式の値を変更します。

0

関連する問題