VBA初心者が困っているコントロール作成とcaption取得の方法

このQ&Aのポイント
  • VBA初心者がコントロール作成で困っています。マクロを登録するためにはコントロールのcaptionを取得する必要がありますが、方法がわかりません。Excel 2007を使用しています。
  • コントロールのcaptionから名称を取得する方法や参考になるURLを教えてください。
  • 要約文3つ目
回答を見る
  • ベストアンサー

VBAのコントロールについて

VBA初心者です。 現在、マクロが登録された「コントロール」を作成するところで困っていることがあります。 まず、お手数ですが、添付した画像を見ていただきたいです。 添付画像のように、「コントロール」を作成したのち、 VBEで作成したマクロを登録しようと思っています。 その際、「コントロール」のcaptionの名称を取得して、 その取得値を、その後に続くプログラムに利用したいと考えています。 ですが、そのcaption名称の取得方法がわかりません。 以下のように記述してみたりしたのですが、エラーが発生して、なかなか先に進めないでいます。 【目的】  ■Numberに「コントロール」の名称"Level1"を格納したい。   【記述例】 (ちなみにコントロールがある、ワークシート名は「check」です) Sub BottunClick() Dim Number As String   Number = ActiveWorkbook.Worksheets("check").OLEObjects("Level1").Caption end sub 【エラーメッセージ】 「WorksheetクラスのOLEObjectsプロパティを取得できません。」 ちなみに、Excelは2007を使用しています。 コントロールのcaptionからは、名称を取得することができないんでしょうか。 コントロールのcaption名称を取得する方法や、 もしよろしければ、参考になるURLを教えていただけると嬉しいです。 よろしくおねがいします。

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

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

#1です。 改めて理屈を探してみたところ、VBAのヘルプにある事が分かりました。Excel2000のヘルプですが、 「シートで ActiveX コントロールを使用する」というトピックスが、たぶん2007にもあると思いますので、ご覧下さい。 以下、copy right Microsoft OLEObject オブジェクトのプロパティとして表されない、コントロールのプロパティは Object プロパティを使用して実際のコントロール オブジェクトを取得して設定することができます。次の使用例は、"CommandButton1" というコントロールのキャプションを変更します。 Worksheets(1).OLEObjects("CommandButton1"). _ Object.Caption = "実行"

doramoku
質問者

お礼

再度、お早い回答ありがとうございます。 なんとか作成することができました。ありがとうございます。 すいません。私の質問の方法に色々問題があるみたいでした。 まず、コントロールの「オブジェクト名」自体が分からないということを 申し上げるべきでした。 ヘルプから、ご指定の検索キーワードで探したところ、 コントロールのオブジェクト名を表示させる方法が分かったので 先に進めることができました。 色々ご指導いただきありがとうございました。

その他の回答 (2)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

#1です。 >そのコントロールに「Level1」というキャプションをつけました。 >その「Level1」という文字をプログラム上でNumberという変数 に格納したかったのですが、それができませんでした。 ActiveWorkbook.Worksheets("check").OLEObjects("Level1").Object.Caption ここで、OLEObjects("Level1")に入れるのは、Captionではなくて、オブジェクト名です。 もし、Captionを指定して、そのコントロールを操作したいのなら、ワークシート上のOLEObjectsコレクションを総当たりでチェックして、特定する必要があります。(Captionを持たないコントロールもありますので、エラー対策も必要になります) でも、Captionが分かっていて、それを他でも使いたいなら上記のような面倒なことをする必要も無い気がしますが、勘違いしているでしょうか?

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

画像は小さくて良くわかりませんが、下記の様な事でしょうか。ご参考まで。 Sub test() Debug.Print Worksheets("Sheet1").Label1.Caption Debug.Print Worksheets("Sheet1").OLEObjects("Label1").Object.Caption End Sub

doramoku
質問者

補足

