• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel vab でのボタンの使い分けと表示の変更の仕方)

Excel VBAでボタンの使い分けと表示の変更の仕方

このQ&Aのポイント
  • Excel VBAでボタンの使い分けと表示の変更の仕方について質問します。
  • フォームコントロールとActiveXコントロールのボタンの違いや使い方、表示の変更方法について調べましたがわからない箇所があります。
  • フォームコントロールの表示を変える方法やActiveXコントロールのボタンクリック時の画面のちらつきを防ぐ方法についてご教授いただけないでしょうか?

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

>このボタンは、どのように使い分けるのでしょうか? 一言でいうと、ActoveX コントロールは、表現力が豊富です。ボタンの色を変えたり、文字の大きさや色をを変えたりするのが簡単です。また、マウスで、右クリック、左クリック、シフトキーを押しながら、コントロールキーを押しながらによって、別々の反応をさせることができます。 しかし、その分、外部ツールになるので、数を増やすと重くなります。また、単独のコントロールでも、少し重いというか、反応が鈍いように思います。 フォームコントロールは、軽いだけでなく、Excel 内部の機能のひとつです。数多くつくる時などには、いろんな面で便利ですが、残念ながら、マニュアルがほとんど残されていません。これは、Excel Ver.5 の時代に作られたもので、もしかしたら、やめようとしていたのか、隠しオブジェクトとして扱われています。(私自身は、書籍やヘルプを残しています) >VBA実行中にボタンの表示を変える必要が出てきました。 >「はじめ」の表示が、10回クリックしマクロを実行した後に「おわり」と表示させたい '//標準モジュール Private cnt As Integer 'モジュールの上部に置く Sub ボタン1_Click() 'フォームコントロール  If cnt < 10 Then   ActiveSheet.Buttons(1).Caption = "はじめ" & " " & CStr(cnt)  Else   ActiveSheet.Buttons(1).Caption = "終わり"   cnt = 0  End If  cnt = cnt + 1 End Sub '//シートモジュール Private cnt As Integer 'モジュールの上部に置く Private Sub CommandButton1_Click()  Application.ScreenUpdating = False ''画面のちらつきを押さえるコマンド  If cnt < 10 Then   Me.CommandButton1.Caption = "はじめ" & " " & CStr(cnt)  Else   Me.CommandButton1.Caption = "終わり"   cnt = 0  End If  Application.ScreenUpdating = True  cnt = cnt + 1 End Sub >ActiveXコントロールのボタンクリック時の画面のちらつきを防ぐ方法がわかればありがたいのですが、どなたかご教授下しさい。 Application.ScreenUpdating = False ''画面のちらつきを押さえるコマンド これをいれれば変わるはずですが、こちらでは、逆に反応がおかしくなるようです。ともかく、試してみてください。

r-inarin
質問者

お礼

早々にご回答いただきありがとうございます。 ActoveX コントロール、フォームコントロールのそれぞれの特徴がわかりました。 ありがとうございます。 以前、ActoveX コントロールのコマンドボタンを一枚のシート上にいくつか使ってマクロを使用していたのですが、だんだんと重くなってきて、最後には使うことも困難になるほどでした。マクロの書き方に問題はあったのだとは思いますが、ActoveX コントロールのコマンドボタンはいろいろと便利な反面、重さを感じていました。 また、画面のちらつきを押さえるコマンドApplication.ScreenUpdatingを使っても、わずかですが画面のちらつきが残ります。 フォームコントロールのボタンは確かに軽いですね。これからはこちらを使おうと思います。 でも、教えていただいた >ActiveSheet.Buttons(1).Caption = "はじめ"… がうまく動作しません。 いろいろと試してみます。

その他の回答 (4)

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.5

>回答番号:No.2 この回答へのお礼 >例えば、ActiveSheet.Buttons(9).Caption = "おわったよ!" >でいいのでしょうか? それでよいはずです。 上手くない場合 既にWendy02さんが回答されていますが フォームのボタンがあるかどうか調べてみてください。 Dim i As Integer MsgBox ActiveSheet.Buttons.Count For i = 1 To ActiveSheet.Buttons.Count MsgBox ActiveSheet.Buttons(i).Caption Next i

