• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:publicプロシージャの記述方法で教えてください。)

publicプロシージャの記述方法で教えてください。

このQ&Aのポイント
  • 非連結テキストボックスのクリアを複数のフォームで行いたい為、標準モジュールに下記のコードを作成し、各フォームの削除ボタンを押しCallで呼び出すと [Meキーワードが不正] とエラーが出てしまいます。
  • 公開プロシージャの記述方法について教えてください。
  • 公開プロシージャを使用して非連結テキストボックスを複数のフォームでクリアする方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • sykt1217
  • ベストアンサー率34% (277/798)
回答No.2

Object型なので、 For Each txtclear In objForm.Control を For Each txtclear In objForm.Controls 'Control"s"に変更 にしてやれば大丈夫です。(たぶん・・) また未検証ですが・・・^^;

KOUSUKE0409
質問者

お礼

ありがとうございます。 バッチリです! 早急かつ丁重なアドバイスありがとうございました、 まだまだ解らない事だらけなので、御力添えよろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • sykt1217
  • ベストアンサー率34% (277/798)
回答No.1

[Meキーワードが不正] というのは、フォームモジュールではなく、標準モジュールでMeキーワードを使用した際に出るエラーです。 そのプロシージャを共通的に使いたい場合は、「txtクリア」プロシージャを標準モジュールに記述、そのうえで「()」の引数部分に「どこのフォームから呼ばれたか」を追加してやる必要がでてきます。 Public Sub txtクリア(objForm As Object) 'オブジェクト名をobjForm変数に格納 Dim txtclear As Control For Each txtclear In objForm.Control '呼び出し元フォームのコントロール If txtclear.ControlType = acTextBox Then txtclear = Value = Null End If Next End Sub これでプロシージャは共通的に使えます。 加えて、クリア処理側の引数が増えたので、呼び出し側も引数を与える必要が出てきます。 フォームモジュール側でクリア処理を呼び出したい場合は Call txtクリア(Me) これで大丈夫だと思います。(動作確認等はしていません。)

KOUSUKE0409
質問者

お礼

