プロが教える店舗&オフィスのセキュリティ対策術

アクセスのVBAに初めて挑戦していますが、なかなかうまく動いてくれません。どうか、教えてください。

有給休暇の年次更新を作っているのですが、
フォームのテキストボックス[職位](=コンボボックス選択式です) の値が”社長”なら、有休取得はゼロ、という一文がうまくゆきません。

これ↓が、その記述です。
'職位が役員(社長)なら 取得 は ゼロ
If [Forms]![フォーム基本情報]![職位].Value = "社長" Then
[Forms]![フォーム基本情報]![有休取得] = 0
End If

エラーは出ないのですが、このIFに引っ掛かってくれないのです。
フォームも含めて、どこをチェックすればいいでしょうか?

A 回答 (5件)

MsgBox [Forms]![フォーム基本情報]![職位].Value



If [Forms]![フォーム基本情報]![職位].Value = "社長" Then
[Forms]![フォーム基本情報]![有休取得] = 0
End If


新しいMDBを作り、その中で新しいフォームを作り
ボタン1つとテキストボックス2つを貼り付け、それぞれの名前を
上記のコードで使う名前にしました。


そしたら、ちゃんと動きました。
ということで、上記の文は問題ないと思われます。



該当のIF文の直前に、ブレイクポイントを設定されていて、
その値が社長や文字数が2であるのであれば、考えづらいですが

その前後のソースなどで、値の変更ってされていないですか?
もしくは、その前後のソースの提示をされるか。
    • good
    • 0
この回答へのお礼

<m(__)m>
loop_dog様 そして DexMachina様

このアホな私をお許しください。
原因がわかりました。
No.5で頂戴したアドバイスそのまんま、ここでせっかく代入した0に、
その下の文で、計算値を代入していました。

お手間取らせて、ほんとうに申し訳ございません。
わざわざ、シミュレートまでさせちゃって、ほんとにごめんなさい。

End If の前に、End Sub を書き加えましたところ、
すんなり抜けてくれました。

お二方のご親切なアドバイスに、改めて御礼申し上げます。
ほんとうにありがとうございました。

また、困ったときには宜しくお願いいたします。<m(__)m>

お礼日時:2007/07/05 11:51

NO.1です。



NO.3さんの答えを見ていない状態で
私もLEN関数を思いついたので、やはりそれが一番だと思います。

これは、よく、引っかかるうちのひとつですね。
    • good
    • 0
この回答へのお礼

アドバイス、本当にありがとうございます。
No.2さんへのお礼にも書きましたとおり、結果は「2」でした。

あれれ?
なにか、どこかが間違ってるんでしょうね。
なにかお心あたりがあれば、また教えてください。
よろしくお願いいたします。<m(__)m>

お礼日時:2007/07/05 10:19

No.2です。



> はて?なにが間違っているのでしょうか?

考えられるのは、前後のSpace、でしょうか。
とりあえず、MsgBox関数部分を

MsgBox "職位= 【" & [Forms]![フォーム基本情報]![職位].Value & "】",,"確認"

とすれば、確認できるかと思います。
(「【社長】」なら原因不明(汗)ですが、「【 社長】」や「【社長 】」と表示されれば、
 前後のSpaceが原因で等しいと判断されていない、と;
 かなり見づらいですが(汗))


或いはLen関数を使って文字数を確認した方がスマートかもしれません。
(「MsgBox "字数= " & Len([Forms]![フォーム基本情報]![職位].Value)」として、
 2よりも大きい数字が出れば、前後のどちらかに不要なSpaceがある、と)
    • good
    • 0
この回答へのお礼

重ねてのアドバイス、誠にありがとうございます。<m(__)m>
さっそく試してみました。
結果は、「2」でした。
ためしに「課長代理」で実行してみると「4」。
余計なスペースがある、ということではないような感じです。

フォームのコントロール側の設定などで、疑ってみるポイントはありますでしょうか?

お礼日時:2007/07/05 10:16

> [職位](=コンボボックス選択式です)


とのことなので、もしかしたら『職位』コンボボックスには「社長」という
テキストではなく、それに割り当てたIDか何かが入っているのでは
ないかと思います。

自分で組んだコードがうまく動かなかった場合に、私がよくやるのは、

MsgBox "職位= " & [Forms]![フォーム基本情報]![職位].Value,,"確認"
If [Forms]![フォーム基本情報]![職位].Value = "社長" Then
[Forms]![フォーム基本情報]![有休取得] = 0
End If

というように、実際の値が何になっているかを、MsgBoxで表示させる、
という方法です。
(デバッグウィンドウは使い慣れていないもので・・・)


よければお試し下さい。
    • good
    • 0
この回答へのお礼

早速のアドバイス、ありがとうございます。
早速やってみました。
小さいウインドウがでて、職位=社長と表示されました。
社長という文字列が入っているのは確かなようです。
はて?なにが間違っているのでしょうか?

お礼日時:2007/07/04 19:58

If [Forms]![フォーム基本情報]![職位].Value = "社長" Then



この行にブレイクポイントを設定します。(茶色い●)
実行し、その行で止まったら、イミディエイトウインドウに
キーボードで直に

? [Forms]![フォーム基本情報]![職位].Value

と入力し、エンターキーを押します。

そしたら、その下に、その値が出ると思います。
    • good
    • 0
この回答へのお礼

アドバイス、ありがとうございます。
この方法もやってみました。
イミディエイトウインドウの、
? [Forms]![フォーム基本情報]![職位].Value の下に
社長と表示されました。
やはり、社長という文字列が入っているのは確かなようです。
でも、どこか、おかしいんでしょうね。どこだろ?

お礼日時:2007/07/04 20:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!