こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

投稿日時 - 2010-08-24 13:18:25

QNo.6131947

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

変数やコントロールに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キーを押すと、
 空文字入力ができてしまいます。

投稿日時 - 2010-08-24 23:23:00

あなたにオススメの質問