- 締切済み
VBAで変数に格納する情報を条件分岐したい
VBAで変数に格納する情報を条件分岐したい ACCESS VBAを組んでいるのですが、 フォーム上で4つの条件のうちどれかで絞込みをかけたデータを エクスポートする際、 日付、条件をファイル名につけたいと思っています。 日付はつけられるのですが、 変数に条件を格納するIF分を書いたところ 取得できていないようです。 お知恵を拝借できますでしょうか。 いかがコードになります。 Private Sub cmd04_Click() Dim epData As String Dim epObj As String Dim myFile As String Dim mySQL As String Dim db As DAO.Database Dim myFol As String Dim myKey As String If txtPC番号 = Not Null Then myKey = txtPC番号 ElseIf com所属部所 = Not Null Then myKey = com所属部所 ElseIf txt使用者 = Not Null Then myKey = txt使用者 ElseIf txtPC名 = Not Null Then myKey = txtPC名 End If epData = CurrentProject.Path epObj = "T05_使用者一覧抽出結果" myFile = Screen.ActiveForm.Name Set db = CurrentDb() DoCmd.SetWarnings False DoCmd.OpenQuery "Q10_使用者一覧抽出結果" DoCmd.SetWarnings True mySQL = "INSERT INTO T05_使用者一覧抽出結果 select * FROM Q04_パソコン機器管理台帳 WHERE " & Me.Filter & ";" ' SQLを実行します。 db.Execute mySQL 'CSVファイルをエクスポート DoCmd.TransferText acExportDelim, , epObj, epData & "\" & Format(InDate, "yyyymmdd") & "_" & myKey & "_使用者一覧.csv", True MsgBox "エクスポートが完了しました" 'エクスポートしたフォルダを開く MsgBox "エクスポートが終了したのでフォルダを開きます" myFol = epData Shell "C:\Windows\Explorer.exe " & myFol, vbNormalFocus End Sub
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- DexMachina
- ベストアンサー率73% (1287/1744)
変数やコントロールにNullを代入する場合は「=」を使用できますが、 「Nullかどうか」を判定する場合には、「=」は使用できません。 ですので、代わりにIsNull関数を使用します。 (「=」を使用した場合、結果はTrueでもFalseでもなく、Nullと なってしまいます) 提示されたコードでは、この判定が正しく行えていないために、 変数myKeyが空文字のままとなっているものと思います。 ですので、修正すると以下の通りになります: (なお、他の部分は検証していません(汗)) 【現在】 If txtPC番号 = Not Null Then myKey = txtPC番号 ElseIf com所属部所 = Not Null Then myKey = com所属部所 ElseIf txt使用者 = Not Null Then myKey = txt使用者 ElseIf txtPC名 = Not Null Then myKey = txtPC名 End If 【修正】 If IsNull(txtPC番号) = False Then myKey = txtPC番号 ElseIf IsNull(com所属部所) = False Then myKey = com所属部所 ElseIf IsNull(txt使用者) = False Then myKey = txt使用者 ElseIf IsNull(txtPC名) = False Then myKey = txtPC名 End If なお、今回の例であれば、IsNull関数の代わりに以下のような 式を立てることもできますので参考まで(一部のみ抜粋): Is Len(txtPC番号 & "") Then myKey = txtPC番号 ElseIf Len(com所属部所 & "") = False Then ・・・ ※テキストボックスの値がNullの場合、そのままLen関数を適用 しても、戻り値はNullになります。これを避けるため、&演算子 を使用して、文字長0の空文字("")に変換しています。 ※Len関数の結果が0(=Nullか空文字)ならFalse扱い、それ 以外(=文字入力あり)ならTrue扱いになるため、「Len(~)」 の後の等式(または不等式)は省略可能になります。 ※通常、テキストボックスに空文字を入れることはないとは 思いますが、一応、「Shift+2」の同時押しを2回して「""」 (半角ダブルクォート2個)を入力後、Enterキーを押すと、 空文字入力ができてしまいます。