早急な対応ありがとうございます。 早速やってみたのですが、今度は For Each txtclear In objForm.Controlの所で 「アプリケーションの定義またはオブジェクト定義」 でエラーが出てしまいます、攻略お願いいたします。 ※先ほどのコードのNull列が間違っていました、再度記述いたします。 Public Sub txtクリア(objForm As Object) Dim txtclear As Control For Each txtclear In objForm.Control If txtclear.ControlType = acTextBox Then txtclear.Value = Null End If Next End Sub 自分はド素人なのでお手数掛けますが 返答お願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • アクセス超初心者です。

    アクセス超初心者です。 下記内容のイベントプロシージャーを記述しました。 フォーム内にクリアというコマンドボタンを作成。で、クリックしたら書き込まれていたフォームの内容が消えるように作ったのですが。(ネット上で見つけたプロシージャーを参考に作成しました) 黒丸部分が黄色くなってエラーになります。 どのように修正すればいいのでしょうか? 分かる方いましたらご教示ください<m(__)m>よろしくお願い致します。 Private Sub cmd_クリア_Click() Dim CT1 As Control For Each CT1 In Me.Controls If CT1.ControlType = acTextBox Or CT1.ControlType = acComboBox Then ●CT1.Value = Null ElseIf CT1.ControlType = acCheckBox Then CT1.Value = False End If Next End Sub

  • コンボボックスの値もクリアしたい!

    コンボボックスの値もクリアしたい! 現在下記のコードでtxtBoxの値をクリアしていますが、 同フォームにあるコンボボックスの値もクリアしたいのですが解りません。 教えてください。 Public Sub txtクリア(objForm As Object) Dim txtclear As Control For Each txtclear In objForm.Controls If txtclear.ControlType = acTextBox Then txtclear.Value = Null End If Next End Sub

  • コントロールタイプを絞ってループしたい

    アクセスのフォーム上のコントロールをループする際に テキストボックスだけ絞ってループしたいのですが Sub Sample() Dim myFormName As String Dim ctl As Control myFormName = "フォーム1" For Each ctl In Forms(myFormName).Controls If ctl.ControlType = acTextBox Then End If Next ctl End Sub これだとテキストボックスの量が多くて、2秒くらいかかるのですが For Each ctl In Forms(myFormName).Controls この時点で、テキストボックスだけ絞る方法はありますか? For Each ctl In Forms(myFormName).ControlType(acTextBox) こうするとエラーになりました。 ご教授よろしくお願いします。

  • Accessのコントロールの数え方

    Access 2003のコントロールについてお教えください。 フォーム1というフォームにチェックボックスがいくつも配置されています。 チェックボックスがいくつ配置されているか知る方法はあるのでしょうか? また、いくつのチェックボックスにチェックが入っているか知る方法はあるでしょうか? ネットで検索したところ、下記のコードが約にたつような気がするのですが、どうやって活用すればよいのかがわかりません・・・・ For Each ctl In Me.Controls With ctl If .ControlType = acTextBox Then 'コントロールの種類がテキストボックスなら値をNull(空)に設定 .Value = Null End If End With Next ctl わかりでしたらお教えください。よろしくお願いします。

  • アクセスvba if文の記述方法

    検索フォームを作成しました。 入力項目は「氏名」「カナ」で入力チェックをおこなっております。 (未入力)メッセージを表示「未入力です」 (入力有)結果一覧のフォームを表示 未入力チェックは正常に処理されておりメッセージが表示されます。 項目に値を入力した場合フォームが起動しません。 if文から外した場合は正常に実行されます。 この条件の場合if文でどのように記述したらよいのでしょうか。 宜しくお願いします。 Private Sub 検索_Click() Dim mct As Control Dim flg As Boolean flg = False For Each mct In Me.Controls  If mct.ControlType = acTextBox Then   If mct.Tag = "Check" Then    If Not IsNull(mct) Then     flg = True     Exit Sub    End If   End If  End If Next mct If flg = True Then  Dim str As String  str = "[氏名] Like ""*" & Me!氏名 & "*"" And [カナ] Like ""*" & Me!カナ & "*"""  DoCmd.OpenForm "結果一覧", , , str Else  MsgBox ("未入力です") End If End Sub

  • もしフォームヘッダーにコントロールがあるのなら

    アクセスのフォームの、フォームヘッダーに検索用テキストボックスとコンボボックスがあり、 詳細エリアにレコードソース(コントロールソース)に紐付いたテキストボックスが複数あります。 フォームヘッダーのフィルタを解除するコマンドを実行して、 フォームヘッダーのテキストボックスとコンボボックスをnullにしたいのですが、 vbaで「もしフォームヘッダーなら」ってするにはどうすればいいでしょうか? フォームヘッダーのコントロール名も詳細エリアのコントロール名も 区別のないコントロール名でなのでコントロール名で条件分岐をすることは不可能です。 Private Sub フィルタを解除コマンド_Click() Dim ctl As Control For Each ctl In Me.Controls If (ctl.ControlType = acTextBox) Or (ctl.ControlType = acComboBox) Then 'ここで、もしフォームヘッダーにコントロールがあるのならってしたい Me.Controls(ctl.Name) = Null End If Next ctl Me.Form.FilterOn = False End Sub このコードに付け加えてくれませんか? Debug.Print ctl.Name でコントロール名を取得するとフォームヘッダーも詳細もどちらのコントロール名も取得されてしまいます。 On Error Resume Next 以外でお願いします。

  • テキストボックスなら空白にする

    フォームにテキストボックス2つとコンボボックス2つを設置して、 規定値に値を設定し、 Private Sub cb_テキストボックスなら空白にする_Click() Dim ctl As Control For Each ctl In Me.Controls If ctl.ControlType = acTextBox Then ctl.Value = Empty End If Next ctl End Sub としたのですが何も起こりません。 空白にするにはどうすればいいでしょうか? あと、 ctl.Valueと打つ時に、 ドットの後に、Valueが一覧に出てきませんでした。 それが原因で空白にならないのでしょうか? ご回答よろしくお願いします。

  • アクセス初心者です。プログラムの書き方について。

    アクセス初心者です。 Private Sub cmd_キャンセル_Click() Dim CT1 As Control For Each CT1 In Me.Controls If CT1.ControlType = acTextBox Or CT1.ControlType = acComboBox Then CT1.Value = Null ElseIf CT1.ControlType = acCheckBox Then CT1.Value = False End If Next Dim strmsg As String If MsgBox("基本情報登録画面を閉じますか?", vbOKCancel) = vbOK Then DoCmd.Close 'フォームを閉じる DoCmd.OpenForm "Mainmenu" Else 'OK以外の場合 Exit Sub 'そのままプロシージャーから抜け出す Me.コード.SetFocus End If End Sub キャンセルのコマンドボタンを作成しました。キャンセルを押すと、入力していた情報がクリアされ、「基本情報登録画面を閉じますか」と言うメッセージボックスがでてきて、OKかキャンセルの選択をします。OKの場合は基本情報登録画面が閉じて、MainMenuが開きます。キャンセルのときは、基本情報登録画面のままで、コードのところにカーソルが着ててほしいのです。上記プログラムではキャンセルからの動きができません。基本情報登録画面のままというのはできているのですが、カーソル指定ができません。どの書き方がまずいのでしょうか?わかる方がいましたらご教示ください。よろしくお願い致します。

  • アクセス 処理の分岐について。

    Private Sub コマンド42_Click() Dim CT1 As Control For Each CT1 In Me.Controls If CT1.ControlType = acTextBox Or CT1.ControlType = acComboBox Then CT1.Value = Null ElseIf CT1.ControlType = acCheckBox Then CT1.Value = False End If Next Dim strmsg As String strmsg = "基本情報登録画面を閉じますか?" If MsgBox(strmsg, vbOKCancel + vbCritical) = vbOK Then DoCmd.Close End If DoCmd.OpenForm "Mainmenu" End Sub というプログラムを書きました。これだと、OKコマンドをクリックすると基本情報登録画面が閉じて、MainMenuが開きます。cancelコマンドをクリックすると、基本情報登録画面がそのままで、MainMenuが開きます。キャンセルのときは、基本情報登録画面をそのままにして、アクションは何もおきなくていいのですが、何を変えればいいのでしょうか? call再表示でFunction 再表示()で書き込んでみたのですが、エラーが出ます。多分、簡単なことなのでしょうけど、うまくいきません。どなたかわかる方がいましたらご教示ください。よろしくお願い致します。

  • For Each  すべてループされない?アクセス

    For Each ctl In Forms(FormName).Controls Debug.Print ctl.Name If ctl.ControlType = acTextBox Then If ctl.Name Like "削除*" Then DeleteControl FormName, ctl.Name End If End If Next ctl こういうループの仕方は、完全型ではないのでしょうか? フォーム上に「削除」で始まるテキストボックスをすべて削除したいのですが 例えば4個あれば、2個のコントロールしか削除されません。 コントロールを削除することにより、インデックスが狂うのでしょうか?

このQ&Aのポイント
  • フルパッケージダウンロード 【推奨】をダウンロード、インストールしてもBrother iPrint&Scanがインストールできず、エラーが発生しています。
  • 個別でBrother iPrint&Scanをダウンロード、インストールしても同様のエラーが発生し、アンインストールして再起動しても解決しません。
  • DCP-J926Nを使用しているWindows10の環境で、無線LANで接続していますが、正常に動作しません。
回答を見る