• ベストアンサー

エクセルVBAで、ボタンの文字を変えたい

フォームツールバーから作ったボタン(コントロールツールバーのコマンドボタンではない)の文字列を変えるマクロはどのように書けば良いでしょうか? ActiveSheet.Shapes("古い名前").Caption = "新しい名前" など、いろいろやりましたがエラーになってしまいます。

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

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

エクセルのバージョンによるかもしれないのでよろしく。 下記は、参考にしてください。 VBなどと、またコントロールツールボックスのそれと、フォームのコントロールは不統一で難しいところと思う。 ーー 私はいつも確かめながら手探りで Sub test02() MsgBox Worksheets("Sheet3").Shapes(1).Name End Sub を実行する。Nameは強力で、エラーはまず出ない。 Button 1(半角スペースに半角1と思うが)が判る。 ーー これを直接使わないで(半角やスペースの問題で) n = Worksheets("Sheet3").Shapes(1).Name のように文字列nに入れて ーー Sub test03() n = Worksheets("Sheet3").Shapes(1).Name Worksheets("Sheet3").Shapes(n).Select MsgBox Selection.Caption End Sub を実行して、現在のCaptionが出ることを確かめかめて (Captionも最近のVBなどで、Textなんかに変わったりしているので怖い) ーー Sub test04() n = Worksheets("Sheet3").Shapes(1).Name Worksheets("Sheet3").Shapes(n).Select Selection.Caption = "実行ボタン" End Sub で実行ボタンに変わったことを確かめた。 ただマクロの記録と違ったカタチでできた。 ーー 色を設定(質問には無いが) Sub test04() n = Worksheets("Sheet3").Shapes(1).Name Worksheets("Sheet3").Shapes(n).Select Selection.Caption = "実行ボタン" Selection.Font.ColorIndex = 5 End Sub これもマクロの記録と違うができた。 エクセルのフォームのコントロールのプロパティは、手に負えない。

cmc32000
質問者

お礼

詳しい説明ありがとうございました。マクロの記録などで確かめながらマクロを組んでいますが、同じように研究されている方が多いようで、安心しました。今回は、select selectionを省きたかったのですが、そうは行かなかったようです。

その他の回答 (2)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

新しいマクロの記録を用いて、シート上のボタンのテキストを変更すると下記のようなマクロが生成されます Sub Macro2() ActiveSheet.Shapes("Button 1").Select Selection.Characters.Text = "ボタン 3" End Sub 実際のシート上に何個のボタンがあって、どのようにされたいのか分かりませんが参考にはなると思います。 ボタンが複数あるなら例えば以下のようなマクロでもできます Sub Macro3() Dim idx As Integer  For idx = 1 To ActiveSheet.Shapes.Count   If Left(ActiveSheet.Shapes(idx).Name, 6) = "Button" Then    ActiveSheet.Shapes(idx).Select    Selection.Characters.Text = "Button " & idx   End If  Next End Sub

cmc32000
質問者

お礼

ありがとうございました。shapes()のインデックスが分からなかったのと、.Select Selection.を省きたかったのですが、そうは行かないようですね。

  • venzou
  • ベストアンサー率71% (311/435)
回答No.1

マクロの記録で調べられると思います。 ActiveSheet.Shapes("Shapeの名前").Select Selection.Characters.Text = "新しいテキスト" ↑文字だけ変えるならこんな感じ。

cmc32000
質問者

お礼

早速ありがとうございます。私もマクロの記録で作ってみましたが、 ActiveSheet.Shapes("Shapeの名前").Characters.Text = "新しいテキスト" というようにしたかったのですが、うまく行きませんでした。 選択した後で、選択を解除するしかないようですね。シートに保護をかけると、ボタンの選択もできなくなります。

関連するQ&A

専門家に質問してみよう