回答ありがとうございます。 画像が見えづらくてすいません。 Objectという記載がなかったからかなと、試してみたんですが、また同じエラーメッセージがでてしまいました。 ちょっと違うみたいです。すいません。 ちなみに画像は、以下のようなことを示したかったんです。 エクセルのツールバーからコントロールを作成し、 そのコントロールに「Level1」というキャプションをつけました。 その「Level1」という文字をプログラム上でNumberという変数 に格納したかったのですが、それができませんでした。 質問内容がわかりづらかったようで、申し訳ありませんでした。

関連するQ&A

  • Excel VBAでツールバーにマクロを登録したい

    自作のツールバーをブックに添付し、 スタートアップにマクロを書いたブックを保存し(起動して非表示にしてあります)、 そのマクロをツールバーの各ボタンに登録しようとしています。 下記のようなコードを書いたのですが、ツールバーに作成したボタンにはマクロが登録できるのですが、 サブメニュー内のボタンには登録できません。 Dim MyWB, NBar MyWB = "stampB.xls" NBar = "stampB1.0" For i = 1 To Application.CommandBars(NBar).Controls.Count  'ボタンのキャプションと同じ名前のマクロを登録  With Application.CommandBars(NBar).Controls.Item(i)   .OnAction = MyWB & "!" & .Caption  End With Next i これをどのように改良したら、サブメニュー内のボタンにもマクロを登録できるようになりますでしょうか? ご存知の方どうぞよろしくお願いします。

  • なぜエラーになるのでしょう?アクティブコントロール

    ちょっと変なやり方かもしれないのですが、都合上こうやりたいので教えてください。 フォーム1の中にフォーム2を入れてサブフォームとして フォーム2の中にコマンドボタンを一つ置きました。 そのコマンドボタンを押した時に、そのコマンドボタン名を取得したいのですがうまくできません。 フォームは20個ぐらいあってこれと同じ動きをしたいので、 フォームモジュールには Private Sub コマンド0_Click() Call アクティブコントロール名を取得する End Sub として、 標準モジュールにコードは書いています。 Sub アクティブコントロール名を取得する() Dim フォーム As String フォーム = Screen.ActiveForm.Name MsgBox "アクティブコントロール名" & Forms(フォーム).ActiveControl.Caption End Sub にすると、オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438)になります。 そもそも、フォーム = Screen.ActiveForm.Nameの時点で、フォーム1になっています。 実際のコマンドボタンはフォーム2にあるのに。 なので、無理矢理 MsgBox "アクティブコントロール名" & Forms("フォーム2").ActiveControl.Caption にしたら、 実行時エラー2450 マクロの式またはVisualBasicコードで参照されている'フォーム2'が見つかりません。 という違うエラーになりました。 Sub アクティブコントロール名を取得する() Dim フォーム As String フォーム = Screen.ActiveForm.Name Forms("フォーム2").SetFocus MsgBox "アクティブコントロール名" & Forms("フォーム2").ActiveControl.Caption End Sub にすればいいのかな?と思ったら Forms("フォーム2").SetFocusでアウトでした。 もともとはサブフォームのコントロールから発信したイベントなのに、 サブフォームのコントロールの値が取れないのでしょうか? 実際のmdbファイルではコマンドボタンではなくテキストです。 ご回答よろしくお願いします。

  • エクセルVBA アドイン メニューの作成方法

    OS:windowsXP HomeEdition ソフト:Excel2003 アドインを作成し配布したいのですが、xla形式で保存しエクセル上でアドインさせ、 作成したメニューからテスト起動させてみると、アドインの元のファイル(拡張子xls)が 展開してしまいます。展開させずにアドインプロシージャを起動させたいのですが 何が原因か調べてもわかりませんでした。知っている方、ご助言御願い致します。 以下に、私の作成したマクロを記述します。 マクロ解説HPで勉強しつつ作成致しました。 ~~~~~~~~~~~~~~~~~~~~~~~~~ <ThisWorkBookへの記述> Dim mySubMenu As CommandBarControl Sub MakeSubMenu() Dim myMenu As CommandBar Dim cmdSubMenu As CommandBarControl 'すでにサブメニューがあれば削除する DelSubMenu Set myMenu = Application.CommandBars("worksheet Menu Bar") Set mySubMenu = myMenu.Controls.Add(Type:=msoControlPopup) mySubMenu.Caption = "メニュー" Set cmdSubMenu = myMenu.Controls("メニュー").Controls.Add(Type:=msoControlButton) cmdSubMenu.Caption = "コマンド1" 'サブメニューでコマンド1を選択したとき cmd1() を呼び出す cmdSubMenu.OnAction = "cmd1" Set cmdSubMenu = myMenu.Controls("メニュー").Controls.Add(Type:=msoControlButton) cmdSubMenu.Caption = "コマンド2" 'サブメニューでコマンド2を選択したとき cmd2() を呼び出す cmdSubMenu.OnAction = "cmd2" End Sub Sub DelSubMenu() 'メニューバーのサブメニューを削除する On Error Resume Next mySubMenu.Delete End Sub <標準モジュールへの記述> Private Sub cmd1() MsgBox "コマンド1を選択しました" End Sub Private Sub cmd2() MsgBox "コマンド2を選択しました" End Sub ~~~~~~~~~~~~~~~~~~~~~~~ 尚、マクロは簡略化し、のせております。 よろしく御願い致します。

  • ワークシート上に配置したコマンドボタンの操作

    OS:WinXP-Home Office:Excel2000 を使用して、VBAのマクロを作成しています ワークシートに複数のコマンドボタンを配置して 各ボタンのcaptionに複数のワークシート名をそのまま代入したいと思っているのですが 以下のソースでは実行できませんでした 記述先はコマンドボタンを貼り付けたシートです 試しに11枚のワークシートと10個のコマンドボタンで実行してみました Private Sub Worksheet_Activate() For i = 1 To 10 Controls("CommandButton" & i).Caption = Sheets(i + 1).Name Next i End Sub 以下のように一つずつ指定すればうまく行くのですが CommandButton1.Caption = Sheets(2).Name CommandButton2.Caption = Sheets(3).Name ・ ・ ユーザフォーム上のコントロールと違って 「Controls()」での操作は出来ないのでしょうか? 自力で検索したところ OLEObjects("CommandButton" & i).Caption = Sheets(i + 1).Name Controls.Item("CommandButton" & i).Caption = Sheets(i + 1).Name の方法も試してみましたがやはりうまく行きませんでした よろしくお願いします

  • VBAにてフォームコントロールの変更

    VBAでフォームコントロールのチェックボックスのON・OFFを変更することは可能でしょうか。 具体的にはA.xlsmのマクロを実行して、 A.xlsmのセルA1が0ならB.xlsの"チェック 1"がOFF状態に。1ならON状態になる。 以上のような仕組みを作りたいです。 (フォームコントロールなのは様式(B.xls)がフォームコントールで作成されており、変更不可のため) ですが、同じシート内でもチェックボックスのON・OFFができずに挫折しそうです。 まずは同一シート内で作ってみようと思い下記コードを作成したのですが、 ”SubまたはFunctionが定義されていません”となってしまいます。 Public Sub test() If Range("A1") = 0 Then CheckBoxes("チェック 1").Value = False ElseIf Range("A1") = 1 Then CheckBoxes("チェック 1").Value = True Else MsgBox "無効な値が設定されています" End If End Sub エラーは”CheckBoxes”のところで出てしまいます。 どなたかご教授ねがいます。

  • VBAの初歩的な質問ですいません。

    VBAの初歩的な質問ですいません。 VBAでマクロを作成しました。 Public Sub CheckClick1() private Sub CheckClick2() をSheet7に作成しました。 その後Sheet7にチェックボックスを作り、 OnClickイベントにマクロを充てようとしたのですが、 マクロの登録ダイアログボックス内の項目に表示されません。 何が原因なのでしょうか?m(__)m

  • フォームコントロールのチェック

    sheet1にフォームコントロールに有るチェック(□の中にレ)でチェックを付けるように作ってます。再度クリックしたらチェックを消せますが、これをマクロで消すようにするにはどのように記述したら良いでしょうか。よろしくお願いします。

  • VBA オプションボタンの分類について

    http://okweb.jp/kotaeru.php3?q=1424026 でオプションボタンの表示に関して質問をした者です。 ボタンを自動作成する事はできたのですが例えば1日と15日に 休暇を取得した場合、ボタンが6つ表示されるのですが(1日分が3コ、15日分が3コ)、 この6つのボタンのうち1つしか選択ができません。 (2つ目を選択すると、前に入力していたものはチェックが外れる。) 日にちごとに、1つずつボタンを選択するようにするにはどうしたら良いのでしょうか? ちなみに、当該処理の今記述しているソースは以下のとおりです。 休暇情報の書き出しが終了するまでループで回しています。 ご教授ください。宜しくお願い致します。 '当日ボタン作成 Set objOLEToday = ActiveSheet.OLEObjects.Add(ClassType:="Forms.OptionButton.1", Link:=False, _ DisplayAsIcon:=False, Left:=565, Top:=100 + objCnt, Width:=45.5, Height:=15.5) objOLEToday.Object.Caption = "当日" '事前ボタン作成 Set objOLEBefore = ActiveSheet.OLEObjects.Add(ClassType:="Forms.OptionButton.1", Link:=False, _ DisplayAsIcon:=False, Left:=750, Top:=100 + objCnt, Width:=45.5, Height:=15.5) objOLEBefore.Object.Caption = "事前" '無断ボタン作成 Set objOLENotice = ActiveSheet.OLEObjects.Add(ClassType:="Forms.OptionButton.1", Link:=False, _ DisplayAsIcon:=False, Left:=920, Top:=100 + objCnt, Width:=45.5, Height:=15.5) objOLENotice.Object.Caption = "無断" '表示位置設定 objCnt = 405.4 + objCnt

  • マクロ VBA ユーザーフォーム 

    いつも大変御世話になっております。 WiindowsXP環境にある【D:\】フォルダ内に【マクロ.xls】があります。 その中にユーザーフォームがあり、そこにはチェックボックスとコマンドボタンがあります。 コマンドボタンを押すと、そのユーザーフォーム内でチェックされたチェックボックスの数を 取得して変数Check_Numberに格納する処理を入れたいのですが、取得方法がわかりません。 例:チェックボックスを2つチェックした状態でコマンドボタンを押すと、【2】が   変数Check_Numberに格納される。 コマンドボタン実行プログラムをこんな↓感じで書きましたが、 これではチェックボックス総数が変更する度に Check_Number_SUMの値を変更しなければいけない為、 汎用性に欠けます。 Private Sub CommandButton1_Click() Dim Check_Number_SUM As Long Dim Check_Number As Long Dim i As Long 'チェックボックス総数設定 Check_Number_SUM = 2 'チェックボックス総数取得 For i = 1 To Check_Number_SUM If Me.Controls("CheckBox" & i).Value = True Then Check_Number = Check_Number + 1 End If Next i MsgBox Check_Number End Sub もっと汎用性が高いコード設計は可能でしょうか? もしご存知の方がいらっしゃるようでしたら、お手数ですがご教授願いますでしょうか? 以上、何卒宜しくお願い致します。

  • VBA PowerPoint2010 検索

    2ページ目に表の挿入を使って目次を作成済です。その表の一部にコマンドボタンを設置して、それをクリックしたら、該当ページに移動するようなマクロは組めるのでしょうか??検索のキーはコマンドボタンの名称と3ページ以降に各ページに存在するオブジェクトに書かれている名称です。 Private Sub cmdA001_Click()'コマンドボタンcmd001のCaptionは「A001」です。 '3ページ目から最終ページまで検索 '挿入の図形のテキスト「A001」を検索して、そのページに移動 End Sub

専門家に質問してみよう