アクセスVBAでフォーム上のコントロールのPictureプロパティを空にする方法

このQ&Aのポイント
  • アクセスのVBAを使用して、フォーム上の全てのコントロールのPictureプロパティを空にする方法を教えてください。
  • Pictureプロパティがないコントロールの場合はエラーになるので、それを回避する方法も教えてください。
  • Pictureプロパティの有無を確認する方法についても教えてください。
回答を見る
  • ベストアンサー

アクセスvba Pictureプロパティを空にする

フォーム上の全てのコントロールのPictureプロパティを空にする という事をしたいのですが、 Pictureプロパティがないコントロールの場合はエラーになります。 (テキストボックスなど) Sub test() Dim myCtrl As Control Dim myForm As String Dim i As Long myForm = "フォーム1" DoCmd.OpenForm myForm, acDesign For Each myCtrl In Forms(myForm).Controls myCtrl.Picture = Empty Next End Sub Pictureプロパティがあるかどうかを取得したいのですが それってどうすればいいですか? それともOn Error Resume Next でエラーを無視するしかないでしょうか?

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

No2です。     If myCtrl.Properties(i).Name = "Picture" Then       Debug.Print "YES"       Debug.Print myCtrl.Name       'myCtrl.Picture = Empty       'myCtrl.Picture = ""       Exit For     End If のように、Exit ForでForループを抜けるように すれば少し早くなるかもしれませんが、 どちらにしても最後にフォームを閉じる 作業があるのであまり変化はないかも しれません。 No1で書き忘れましたが、質問のプロパティを空にする作業は       Debug.Print "YES"       Debug.Print myCtrl.Name のところは、コメントアウトしている       'myCtrl.Picture = Empty のところです。

wceitucthj
質問者

お礼

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

その他の回答 (2)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

>それともOn Error Resume Next これが一番面倒でなくていいのでは、と思いますが。 プロパティの名前を指定してもいいかもしれませんが。 たとえば、以下のように。 Sub test() Dim myCtrl As Control Dim myForm As String Dim i As Long myForm = "フォーム1" DoCmd.OpenForm myForm, acDesign, , , , acHidden 'On Error Resume Next For Each myCtrl In Forms(myForm).Controls   For i = 0 To myCtrl.Properties.Count - 1     If myCtrl.Properties(i).Name = "Picture" Then       Debug.Print "YES"       Debug.Print myCtrl.Name       'myCtrl.Picture = Empty       'myCtrl.Picture = ""     End If   Next i Next DoCmd.Close acForm, myForm, acSaveYes End Sub 一部コメントアウトしています。 なお、IF文の中で、 Else Debug.Print "NO" End IF などとするとコントロールの数によると、とんでもない "NO"の羅列になるので省いています。

wceitucthj
質問者

お礼

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

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

こちらのやり取りが参考になると思います VBA プロパティが存在するかどうかを知る方法を教えてください http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1175669101 エクセルでの話しになっていますが、アクセスでも対応できます。

wceitucthj
質問者

お礼

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

