• 締切済み

VBAでの不明な点

いつもお世話になっております。当方まだVBAを始めて3日ほどの新参者です。 以下のようにVBAにコードを書いたのですがどうしてもYESNO型になりません。 OKボタンしか表示しないのでぜひご指導頂けたらと思います。 バージョン:アクセス2010 Private Sub コマンド12_Click() Dim Rei As String Rei = MsgBox("【" & Format([Forms]![frm1200:合計金額]![合計金額], "#,###" & "円" & "】" & Chr(13) & Chr(13) & "金額は正しいですか?", vbYesNo)) If Rei = vbYes Then MsgBox ("OK") End If よろしくお願いします。まだ新参者なので他にご質問があればいくらでも補足しますので教えて下さい。 End Sub

みんなの回答

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.4

あー・・惜しいですねぇ。 括弧()の位置の問題ですね。 ご自身で書いたコードを先頭から眺めてみましょう。   Format(略,"#,###") ←この括弧(トジ)が末尾に行っちゃってますね。 なので、「最後までFormatの引数」として扱われちゃってます。 伴って、「メッセージボックスの型は省略された」と見られちゃったようですね。 余談ですが、この「型」を省略すると「vbOKOnly」を指定したと見られ、 > OKボタンしか表示しない 状態にされてしまいます。併せて覚えておくと良いかもです。 ですので、正しい位置に括弧(トジ)を持って行ってやれば解決です。 つまり   Rei = MsgBox("【" & Format([Forms]![frm1200:合計金額]![合計金額], "#,##0") & "円】" & Chr(13) & Chr(13) & "金額は正しいですか?", vbYesNo) ちょっとだけ(私の好みに)てを加えていますが、こんな感じですね。 以下、余計なお世話かもしれませんが・・・ 見た感じ、フォームの名前に「:(半角)」を使っていらっしゃいますか? 個人的にコレはあまりオススメしません。 今はまだあまり実感もないかもしれませんが、後々不具合を誘発する可能性があります。 http://support.microsoft.com/kb/826763/ja 少々古い情報ですが、こちらも併せて参考までにどうぞ。

回答No.3

Option Compare Database Public Function Verify(ByVal Msg As String, _     Optional ByVal DefaultButton As Integer = vbDefaultButton1) As Integer   Verify = MsgBox(Msg, vbYesNo + vbQuestion + DefaultButton, "確認") End Function Public Sub Message(ByVal Msg As String)   MsgBox Msg, vbInformation, "お知らせ" End Sub Public Sub Warning(ByVal Msg As String)   MsgBox Msg, vbExclamation, "警告" End Sub Public Sub ErrorMsg(ByVal Msg As String) MsgBox Msg, vbCritical, "エラー発生のお知らせ" End Sub これらは、MsgBox()の活用例です。 ・確認したい時 ・単にメッセージを表示したい時 ・警告を発したい時 ・エラーを告知したい時 に、vbYesNo、vbInformation、vbExclamation、vbCriticalを使い分けるのは至難。 そういう煩わしさは Verify()、Message()等を用意すると解消されます。 その場合、コードは次のように簡略化されます。 Private Sub コマンド12_Click()   Dim Answer As Integer   Answer = Verify("金額は正しいですか?")   If Answer = vbYes Then     Message "OK"   End If End Sub

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.2

ちなみに If MsgBox("【" & Format([Forms]![frm1200:合計金額]![合計金額], "#,###") & "円" & "】" & Chr(13) & Chr(13) & "金額は正しいですか?", vbYesNo) = vbYes Then MsgBox "OK" End If のように一度に書くこともできますよ。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

括弧の位置が違います Rei = MsgBox("【" & Format([Forms]![frm1200:合計金額]![合計金額], "#,###" & "円" & "】" & Chr(13) & Chr(13) & "金額は正しいですか?", vbYesNo)) ↓ Rei = MsgBox("【" & Format([Forms]![frm1200:合計金額]![合計金額], "#,###") & "円" & "】" & Chr(13) & Chr(13) & "金額は正しいですか?", vbYesNo) にしてください。

