• ベストアンサー

CommandButtonのCaptionを変化させたい

VBAを始めたばかりの初心者です。 sheet1にコントロール(CommandButton)を10個ほど配置しました。各CommandButtonのCaptionにsheet2~11のセルA1の値を表示させたいと思っています(このA1の値は変化します)。 Private Sub Workbook_Open() Dim Mrang1 As String Mrang1 = Worksheet(2).Range("a1").Value CommandBottan1.Caption = Mrang End Sub 上記のようなものを考えてみましたが、ダメでした。 根本的に何か間違っているのでしょうか。 よろしくお願いします。

noname#121624
noname#121624

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

質問の真意というか、困っている状況が良く伝わりませんが推定して 私も試行してみました。上手く行かない原因は「イベント」の捕らえ方 選び方にあると思います。イベントとは「クリックしたら」とか「ワークブックを開いたら」とか言うプログラムが実行される「きっかけ」のことですよね。 以下回答を済ませてから良く見ると質問はコマンドボタン を貼りつけるものでした。済みません置き換えてください。変わりはないと思います。 新規WorkbookのSheet1を開き、メニューバーの右余白部分で 右クリック-コントロールツールボックス-ラベル(Aの表示のあるもの)とクリックし、ラベルをSheet1上にドラッグして貼りつけました。 それを3回繰り返し3つラベルを貼りつけました。その後 ツール-マクロ-VisualBasicEditor-コードをクリックします。 イベントとしてWorksheetのActivateを選びました。 コーディングの本体は貴殿と同じです。 Private Sub Worksheet_Activate() Label1.Caption = Worksheets("sheet1").Range("a1") Label2.Caption = Worksheets("sheet2").Range("a1") Label3.Caption = Worksheets("sheet3").Range("a1") End Sub そしてメニューの「実行」をクリックします。その後Worksheetに切り替えてSheet2のA1に文字列値(ロとする)を入れ、Sheet3のA1に文字列値(ハとする)を入れSheet1に戻ります。最後にSheet1のA1に文字列(イ)値を入れると、Sheet1の3つのラベルの文字がそれぞれイ、ロ、ハになります。 Sheet2を開いてA1の値を変えたり、Sheet3を開いてA1の値を変えたりして、Sheet1に戻るとSheet1の3つラベルは変えたように変わります。 ただこのWorksheetはSheet1を指すようで、Sheet2のA1に「ロ」を 入れた時やSheet3のA1に「ハ」を入れた時に、Sheet1のラベル が変わるのではないようです。 しかし貴殿の意図のケースではSheet1にもどった時に変わっていれ ば差し支えないのではないでしょうか。

noname#121624
質問者

お礼

丁寧な回答で、もやもやとしていたイベントの概念もよーくわかりました。 大きなヒントになったのは、Worksheets("sheet1")の"sheet1"の部分でした。 はずかしながら、Worksheets(1)とWorkshhts("sheet1")は全く同じであると思っておりまして、「ボタン」を配置したシートの指定がまちがっていたようです。 あとは回答いただいた通り作成してみたところ、うまくいきました。本当に有り難うございました。

その他の回答 (2)

回答No.3

こんな感じはどうでしょう。 コントロールは配列で配置して、 Dim Mrang(10) as string Dim i as integer FOR i=0 to 10 Mrang(i)=Worksheets(i+2).Cells(1,1) WorkSheets(1).CommandButton(i).Caption=Mrang(i) NEXT i ~まず配列Mrang()にそれぞれの文字列を代入して、コマンドボタンのキャプションに表示させます。

noname#121624
質問者

お礼

そんな感じでとてもいいです。 10個のコマンドボタンを配置して…と質問に書いた後40個に増えました。なので、この配列の回答はぜひ使わせていただきたいと思います。有り難うございました。

回答No.1