関連するQ&A

  • イベントプロパティに指定した式 クリック時 でエラ

    以前http://okwave.jp/qa/q7848134.html で質問したものです。 2名の方ご回答ありがとうございました。 頂いたご回答を実行するとエラーになるので教えてください。 新規にフォームを作り、タブとコマンドボタンを置き、 Sub delPage() Dim myForm As String Dim frm As Form Dim i As Long myForm = "フォーム1" DoCmd.OpenForm myForm, acDesign Set frm = Forms(myForm) For i = frm!タブ0.Pages.Count - 1 To 2 Step -1 frm!タブ0.Pages.Remove (i) Next DoCmd.Close acForm, myForm, acSaveYes Set frm = Nothing End Sub を実行すると、ページが消えフォームが閉じられますが、再度フォームを開いた時に、 「イベントプロパティに指定した式 クリック時 でエラーが発生しました: Microsoft Office AccessがOLEサーバーまたはActiveXコントロールと通信指定いるときにエラーが発生しました。」が出てしまいます。 コードを消したり、タブを削除してもこのコードはずっと出るようになってしまいました。 (フォームにコマンドボタンしかなくても) なぜこのコードを実行すると、このようなエラーがでるのでしょうか? http://www.accessclub.jp/bbs2/0033/beginter10779.html をみると、 「OCX/ActiveX コントロールを貼り付けたが、不要になって外すなどして、無意味な参照設定が残ることがあります。」 となっていますが、コマンドボタンとタブとページだけで、ActiveX コントロールは貼りつけてないし、 参照設定は何もいじってません。 新規にmdbファイルを作り、同じ事をすると同じエラーメッセ―ジが出ます。 当方win7、オフィス2007です。 ご回答よろしくお願いします。

  • アクセス イメージコントロールを新規に作りヘッダー

    アクセス イメージコントロールを新規に作りヘッダーに置くには? Private Sub test() Dim ctlText As Image Dim intLeft As Integer Dim intTOP As Integer Dim intWidth As Integer Dim intHeight As Integer DoCmd.OpenForm "フォーム1", acDesign intLeft = 567 * 1 intTOP = 567 * 1 intWidth = 567 * 1 intHeight = 567 * 1 Set ctlText = CreateControl("フォーム1", acImage, acHeader, intLeft, intTOP, intWidth, intHeight) End Sub これをやってるのですがエラーになります。 実行時エラー2148 「フォームまたはレポートのセクションを参照するときの値が正しくありません。」 と言うエラー内容です。 しかし、acHeaderをacDetailに変えるとエラーにならず、 詳細セクションにイメージを設置できます。 ヘッダーに置くにはどうすればいいですか?

  • Access2007 コントロールの削除

    イベント内プログラムで以下のようにフォームのコントロールの削除を行っていますが、 コントロール名が条件に合っていても削除されません。 DeleteControlが失敗しているのではなく、 If Left(ctlSche.Name, 6) = "lblBox" Then にひっかからないようです。 しかも、同じように 頭に"lblBox"とつくラベルコントロールでも、ひっかかるものとそうでないものがあります。 以下のコーディングでは不十分でしょうか? Dim ctlSche As Control DoCmd.Close acForm, FName, acSaveYes DoCmd.OpenForm FName, acDesign, , , , acHidden Set ctlSche = CreateControl(FName, acLabel) For Each ctlSche In Forms!TestForm.Controls If Left(ctlSche.Name, 6) = "lblBox" Then 'コントロールの削除 DeleteControl FName, ctlSche.Name End If Next DoCmd.Close acForm, FName, acSaveYes DoCmd.OpenForm FName, acDesign, , , , acHidden

  • VBAでタブのページを削除するには?アクセスです

    フォームにタブコントロールを置いて、ページを6つにして、コマンドボタンを置きました。 3から6ページをVBAで削除する事は可能でしょうか? (1・2は残したいです) 「ページを削除する」というVBAコードがわかりません。 Private Sub コマンド7_Click() Dim ctl As Control For Each ctl In Forms(Me.Name).Controls If ctl.ControlType = acPage Then Debug.Print ctl.Name 'ここでページを削除したい End If Next ctl End Sub あと、もしかしてデザインビューでないと削除できないですか? であれば、DoCmd.OpenForm Me.Name, acDesign を追加しようと思っています。 ご回答よろしくお願いします。

  • コントロールを削除すると、一つ飛ぶ アクセス

    こんばんは。よろしくお願いします。 フォーム上のイメージを削除してるのですが Sub test() Dim ctl As Control Dim FormName As String FormName = "フォーム2" DoCmd.OpenForm FormName, acDesign For Each ctl In Forms(FormName).Controls If ctl.Name Like "イメージ*" Then Debug.Print ctl.Name DeleteControl FormName, ctl.Name End If Next ctl End Sub これをすると、コントロールが一つ飛ばされます。 イミディエイトウインドウで値を確認すると イメージ0 イメージ2 イメージ4 になりました。 1、3、5が飛ばされました。 実行結果は画像のような感じです。 なぜ飛ばされちゃうのでしょうか? 普段、For Each ctl In Forms(FormName).Controlsを使う分には値が飛ばされる事はないので DeleteControl FormName, ctl.Nameが原因だと思うのですが、 全ての「イメージ」で始まるコントロールを削除したい場合、どうすえばいいですか?

  • vbaでフォームを作成しつつ、指定した名前で保存す

    vbaでフォームを作成しつつ、指定した名前で保存するには? Sub フォームを作成する() Dim myBtn As TextBox Dim myForm As Form Set myForm = CreateForm myForm.DefaultView = 1 ' 帳票フォーム DoCmd.Save acForm, "F帳票" End Sub これを実行すると 実行時エラー2489 オブジェクト ’F帳票’が開いていません。 になってしまうのですが、新規でフォームを作り名前を付けて保存する方法はありますか? ご回答よろしくお願いします。

  • アクセスVBA 変数を渡したい

    フォーム1のcmd_ボタンをクリックして、フォーム2を開く際に、変数を渡したいのですが、どう渡せばいいのでしょうか? Private Sub cmd_ボタン_Click() myStr = "あああ" DoCmd.OpenForm "フォーム2" (myStr) End Sub とすると、エラーになります。 文の書き方を教えてください。

  • アクセス 開いているレポート名を取得する。

    アクセス初心者です。 VBAにて フォーム1でレポート、レコードを選択後に レポートを開くと同時に印刷フォームも開くように組んでます。 その印刷フォームで印刷をすると、印刷フォーム自体が印刷されてしまうので ”レポート名”を認識させてから印刷しています。 その時の”レポート名”を開いたときに自動的に変数として印刷フォームに引き継ぎたいのですが やり方が分かりません。 意図としては、印刷フォームを汎用的に使いたいためです。 印刷フォームの呼び出しコードは下記にて Private Sub コマンド18_Click() Dim report_name As String Dim report_value As String If Not IsNull(コンボ50.Value) = True Then report_name = コンボ48.Value  ’レポート名です report_value = コンボ50.Value DoCmd.OpenReport report_name, acViewPreview, , "[現場名]='" & report_value & "'" DoCmd.MoveSize Width:=10000, Height:=13000 Reports(report_name).ZoomControl = 75 Else MsgBox "項目を選択してください。" End End If DoCmd.OpenForm "印刷_フォーム", acNormal End Sub Private Sub コマンド53_Click() Dim new_date As String Dim form_name As String If Not IsNull(コンボ48.Value) = True Then form_name = コンボ48.Value DoCmd.OpenForm form_name, acNormal, , , acFormAdd DoCmd.MoveSize Width:=12000, Height:=13000 Else MsgBox "[取引先名]を入力してください。" End If End Sub 下記は印刷フォームにて、印刷設定をする場合のコードです Private Sub コマンド0_Click() Dim report_name As String report_name = "レポート名" On Error Resume Next DoCmd.SelectObject acReport, report_name, True DoCmd.RunCommand acCmdPrint End Sub

  • 「DoCmd.OpenForm」が実行できない(vbaでフォームを開きたい)

    「フォーム1を開く」vbaで行ないたいのですが エラーになってしまいます。 Sub test1() DoCmd.OpenForm , acNormal, フォーム1 End Sub は「変数が定義されていません」と表示され (「変数の宣言を強制する」にチェックを入れています) Sub test2() DoCmd.OpenForm , acNormal, "フォーム1" End Sub は「引数は省略できません」となります。 Sub test1() DoCmd.OpenForm , フォーム1, acNormal End Sub Sub test2() DoCmd.OpenForm , "フォーム1", acNormal End Sub これにしても同じでした。 「OpenForm」をヘルプで調べてみたところ 「expression 」と「FormName」が「 必ず指定します。」でした。 「expression 」がないからだめなのでしょうか? すいません、助けてください。 よろしくお願いします。

  • フォームを開くと同時にコントロールを削除したい

    フォームを開くと同時にコントロールを削除したいのですが、 Private Sub Form_Load() イベントで、 DoCmd.OpenForm Me.Name, acDesign DeleteControl Me.Name, "コマンド9" こうしてみたのですが、別のビューに切り替えることはできません、となります。 DoCmd.OpenForm Me.Name, acDesign これをナシにすると、 DeleteControl Me.Name, "コマンド9" この部分で コントロールの作成と削除は、デザインビューまたはレイアウトビューで行います。 となります。 どうすればいいでしょうか? アドバイスよろしくお願いします。

専門家に質問してみよう