r-inarin
質問者

お礼

ありがとうございます。 フォームボタンはありました。 ではなぜ?と考えてみました。 単純なミスでした。 ボタンの番号が違っていました。 <ホーム>タブの<検索と選択>の<オブジェクトの選択と表示>画面では、該当のボタンは、Button 9 とあったので、Button(9).Captionとしていました。 でも、xls88さんのマクロを使ってフォームボタンを確認したとき、5個しかなくて「?」の状態でした。 確かにシート上にも5個しかない。 「番号を変えれば正常に動くかな…」と思って実行。 Button(9)をButton(4)にして、正常に動きました。 本当にありがとうございます。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

>>ActiveSheet.Buttons(1).Caption = "はじめ"… >がうまく動作しません。 >いろいろと試してみます。 いくつか可能性を考えてみましたが、思い当たりません。 可能性としては、ActiveSheet にはボタンがない場合、ということになりますね。 もうひとつは、Buttons(1)そのものがない場合、ということが考えられます。 こんなマクロを考えてみました。 フォームとActiveX ボタンを数えるマクロ Sub CheckTest1()  Dim i As Long  Dim o As Object  With ActiveSheet   MsgBox "フォームボタン × " & .Buttons.Count   For Each o In .OLEObjects    If TypeOf o.Object Is MSForms.CommandButton Then     i = i + 1    End If   Next   MsgBox "ActiveXコントロール ×" & i  End With End Sub

r-inarin
質問者

お礼

今回も丁寧に教えていただきありがとうございます。 教えていただいたマクロでボタンを数えると まちがいなく、ActiveSheet上にボタンはありました。 では、どうして? >ActiveSheet.Buttons(1).Caption = "はじめ"… のButton(1)の( )の中の番号を存在しない番号9にしていたために、該当のボタンが反応しなかったことがわかりました。 本来のボタンの番号は4でした。9は存在しないボタンの番号でした。 ( )内の番号を変えずに、(1)のまま実行していれば、他のボタンの表示が変化して間違えに早く気がつくことができたのに残念です。 でも、ボタンを数えるマクロを知ることができ得しました。 Wendy02には本当にお手数をおかけしました。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

コントロールについて : ActiveX コントロールと [フォーム] ツールバーのコントロールの使用 http://office.microsoft.com/ja-jp/excel-help/HP005198311.aspx フォームのボタンにもCaptionプロパティはあるようです。 当方Excel2007ですが、Captionプロパティで表示を変えることが出来ました。

r-inarin
質問者

お礼

早々にご回答いただきありがとうございます。 >フォームのボタンにもCaptionプロパティはあるようです。 >当方Excel2007ですが、Captionプロパティで表示を変えることが出来ました。 私もexcel2007ですが、記述の仕方がわかりません。 例えば、ActiveSheet.Buttons(9).Caption = "おわったよ!" でいいのでしょうか? 差し支えがなければ、具体的な表示の仕方を教えていただければありがたいです。

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

一つ目の疑問 あくまで自分の場合ですが、ワークシートにおいてはフォームのコントロールの方がトラブルが少ないと言われているのと、Application.callerを用いて、全てのボタンを一つのプロシージャで処理するのが容易なので、フォームのボタンを使用しています。最近は外観の自由が利くので、図形にマクロを登録する事が増えてきました。 二つめの疑問 下記の様なコードでボタンのテキストを変更可能です。 Sub ボタン1_Click() With ActiveSheet.DrawingObjects(Application.Caller).Characters .Text = .Text & "押されたよ" End With なお、当方xl2000ですので、上位バージョンで動かない場合は、悪しからず。

r-inarin
質問者

お礼

早々にご回答いただきありがとうございました。 できました。OSはVISTAでexcelは2007です。 ありがとうございます。 図形にマクロを登録することはまったく考えていませんでした。 子供向けての学習ソフトを作っているので、こちらを利用した方が、おもしろいボタンができそうです。

関連するQ&A