シート1に作ったボタンというのは「フォーム」ツールバーの「ボタン」でしょうか。もしそうならば、それはCommandButtonとは呼ばないようです。 マクロの記録では Shapes("Button 1")となっていました。 そこで、普通に「フォーム」ツールバーの「ボタン」のテキストを表示変更するマクロを作ってみました。 Sub Auto_Open() For a = 1 To 10 Worksheets(1).Shapes("Button " & a).Select Selection.Characters.Text = Worksheets(a + 1).Range("A1") Next End Sub ただ、ksjqaさんはWorkbook_OpenというイベントマクロやPrivate Sub~もご存知の方なので「フォーム」ツールバーの「ボタン」のことではないのかもしれませんが。 もし質問の意味が違ったのでしたら、また補足して下さい。

noname#121624
質問者

お礼

わかりやすい回答をありがとうございました。 「フォーム」ツールバーではなく、「コントロール」ツールバーのボタンのことだったのですが、tamagawa49さんの説明で、「フォーム」ツールバーの「ボタン」の扱いが理解できました。 皆さんの回答を試していてお礼が遅れた事をお詫びします。

関連するQ&A

  • EXCEL VBA におけるブック終了後の値の保存方法について

    EXCEL VBAについて質問があります。もしかしたら初歩的なことかもしれませんがよろしくお願いいたします。 まず、 Sub Test() Dim i As String i = InputBox("好きな果物を入力してください") Sheets("Sheet1").Range("A1").Value = i End Sub を実行し、ブックを保存して終了する。 ブックを開く Private Sub Workbook_Open() Dim k As String k = Sheets("Sheet1").Range("A1").Value If k = "みかん" Then MsgBox ("a") Else: MsgBox ("b") End If End Sub この処理を Sheets("Sheet1").Range("A1").Value = i というシート上のセルに値を保存するという方法を取らずに iの値をブック終了後もプロシージャ内に持っておくというのは可能なのでしょうか。 Publicで宣言してもブックを一度閉じると やっぱりiの値は保存されませんでした。 どうぞよろしくお願いいたします。

  • マクロのボタン名設定方法

    お世話になります。 マクロのボタン名を 別のファイルのセルの値に設定したいとおもい プログラムを組んでいるのですが、うまくいきません。 CommandButton1をクリックしCommandButton2へ表示 Private Sub CommandButton1_Click() Workbooks("c:\file.xls").Worksheets("Sheet1").Range("A1").Copy Worksheets("Sheet1").CommandButton2.Caption End Sub や Private Sub CommandButton1_Click() Worksheets("Sheet1").CommandButton2.Caption = _ Application.ExecuteExcel4Macro("'C:\[file.xls]Sheet1'!" & Cells(1,1 ).Address(, , xlR1C1)) End Sub などといろいろ試しているのですが、 「インデックスが有効範囲にありません」 とエラーがかえってきます。 そもそもボタン等のプロパティにセットしようとしているのがいけないのでしょうか・・・。 どなたかご教授お願いします。

  • Excel VBAについて

    Excel VBAにおいて、Sheetの選択した行によって値を表示するUserFormを変更したいと思っています。 現在以下のようにしたのですが、実行すると「SubまたはFunctionが定義されていません」というエラーが表示されます。 「Controls("UserForm" & x).Label1.Caption =」のところをどのようにしたらよいのでしょうか。 Private Sub CommandButton1_Click()   If ActiveCell.Row = 5 Then     UserForm1.Show     x = 1   ElseIf ActiveCell.Row = 6 Then     UserForm2.Show     x = 2   End If End Sub Private Sub Worksheet_Selection Change(Byval Target As Range)   Controls("UserForm" & x).Label1.Caption = ・・・

  • Userform内のFrameのCaptionが印刷できないのですが

    VBAでUserFormを印刷しようとしたのですが、UserForm内のFrameのCaptionのみ印刷されません。その他Frameの枠とかUserForm内のLabelとかは印刷できるのですが、何か設定等あるのでしょうか?一応UserForm内にCommandButtonを作りクリックで印刷させようと考えているのですが、ちなみにコードは Private Sub CommandButton1_Click() Userform1.Printform End Sub としています。なにか方法があれば教えてもらえないでしょうか。よろしくお願いします。

  • 'Range'メソッドは失敗しました

    ExcelのVBAの質問になりますが、教えてください。 下記を動かすと最後の行で「'Range'メソッドは失敗しました: '_Worksheet' オブジェクト」と出ます どうしても最後の行をセレクトしたいのですが、どうしたらよいでしょうか。 Option Explicit Public WB1 As Workbook Public WB1SH1 As Worksheet Public CSVWB1 As Workbook Public CSVWB1SH1 As Worksheet Dim MaxRow As Integer Private Sub CommandButton1_Click() Set WB1 = ActiveWorkbook Set WB1SH1 = WB1.Worksheets(1) Dim a As String a = WB1SH1.Range("a1) Workbooks.Open "C:\Users\User\Desktop\" & a & ".CSV" Set CSVWB1 = ActiveWorkbook Set CSVWB1SH1 = CSVWB1.Worksheets(1) MaxRow = CSVWB1SH1.Cells(Rows.Count, 1).End(xlUp).Row WB1SH1.Activate WB1SH1.Range(Cells(1, 1), Cells(MaxRow, 3)).Select CSVWB1SH1.Activate CSVWB1SH1.Range(Cells(1, 1), Cells(MaxRow, 3)).Select  '←ここでエラーがでる End Sub

  • エクセルマクロ(VBA)で指定したセルが変化したときに実行するには?

    VBAでsheetの中のworksheet_changeなどでマクロを書くと、そのシー トの中のどのセルを変化させてもマクロが実行されるのですが、これ を、A1とc1とc2が変化したときだけ処理を実行させたいのです。 以下のマクロのどこかを編集すると、そのようなことが出来るのでし ょうか? Private Sub Worksheet_SelectionChange(ByVal Target As Range) ----実行する内容---- End Sub Private Sub Worksheet_Change(ByVal Target As Range) ----実行する内容---- 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 シートの選択 

    windows XP でエクセル2000を使っています。 Sub aaa() Sheets("Sheet1").Select Dim a As String a = Cells(2, 4) Sheets(a).Select Range("A1").Select End Sub というマクロだと セルに入っている値のシート名を探してくれます。 ですが Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If Intersect(Target, Range("B11:b683")) Is Nothing Then Exit Sub Worksheets("Sheet1").Range("C2").Value = Target.Value Dim b As String b = Range("C2).value (←ここをcellsにしてもダメ) Sheets(b).Select Range("A1").Select End Sub これだとsheets(b)を選びません。Sheets(b).Selectのところが黄色くなります。 何処が間違えているのでしょうか。 全くの素人ですが、仕事で必要に迫られています。 わかりやすく回答・解説くれると助かります。

  • VBA 別シートのセルから、文字列を参照するには?

    Excel VBAに於いて 同BOOKのSheet1から、Sheet2の文字列を変数に入れよとするとエラーになります。 何故でしょうか。 また、その対処法を、御教示ください。 Dim objWBK As Workbook Dim objSH As Worksheet Set objWBK = ThisWorkbook Set objSH = objWBK.Sheet2 Dim cnsFILENAME As String cnsFILENAME = objSH.Range("a4")     ← ここで、「オブジェクトは、このプロジェクトでサポートされていません。」と、エラーメッセージが出る。 Sheet2.Range(”A4”)には、文字列を入れてある。 以上、よろしくお願いします。

  • CommandButtonを押した時に…

    Sheet1にコントロールのCommandButton1(名前は"スタート")を配置し、クリックした時に下記のプロシージャを有効にしたいのです。 また、同じくCommandButton2(名前は"ゴール")をクリックしたときにこのプロシージャを無効(終了)にしたいと思っています。 どのように記述をすればよいのでしょうか。 よろしくお願いします。 Private Sub Worksheet_SelectionChange(ByValTarget As Range) ActiveCell.Interior.ColorIndex = 5 End Sub

専門家に質問してみよう