#691 ボタンのピクチャをコピー&ペーストするプログラム例 フォーム、VBA

Accessのフォームのデザインビューには「書式のコピー/貼り付け」という便利な機能があり、この機能を利用することで、あるひとつのコントロールの書式を他の複数のコントロールへ次々とコピー&ペーストしていくことができます。

操作としては、元となるコントロールを選択状態にして、リボンの[ホーム]タブや[書式]タブにある[書式のコピー/貼り付け]ボタンを”ダブルクリック”(※注)して、あとは書式をペーストしたいコントロールを次々とクリックしていくだけです。




※注:ワンクリックだけだと1ケのコントロールにしか貼り付けできません。他のコントロールを1回クリックすると[書式のコピー/貼り付け]の機能が解除されてしまいます。複数に連続して貼り付けたいときはダブルクリックするのがポイントです。


一方、「書式のコピー/貼り付け」では、プロパティシートの[書式]タブにあるすべてのプロパティがコピーされるわけではありません。そこで、ここではその対象外となっているコマンドボタンの「ピクチャ」プロパティを例に、『あるひとつのコントロールのピクチャをコピーし、それを他の複数のコントロールへ貼り付ける』という処理をプログラムで作ってみます。
なおここでは、他のコントロールへひとつずつ貼り付けていくのではなく、「選択状態になっている複数のコントロールへまとめて貼り付ける」動作とします。


まず、標準モジュールに次のようなプロシージャを用意します。

Public Sub PropCopyPaste(intAction As Integer)

  Static svarPropValue As Variant
  Dim ctl As Control

  If intAction = 1 Then
    svarPropValue = Screen.ActiveControl.Properties("PictureData")

  ElseIf intAction = 2 Then
    For Each ctl In Screen.ActiveForm.Controls
      With ctl
        If .InSelection Then
          ctl.Properties("PictureData") = svarPropValue
        End If
      End With
    Next ctl

  End If

End Sub


このプロシージャは、次のようにして使います。

  1. まず、フォームのデザインビューにおいて”コピー元”となるコントロールをひとつ選択します。


  2. VBEのイミディエイトウィンドウで「PropCopyPaste 1」と入力してEnterキーを押し、選択されたコントロールの「PictureData」プロパティの値を変数svarPropValueに保存します。

    ※プロパティシートでは「ピクチャ」という名前ですが、VBAで使う場合、「Picture」だと『(イメージ)』といった文字列のプロパティ値が取得されるだけです。ここでは実際のイメージデータをコピー&ペーストしたいので、「PictureData」というプロパティの値を取得します。
    ※通常のDimで宣言された変数はそのプロシージャを抜けると初期化されてしまいます。ここではsvarPropValueを「Static変数」で宣言することによって、プロシージャを抜けても値が保持され、次回このプロシージャが呼び出されたときにも前回の代入値を使うことができます。

  3. デザインビューに戻って、今度は”貼り付け先”となる複数のコントロールを選択します。


  4. イミディエイトウィンドウで「PropCopyPaste 2」と入力してEnterキーを押します。それによって、Static変数に保持されている「PictureData」プロパティの値が現在選択されている各コントロールの同プロパティにセットされます。

    ※ここでは、「For Each 〜 Next」の構文を使って現在アクティブなフォームの”すべてのコントロール”をひとつずつ取得しています。そしてそれぞれについてデザインビュー上で選択されているかどうかを「InSelection」プロパティで調べ、それがTrueつまり選択されていたら「PictureData」プロパティに値を代入しています。

    実行結果:
| Index | Prev | Next |

この情報は参考になりましたか?、問題は解決しましたか?、もしまだなら......
T'sWareのワンポイトテクニカルアドバイスをご利用ください。3000円/件〜でご支援します。
スタンドアロンからSQL Server対応まで、オーダーメイドのシステムを短納期・安価でお届けします


Copyright © T'sWare All rights reserved