プロが教える店舗&オフィスのセキュリティ対策術

エクセルですが
フォームよりボタンを作成しVBAにリンクを張りました。
ボタンを押すと処理は正常に実行~完了されるのですが
ボタンを押す際
・押しながら少しドラッグする
・1秒ほど押し続ける
のどちらかでないとボタンがへこんでくれません。

なぜなのでしょう?

どうすればすぐ反応してへこんでくれるのでしょうか?
単に動きが重いわけではありません。


Office Excel 2003 (11.8169.8172) SP3

A 回答 (2件)

こんにちは。



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

表題の回答としては、フォームツール自体は、Ver.5 のもので、ダイアログシートなら、すぐに反応するけれども、ワークシートでは、単に、Shapes の一群(Member) としてしか扱われないから、最初に、フォームツールの反応を優先してから、Shape という扱いで、影が反転するのだろうと思います。

もちろん、Shapeとして、クリックした時点で影を反転させるようなマクロを作れば、出来るのだろうけれど、それ自体がなかなか面倒なような気がします。

マクロでコマンドボタンを設定するとか、コントロール配列の真似事をするようなことをしなければ、表現力やイベントの豊富なコントロールツールにしたほうが良いということにしか、回答は思いつきません。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

なるほどなぁ・・・
仕組みからみれば、なんとなく納得です。

やはり別段必要がないからそういう仕様にしてある
(あるいは、そういう仕様のまま)、なのですかね♪

ありがとうございました。

お礼日時:2008/02/19 14:33

>のどちらかでないとボタンがへこんでくれません。


現象確認しました(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を実行してみてください。アクティブシートに二つの
ボタンが作成されます。

これで代替できませんか?

まっ、こんな面倒なことをするなら、
対した問題もないなら、そのまま既成のボタンを使うという
選択もありますねえ!!

検討してみてください
    • good
    • 0
この回答へのお礼

朝早くからの回答ありがとうございます。

どうやら仕様であり、回避できないということがわかりました。

どの道をとるか、しばし思案検討したいと思います。


ありがとうございました。

お礼日時:2008/02/19 14:31

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