- ベストアンサー
Excel VBAでボタンの使い分けと表示の変更の仕方
- Excel VBAでボタンの使い分けと表示の変更の仕方について質問します。
- フォームコントロールとActiveXコントロールのボタンの違いや使い方、表示の変更方法について調べましたがわからない箇所があります。
- フォームコントロールの表示を変える方法やActiveXコントロールのボタンクリック時の画面のちらつきを防ぐ方法についてご教授いただけないでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>このボタンは、どのように使い分けるのでしょうか? 一言でいうと、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 ''画面のちらつきを押さえるコマンド これをいれれば変わるはずですが、こちらでは、逆に反応がおかしくなるようです。ともかく、試してみてください。
その他の回答 (4)
- xls88
- ベストアンサー率56% (669/1189)
>回答番号: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
お礼
ありがとうございます。 フォームボタンはありました。 ではなぜ?と考えてみました。 単純なミスでした。 ボタンの番号が違っていました。 <ホーム>タブの<検索と選択>の<オブジェクトの選択と表示>画面では、該当のボタンは、Button 9 とあったので、Button(9).Captionとしていました。 でも、xls88さんのマクロを使ってフォームボタンを確認したとき、5個しかなくて「?」の状態でした。 確かにシート上にも5個しかない。 「番号を変えれば正常に動くかな…」と思って実行。 Button(9)をButton(4)にして、正常に動きました。 本当にありがとうございます。
- Wendy02
- ベストアンサー率57% (3570/6232)
>>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
お礼
今回も丁寧に教えていただきありがとうございます。 教えていただいたマクロでボタンを数えると まちがいなく、ActiveSheet上にボタンはありました。 では、どうして? >ActiveSheet.Buttons(1).Caption = "はじめ"… のButton(1)の( )の中の番号を存在しない番号9にしていたために、該当のボタンが反応しなかったことがわかりました。 本来のボタンの番号は4でした。9は存在しないボタンの番号でした。 ( )内の番号を変えずに、(1)のまま実行していれば、他のボタンの表示が変化して間違えに早く気がつくことができたのに残念です。 でも、ボタンを数えるマクロを知ることができ得しました。 Wendy02には本当にお手数をおかけしました。
- xls88
- ベストアンサー率56% (669/1189)
コントロールについて : ActiveX コントロールと [フォーム] ツールバーのコントロールの使用 http://office.microsoft.com/ja-jp/excel-help/HP005198311.aspx フォームのボタンにもCaptionプロパティはあるようです。 当方Excel2007ですが、Captionプロパティで表示を変えることが出来ました。
お礼
早々にご回答いただきありがとうございます。 >フォームのボタンにもCaptionプロパティはあるようです。 >当方Excel2007ですが、Captionプロパティで表示を変えることが出来ました。 私もexcel2007ですが、記述の仕方がわかりません。 例えば、ActiveSheet.Buttons(9).Caption = "おわったよ!" でいいのでしょうか? 差し支えがなければ、具体的な表示の仕方を教えていただければありがたいです。
- mitarashi
- ベストアンサー率59% (574/965)
一つ目の疑問 あくまで自分の場合ですが、ワークシートにおいてはフォームのコントロールの方がトラブルが少ないと言われているのと、Application.callerを用いて、全てのボタンを一つのプロシージャで処理するのが容易なので、フォームのボタンを使用しています。最近は外観の自由が利くので、図形にマクロを登録する事が増えてきました。 二つめの疑問 下記の様なコードでボタンのテキストを変更可能です。 Sub ボタン1_Click() With ActiveSheet.DrawingObjects(Application.Caller).Characters .Text = .Text & "押されたよ" End With なお、当方xl2000ですので、上位バージョンで動かない場合は、悪しからず。
お礼
早々にご回答いただきありがとうございました。 できました。OSはVISTAでexcelは2007です。 ありがとうございます。 図形にマクロを登録することはまったく考えていませんでした。 子供向けての学習ソフトを作っているので、こちらを利用した方が、おもしろいボタンができそうです。
お礼
早々にご回答いただきありがとうございます。 ActoveX コントロール、フォームコントロールのそれぞれの特徴がわかりました。 ありがとうございます。 以前、ActoveX コントロールのコマンドボタンを一枚のシート上にいくつか使ってマクロを使用していたのですが、だんだんと重くなってきて、最後には使うことも困難になるほどでした。マクロの書き方に問題はあったのだとは思いますが、ActoveX コントロールのコマンドボタンはいろいろと便利な反面、重さを感じていました。 また、画面のちらつきを押さえるコマンドApplication.ScreenUpdatingを使っても、わずかですが画面のちらつきが残ります。 フォームコントロールのボタンは確かに軽いですね。これからはこちらを使おうと思います。 でも、教えていただいた >ActiveSheet.Buttons(1).Caption = "はじめ"… がうまく動作しません。 いろいろと試してみます。