プロが教えるわが家の防犯対策術!

ACCESS VBAの独学を始めました。テキストどうりにコードを入力しているのですが、以下のエラーがでていまいます。

プロシージャの宣言がイベントまたはプロシージャの定義と一致していません


入力内容は以下のとおりです

Private Sub 閉じる_Click(cancel As Integer)
Dim sts As Integer
sts = MsgBox("終了しますか?", vbYesNo)
If (sts = vbNo) Then
cancel = True
Else
DoCmd.Close
End If
End Sub

(cancel as ・・・)を消去すると、エラーはでません。
なぜなのか分からず質問しました。

すみませんが、よろしくお願いいたします。

A 回答 (3件)

ボタンのクリックイベントにcancelパラメータは、ありません。


コードの内容からすると"Form_Unload"イベントに記載すべきと思われます。
以下の様にすればフォームを閉じる際に確認のメッセージが表示されます。

恐らくDoCmd.Closeは、必要ないはずです。

Private Sub 閉じる_Click()
DoCmd.Close
end sub

Private Sub Form_Unload(Cancel As Integer)
Dim sts As Integer
sts = MsgBox("終了しますか?", vbYesNo)
If (sts = vbNo) Then
cancel = True
End If
End Sub
    • good
    • 1
この回答へのお礼

丁寧な解説をいただき、ありがとうございました。
テキストの誤植でしょうか。
サイトで検索しても、上のように書いてあるところがあったりしたので
混乱してしまいました。

ありがとうございました。

お礼日時:2011/07/06 22:30

コントロールのイベントのプロシージュアーの引数(の名前・数とデータタイプ)は決ってますよ。


勝手にcancel As Integer  などしてはいけない。
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub0 …

フォームを閉じられた時のイベント(閉じるボタン)
など参照。
閉じるとCaptionで表示されたコマンドボタンではなく、フォームの閉じるボタン(X)との違いを考えること。
ーー
http://www.accessclub.jp/bbs5/0007/vba1720.html
参照
ーー
エクセルでは
http://www.ken3.org/vba/backno/vba061.html
ユーザーフォームに(閉じるを担わせた)ボタンがある場合
Private Sub btnCLOSE_Click()
Unload Me '自分自身を閉じます
End Sub
    • good
    • 1

>cancel As Integer



ここでcancelをInteger、つまり整数型と定義しています。

なのにIf文中で cancel = True と宣言しています。
ture、falseはブール(Bool)型変数なので、これを使う場合はcancel as Boolと定義する必要があります。
    • good
    • 0
この回答へのお礼

解説いただきありがとうございました

お礼日時:2011/07/06 22:31

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A