VBAーShapesオブジェクトを使って、Excelシート内で描画オブジェクト・名前を取得します
Excelシート上にQRコードなどを複数配置した場合などに
●一つ一つ選択してプロパティなど変更する
●一つ一つ選択して削除する
ってなった場合手間がかかっちゃいますよね!
そんな時はこの部屋の方法で事前にQRコードに固定の名前を付けておいて描画オフジェクトのタイプを使用してQRコードなどオブジェクトの名前を取得できると超~便利ですよ
また、一番したの方にコメント欄があるからよかったら質問・感想などメッセージ入れてください
QRコードを配置したサンプルExcelを準備します(例)
☆Sheet1にQRコードを配置します☆
1.メニュー-開発を開く
2.リボン内の挿入アイコンでActiveXコントロール内の選択をクリック
3.「Microsoft BarCode Control ###」を選択してOKボタンを押す
(###はバージョンによって変わる)
4.Sheet1にオブジェクトを配置
5.オブジェクトを選択して右クリックでコンテキストメニューを開く
6.メニューの「Microsoft BarCode Contorol ###」ー「プロパティ」をクリックして
プロパティダイアログを表示させる
7.スタイルのコンボボックスで「11ーQRコード」を選択してOKボタンを押す
オブジェクトがバーコードからQRコードに変わる
8.オブジェクトを選択して右クリックでコンテキストメニューを開く
9.メニューの「プロパティ」をクリックしてプロパティダイアログを表示させる
10.(オブジェクト名)を”QRコード1”に変更する
☆これで準備が整いました(^^♪☆
それでは、配置したオブジェクトの名前を取得しましょう
Excelシート内で指定した描画オブジェクトの名前を取得するプログラム
☆指定シート内で始めに見つかったオブジェクトの名前を返すサブルーチンです☆
☆サブルーチンプログラムをVBAコードの標準モジュールに追加する☆
1.プロパティ ウィンドウの表示:メニュー=表示ープロパティ ウィンドウをクリック
2.標準モジュールの追加:メニュー=挿入ー標準モジュール
※(Kappo)標準モジュールの名前が判りやすくするようにModule1ー>QrCtrlに変更する
●●サブルーチンプログラム●●
追加した標準モジュール(QrCtrl)にブログラムを記述
(注)シート内の一番始めに見つかったオブジェクトの名前を返します
サブルーチンの内容
ShapeObjName(stName As String, shpType As Integer)
引数 : stName=シート名、shpType=描画オブジェクトのタイプ(下表を参照)
戻り : 指定した描画オブジェクトで一番最初に見つかったの描画オブジェクトの名前(String)
▼プログラム▼
Public Function ShapeObjName(stName As String, shpType As Integer)
Dim shp As Shape
Dim retName As String
'シート内の描画オブジェクトをループ
For Each shp In ThisWorkbook.Worksheets(stName).Shapes
If shp.Type = shpType Then
Debug.Print(shp.Name)
retName = shp.Name
Exit For
End If
Next shp
ShapeObjName = retName
End Function
呼びだすプログラム(例)
サブルーチンプログラムが出来たので呼びだすコマンドボタンを配置してプログラムを記述する
1.メニュー-開発を開く
2.リボン内の挿入アイコンでActiveX コントロールーコマンド ボタンをクリック
3.Sheet1にオブジェクトを配置
4.「開発=デザインモード」でコマンドポタンをダブルクリックしてVBAコードを表示
5.コマンドボタンがクリックされた時に実行されるプログラム
Dim objName As String
objName = ShapeObjName(“Sheet1”, msoOLEControlObject)
Call MsgBox(“オブジェクト名=” & objName)
Microsoft BarCode Contorlは、OLEオブジェクトなので
ーーーーー>描画オブジェクトの指定=msgOLEControlObject(値=12)
プログラムの実行
配置したオブジェクトの名前=「QRコード1」を取得しました
■描画オブジェクトのタイプの一覧表■
名前 | 値 | 説明 | 名前 | 値 | 説明 | |
mso3DModel | 30 | 3Dモデル | msoLine | 9 | Line | |
msoAutoShape | 1 | オートジェイプ | msoLinked3DModel | 31 | リンクされた3Dモデル | |
msoCallout | 2 | 吹き出し | msoLinkedGraphic | 29 | リンクされたグラフィック | |
msoCanvas | 20 | キャンパス | msoLinkedOLEObject | 10 | リンクOLEオブジェト | |
msoChart | 3 | グラフ | msoLinkedPicture | 11 | リンク画像 | |
msoComment | 4 | コメント | msoMedia | 16 | メディア | |
msoContentApp | 27 | コンテンツOfficeアドイン | msoOLEContorolObject | 12 | OLEコントロールオブジェクト | |
msoDiagram | 21 | 図 | msoPicture | 13 | 画像 | |
msgEmbeddedOLEObject | 7 | 埋め込みOLEオブジェクト | msoPlaceholder | 14 | プレースホルダー | |
msoFormControl | 8 | フォームコントロール | msoScriptAnchor | 18 | スクリプトアンカー | |
msoFreeform | 5 | フリーフォーム | msoShapeTypeMixed | -2 | 図形の種類の組合せ | |
msoGraphic | 28 | グラフィック | msoSlicer | 25 | Slicer | |
msoGroup | 6 | Group | msoTable | 19 | テーブル | |
msolgxGraphic | 24 | SmatArtグラフィック | msoTextBox | 17 | テキストボックス | |
msolnk | 22 | インク | msoTextEffect | 15 | テキスト効果 | |
msolnkComment | 23 | インクコメント | msoWebVideo | 26 | Webビデオ |
コメント