アプリ版:「スタンプのみでお礼する」機能のリリースについて

Excel vab でのボタンの使い分けと表示の変更の仕方
シート上にボタンを配置して、マクロを登録しました。ところが、以下のことで疑問が二つ出たので質問します。
開発のリボン上の挿入には、フォームコントロールとActiveXコントロールの二つがあります。どちらにもボタンがあり、どちらをシート上に配置しても願い通りに働きます。
一つ目の疑問
このボタンは、どのように使い分けるのでしょうか?
二つ目の疑問
実は、最初フォームコントロールのボタンを利用していたのですが、VBA実行中にボタンの表示を変える必要が出てきました。でも、その方法がわかりません。
(例えば、「はじめ」の表示が、10回クリックしマクロを実行した後に「おわり」と表示させたい)
それで、ActiveXコントロールのボタンの表示(Caption)はVBA実行時に変更することができるので、ActiveXコントロールのボタンを利用してみました。
ところが、表示の変更はできたのですが、ボタンをクリックするたびに、画面がちらつきます。
(フォームコントロールのボタンでは何度クリックしてもちらつかないですが…)
フォームコントロールの表示を変える方法、または、ActiveXコントロールのボタンクリック時の画面のちらつきを防ぐ方法がわかればありがたいのですが、どなたかご教授下しさい。
(ボタンに登録したマクロの書き方が問題なのかもしれません)

A 回答 (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
    • good
    • 0
この回答へのお礼

ありがとうございます。

フォームボタンはありました。
ではなぜ?と考えてみました。
単純なミスでした。
ボタンの番号が違っていました。

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

本当にありがとうございます。

お礼日時:2010/07/19 18:44

>>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
    • good
    • 0
この回答へのお礼

今回も丁寧に教えていただきありがとうございます。

教えていただいたマクロでボタンを数えると
まちがいなく、ActiveSheet上にボタンはありました。

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

Wendy02には本当にお手数をおかけしました。

お礼日時:2010/07/19 18:59

>このボタンは、どのように使い分けるのでしょうか?


一言でいうと、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 ''画面のちらつきを押さえるコマンド
これをいれれば変わるはずですが、こちらでは、逆に反応がおかしくなるようです。ともかく、試してみてください。
    • good
    • 0
この回答へのお礼

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

フォームコントロールのボタンは確かに軽いですね。これからはこちらを使おうと思います。
でも、教えていただいた
>ActiveSheet.Buttons(1).Caption = "はじめ"…
がうまく動作しません。
いろいろと試してみます。

お礼日時:2010/07/19 13:34

コントロールについて : ActiveX コントロールと [フォーム] ツールバーのコントロールの使用


http://office.microsoft.com/ja-jp/excel-help/HP0 …

フォームのボタンにもCaptionプロパティはあるようです。
当方Excel2007ですが、Captionプロパティで表示を変えることが出来ました。
    • good
    • 0
この回答へのお礼

早々にご回答いただきありがとうございます。

>フォームのボタンにもCaptionプロパティはあるようです。
>当方Excel2007ですが、Captionプロパティで表示を変えることが出来ました。

私もexcel2007ですが、記述の仕方がわかりません。

例えば、ActiveSheet.Buttons(9).Caption = "おわったよ!"

でいいのでしょうか?
差し支えがなければ、具体的な表示の仕方を教えていただければありがたいです。

お礼日時:2010/07/19 13:10

一つ目の疑問


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

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

お礼日時:2010/07/19 12:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!