関連するQ&A

  • Excelで,特定のシートを開いたときにメッセージボックスを表示するに

    Excelで,特定のシートを開いたときにメッセージボックスを表示するには? Excelを使用しているときに,例えばSheet3を開いたとき,メッセージボックスが開くようにしたいです。 個人的に考えているのは,そのシートの「コードの表示」で現れるVisual Basicの部分に Private Sub Worksheet_Open() YesNo = MsgBox("メッセージ。よろしいですか?", vbYesNo) If YesNo = vbYes Then End If このようなマクロを入れるといいのかと思いましたが動きません。 どこが間違っているのでしょうか?

  • メッセージボックスの使い方

    MsgBoxで困っています。よろしくお願いします。 現在、次のように書いています。 Sub消去する() タイトル = "データを消去" メッセージ = "すべてのデータを消去します。いいですか?" スタイル = vbYesNo + vbQuestion + vbDefaultButton1 + vbApplicationModal yesno = MsgBox(メッセージ, スタイル, タイトル) If yesno = vbYes Then Range("E10:E109").Select Selection.ClearContents End If End Sub ところがこれだと、何もデータがないのに削除しようとします。 そこで、 1. データがない時には「MsgBox ("個数が入っていません"), vbExclamation」を出して終了する。 2. データがある時には初めに書いているメッセージを出す。 こんな具合にしたいのです。 ご指導よろしくお願いします。

  • Vbscriptエラー

    vbでメッセージBOXを用いてプログラムを起動できるようにしたいのですがエラーが出てしまいます。「インデックスが有効範囲にありません。」 どこが間違っているのでしょうか? ーーーーーーー Dim objWShell Dim a Dim b a = MsgBox (" 「」を利用。"&Chr(13)&Chr(13)&_ "    「」?    "&Chr(13)&Chr(13)&Chr(13)&_ " ---------------------------- "&Chr(13)&_ "  お問い合わせください。" , vbYesNo,"「r」") ' MsgBox vbYes&"="&a If a = vbYes Then Set objWShell = CreateObject("WScript.Shell") b = WScript.Arguments(0) If b = 0 Then objWShell.Run "C:\Windows\System32\notepad.exe" ,vbNormalFocus,False ' End If End If ーーーーー

  • エクセル メッセージボックスにタイトルとアイコンを入れる方法を教えてください。

    こんにちは。いつも大変お世話になってます。 If (vbYes <> MsgBox("実行しますか?", vbYesNo)) Then Exit Sub End If 以上のようなVBAを書きました。YESなら実行、NOならキャンセルです。 ここまではなんとかできたのですが、このメッセージボックスにタイトルと?マークのアイコンを追加するにはどうしたら良いのでしょうか?

  • VBAで教えてください。

    データがないときはExitSubしたいのですが、何処に記述すれば良いでしょうか? Sub 削除() Dim i As Long If MsgBox("データを削除します。よろしいですか?", vbYesNo) = vbYes Then Sheets("リスト").Select i = 5 Do Until i = 200 If Cells(i, 5).Value = Sheets("マスタ登録").Range("D5") Then Cells(i, 1).EntireRow.Delete End If i = i + 1 Loop Else Exit Sub End If End Sub

  • エクセル/BeforeCloseイベントで保存できない!?

    エクセル2000です。 以下の_BeforeCloseイベントのマクロ(非常に簡略化してますが)ですが、標準モジュールに設定した Sub 終了() ActiveWorkbook.Close End Sub から終了させた場合、ActiveWorkbook.Saveの部分だけが働かないようです。 エクセル画面右上の×で終了させた場合は保存されます。 どうしてでしょうか? Private Sub Workbook_BeforeClose(Cancel As Boolean) With Sheet1 If .Range("A1") <> .Range("B1") Then ret = MsgBox("変更を保存しますか?" _ + Chr(&HD) + Chr(&HA) + "" _ + Chr(&HD) + Chr(&HA) + "新:" & .Range("A1") _ + Chr(&HD) + Chr(&HA) + "旧:" & .Range("B1"), vbYesNo + vbQuestion, " 確認") If ret = vbYes Then ActiveWorkbook.Save '←なぜ保存されないの?! MsgBox "保存しました" ThisWorkbook.Saved = True ActiveWorkbook.Close (False) End If Else ThisWorkbook.Saved = True ActiveWorkbook.Close (False) End If End With End Sub

  • VBAからIEの操作

    グーグルをIEで開いてVBA(語句)を検索して見終わったら IEを閉じる作業をしたいのですが、検索窓にVBA(語句)を 入力するところでエラーとなります。初心者ですが、なんとか 勉強したいのでよろしくお願いいたします。 Sub ie_test_Navigate() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.google.co.jp/" IE.document.all.q.Value = "VBA" IE.document.all.btnG.Click If MsgBox("IEを閉じますか?", vbYesNo, "終了確認") = vbYes Then objIE.Quit End If Set objIE = Nothing End Sub

  • 【VBA】コンパイルエラーについて

    Excelシートが5枚あり、 MsgBoxを使って、印刷したいシートの場合はOKボタンを押下し印刷します。 1枚目のシートが終わったら、2回目の MsgBoxがでて、印刷するかを判定します。 以下のような、VBAを記述したのですが、なぜかコンパイルエラーになってしまいます。 ※NEXTに対応するFORがありませんとエラー表示されます どこが誤りになるのか教えていただけると助かります。 お手数お掛けいたしますが、よろしくお願い致します。 ================================================================ Sub 必要なシートだけ印刷() Dim i As Long For i = 1 To 5 '←処理を5回繰り返す Worksheets("シフト表(" & i & ")").Select rc = MsgBox("印刷するシフト表を選択します。" & vbCrLf & "シフト表(" & i & ")""を印刷しますか?", vbYesNo + vbQuestion, "確認") 'もしyesを選択したら If rc = vbYes Then ActiveSheets.PrintOut '←印刷する Next i Exit Sub '←プロシージャから抜け出る End If End Sub ================================================================

  • セルの値を削除するVBA

    Excel2003を使い、名簿リストのようなものを作成しました。 ワンクリックで一部情報をすべて削除できるように、ボタンに対してマクロを組んだのですか、 なぜか、 実行時エラー'1004' RangeクラスのSelectメゾットが失敗しましたと表示されます。 ボタン処理のソースはこれです↓ Private Sub CommandButton1_Click() メッセージ = "本当に削除しますか" スタイル = vbYesNo タイトル = "一部削除" YESNO = MsgBox(メッセージ, スタイル, タイトル) If YESNO = vbYes Then   Sheets("リスト").Select Range("C2:E101").Select Selection.ClearContents Sheets("設定").Select ActiveWindow.SmallScroll Down:=39 Range("B57:H57").Select   完了 = "削除しました" スタイル = vbOKOnly dds = MsgBox(完了, スタイル, タイトル) Else End If End Sub これを↑どういった風に改変すればエラーがでなくなるのか?ご存じの方教えてください。 よろしくお願いします。

  • VBA 加算演算時のトラブル

    事務処理用に準備したVBA処理の数値合計チェックにて本来イコールとなるべきところ、ノットイコールと判定されてしまいます。当該部分を抜き出し、わかりやすくしたものが下記のロジックですが、ここで、test2,test4は結果がイコールとなるものの、test3の場合、ノットイコールとなってしまいます。どなたか、原因につき教えていただけませんか? Dim aaa As Double Dim bbb As Double sub test2() bbb = 16.67 + 16.67 aaa = 33.34 If bbb = aaa Then MsgBox "OK" Else MsgBox "NE" End If End Sub Sub test3() bbb = 16.67 + 16.67 + 16.67 aaa = 50.01 If bbb = aaa Then MsgBox "OK" Else MsgBox "NE" End If End Sub Sub test4() bbb = 16.67 + 16.67 + 16.67 + 16.67 aaa = 66.68 If bbb = aaa Then MsgBox "OK" Else MsgBox "NE" End If End sub

専門家に質問してみよう