• 締切済み

エクセル フォームの ボタンがすぐにはへこまないのはなぜ?

エクセルですが フォームよりボタンを作成しVBAにリンクを張りました。 ボタンを押すと処理は正常に実行~完了されるのですが ボタンを押す際 ・押しながら少しドラッグする ・1秒ほど押し続ける のどちらかでないとボタンがへこんでくれません。 なぜなのでしょう? どうすればすぐ反応してへこんでくれるのでしょうか? 単に動きが重いわけではありません。 Office Excel 2003 (11.8169.8172) SP3

みんなの回答

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

こんにちは。 >エクセル フォームの ボタンがすぐにはへこまないのはなぜ? 表題の回答としては、フォームツール自体は、Ver.5 のもので、ダイアログシートなら、すぐに反応するけれども、ワークシートでは、単に、Shapes の一群(Member) としてしか扱われないから、最初に、フォームツールの反応を優先してから、Shape という扱いで、影が反転するのだろうと思います。 もちろん、Shapeとして、クリックした時点で影を反転させるようなマクロを作れば、出来るのだろうけれど、それ自体がなかなか面倒なような気がします。 マクロでコマンドボタンを設定するとか、コントロール配列の真似事をするようなことをしなければ、表現力やイベントの豊富なコントロールツールにしたほうが良いということにしか、回答は思いつきません。

s_shi
質問者

お礼

回答ありがとうございます。 なるほどなぁ・・・ 仕組みからみれば、なんとなく納得です。 やはり別段必要がないからそういう仕様にしてある (あるいは、そういう仕様のまま)、なのですかね♪ ありがとうございました。

  • lark_0925
  • ベストアンサー率63% (37/58)
回答No.1

>のどちらかでないとボタンがへこんでくれません。 現象確認しました(Excel2002)。 気が付かなかったなあ!! いくつかプロパティを探りましたが、これを是正するようなプロパティは 見つけられませんでした(あるかもしれませんが)。 で、代替案。 1 「コントローツールボックス」のコマンドボタンを使う  これだときちんと凹みますよね!! 2 オートシェイプの四角形を使って、ボタンを作成する。   これでも凹みませんが、クリック時にボタンに色の変化が   見られるから、それらしく見える オートシェイプの擬似ボタンの一例です。 新規ブックの標準モジュールにて '============================================================= Sub main()   Dim btn As Shape   [c10].Select   Set btn = newbutton(ActiveSheet)   btn.OnAction = "test"   [f10].Select   Set btn = newbutton(ActiveSheet, "Button2", , , , , &H800000, &HFFFF00)   btn.OnAction = "test"   Set btn = Nothing End Sub '================================================================= Function newbutton(ByVal sht As Worksheet, _          Optional ByVal txt As String = "", _          Optional ByVal left As Single = -1, _          Optional ByVal top As Single = -1, _          Optional ByVal width As Single = 72, _          Optional ByVal height As Single = 24, _          Optional ByVal folor As Long = &H80000012, _          Optional ByVal bcolor As Long = &HC0C0C0) As Shape 'sht 作成シート txt Caption文字列 left,top,width,heightは、ボタンの位置とサイズ 'fcolor 文字の色(RGB) bcolor ボタンの色(RGB)   If txt = "" Then txt = "button"   If left < 0 Then left = ActiveCell.left   If top < 0 Then top = ActiveCell.top   Set newbutton = sht.Shapes.AddShape(msoShapeRectangle, _                     left, top, width, height)   With newbutton    .Fill.Visible = msoTrue    .Fill.Solid    .Fill.ForeColor.RGB = bcolor    .Fill.Transparency = 0#    .Line.Visible = msoFalse    .Shadow.Type = msoShadow14    With .TextFrame      .Characters.Text = txt      .Characters.Font.Color = folor      .HorizontalAlignment = xlHAlignCenter      .VerticalAlignment = xlVAlignCenter      End With    End With End Function '================================================================= Sub test()   MsgBox "ok" End Sub mainを実行してみてください。アクティブシートに二つの ボタンが作成されます。 これで代替できませんか? まっ、こんな面倒なことをするなら、 対した問題もないなら、そのまま既成のボタンを使うという 選択もありますねえ!! 検討してみてください

s_shi
質問者

お礼

朝早くからの回答ありがとうございます。 どうやら仕様であり、回避できないということがわかりました。 どの道をとるか、しばし思案検討したいと思います。 ありがとうございました。