• ベストアンサー

excel シート上のボタンが動かない

シート上にコマンドボタンをおきました。そしてそのボタンを押したたときの動きをVBAで書きました。 普通に動きます。 次にそのシートを新しいウィンドウで開き、並べて表示しました。一方のウィンドウ上でボタンは正常に働きますが、もう一方のウィンドウのシート上ではボタンは働きません。 どちらのウィンドウ上でも正常にボタンを働かせたいのですが、できません。どうすればいいのでしょうか。

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

  • ベストアンサー
  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.4

以下のページは97での問題として記載されているページですが http://support.microsoft.com/kb/167278/ja 2007でも同じ現象だそうです。 Excel豆知識34 http://www11.plala.or.jp/koma_Excel/contents4/mame4034/mame403405.html このページの最後に記載されていました。 オートシェイプか「フォーム」ツールバーのボタンじゃないとご希望の動作は無理みたいですね。

qso
質問者

お礼

ありがとうございます。 残念ですが、できないのですね。 仕様のようなので、あきらめるしかないのですね。別の手段を考えます。

その他の回答 (4)

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.5

#2-3、cjです。 #2お礼欄拝見しました。 まず、お詫びです。 #2-3に書いた内容は、私の勝手な読み違え(勘違い→思い込み)で、 ウィンドウの分割を適用した場合のことを書いていました。 新しいウィンドウを開いた場合のことで言えば、 確かに、ひとつのコマンドボタンについて、その動作は、ひとつのウィンドウに限られます。 また、前提が違っていたせいで、 非アクティブなウィンドウ上のコントロールを一度のクリックで操作できる ようにしたいという要望であると、二重に勘違いしていました。 すみませんでした。m(__)m 従って、#2お礼欄でご提示の疑問点については、 すべて前提を間違えた私の問題であって、 > こちらの操作上のミスなどが有りましたら そちらで確認されていることはに、誤りはありません。重ねて申し訳ないです。 "[TakeFocusOnClick]の値をTrueからFalseに設定変更"し場合についてですが、 フォーカスを持つかどうかの違いから派生して、 フォーカスを持っている時=押した後、 「見た目の変更」としては、コマンドボタンのテキストフレームに四角い枠が破線で表示され、フォーカスを持っていることを示唆します。 また、この場合(次の操作でコマンドボタン以外を選択するまで) Excelのツールバー等のメニューの多くが(グレイアウトして)無効になってしまいます。 > 実際の操作の場合、フォーカスが動いてから操作できれば十分だと思っています。 > しかし現状では、activeXコントロールのボタンの場合、全く動きません。どうしたらいいのでしょうか。 あらためてお応えしますが、これは仕様上の動作でして、 ユーザーの通常の操作や設定によって、お望み通りに出来るようなものではないです。 このまま無責任に終ってしまうのも悲しいので、と、 何か方法は無いかとずっと格闘しているのですが、色々試してはみたものの、 十分な形のものを提示するのは未だ、難しいです。 コマンドボタンを複製したものを元のコマンドボタンに重なる位置に配置して、 ウィンドウ毎に有効なコマンドボタンを切り替える、というアイディアで、 2つのウィンドウ、ひとつのシート、(元々)ひとつコマンドボタン、 で実現する(2つのウィンドウでコマンドボタンを機能させる)処までは概ね出来ました。 2つのコマンドボタンを見かけ上ひとつのコマンドボタンとして、 それぞれに対応したウィンドウで操作出来るようにする、というものです。 特別な処理をする訳でもないのですが、汎用性を持たせることに躓いています。 「2つのウィンドウ、ひとつのシート、(元々)ひとつコマンドボタン」 というような限定的な条件なら、実用出来そうな見込みでいます。 コマンドボタン切り替えの部分のプロットは、こんな感じです。 Private Sub Workbook_WindowActivate(ByVal Wn As Window) If モジュール変数キャンセルフラグ Then Exit Sub With Wn.ActiveSheet Select Case .Name Case "Sheet1" Select Case Wn.WindowNumber Case 1 .OLEObjects("CommandButton1").SendToBack Case 2 .OLEObjects("CommandButton2").SendToBack End Select End Select End With End Sub 後は、Workbook_Openイベントで、 コマンドボタンの有効ウィンドウを設定する (Window:1で"CommandButton2"を有効に、Window:2で"CommandButton1"を有効に、) 処理との組み合わせ、調整です。 今の処、後々のメンテナンスを見通して開発できるレベルではないですし、 決してスマートな方法でもなく、まだどうなるか解りませんけれど、 もう暫く闘ってみようかと個人的に思っています。 スレッドを締切るのでしたら、それはそれで、私としては構いません。 またご迷惑を掛ける結果に終るかも知れませんから、 質問者さんの思いのままにお任せします。 そこまでしてActiveXコントロールを使う必要はない、という判断もあると思いますし、 その方が普通だとも思います。 とりあえず、以上です。 お騒がせしてしまって本当にすみませんでした。p

qso
質問者

お礼

丁寧な説明、いろいろな試み、本当にありがとうございます。知らないことも多く、とても参考になります。ただ、今回のことに関しては、Excelそのものの問題というか、仕様のようなので、スレッドは締めさせていただきます。操作性の点で、こういうことができたらいいなあ、とは思いますが、それができないのであれば、可能な方法を組み合わせて、別の操作方法などで工夫したいと思います。ありがとうございます。

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.3

#2、cjです。 手順の説明中、1ヶ所、誤記がありました。 ひとつの変更だけで、 どのウィンドウからでも一発で操作出来るようにするには、 [デザインモード]→コマンドボタンを右クリック→[プロパティ]→ 表示されるプロパティウィンドウにて、 [TakeFocusOnClick]の値をTrueからFalseに設定変更すればいいです。 以上、訂正です。失礼しました。

qso
質問者

お礼

丁寧な指摘ありがとうございます。

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.2

こんにちは。 ActiveXコントロールのコマンドボタンをシート上に配置している場合は、 コマンドボタンが最後にフォーカスを持ったウィンドウでの操作が優先されます。 または、現在アクティブなウィンドウに表示されたコマンドボタンならば、 直接操作出来ます。 具体的には、 コマンドボタンを操作したいウィンドウ上の、セルやコントロールを選択してから押す、とか、 コマンドボタンを続けて2回押す、とかになります。 以上は、現状維持のまま、操作法で対応する方法ですが、 ひとつの変更だけで、 どのウィンドウからでも一発で操作出来るようにするには、 [コマンドボタン]→コマンドボタンを右クリック→[プロパティ]→ 表示されるプロパティウィンドウにて、 [TakeFocusOnClick]の値をTrueからFalseに設定変更すればいいです。 この設定変更はいつでも元通りにできますし、 ボタンを押した時の見た目が多少変わりますが、それ以外には、 悪い影響は一切なく、マクロの内容によってはエラー回避に役立つこともあります。 お奨めです。 ActiveXコントロールに代えてフォームコントロールにすれば、 常にウィンドウを選ばずに一発で操作出来ますが、 機能やデザイン性、発展性に関して限定されものとなってしまいます。 以上、考え方として、3通り、です。

qso
質問者

お礼

ありがとうございます。 指摘のとおりのことを試してみましたが、上手く動きませんでした。もし、こちらの操作上のミスなどが有りましたらお知らせください。使っているのはexcelの2003です。 指摘の考え方を上から順に1,2,3とします。 1の場合 同じシートを2つ表示した場合、指摘のようになりませんでした。別のシートの場合は、指摘のとおり、フォーカスが動けば、操作できます。今回動かずに困っているのは、同じシートを2つ開いた場合です。 2の場合 [TakeFocusOnClick]の値をTrueからFalseに設定変更しましたが、同じシートの場合、ボタンを押すことはできませんでした。動きません。ボタンを押したときの見た目の変更は分かりません。同じシートの場合、有効なボタンを押すと、有効でないシート側のそのボタンには斜線が入ります。一方、[TakeFocusOnClick]の値がFalseの場合、その斜線は入りませんが、操作できないのは変わりません。ボタンを押すことができません。更に、ボタンを押すことができない側のシートで、プロパティを表示させると、シートのプロパティは表示されませすが、ボタンのプロパティは表示されません。まるでボタンがそこに存在しないかのようです。しかし、プロパティをいじるのはボタンを設定した者であって、それを使う者ではないので、まあ、とりあえずはいいのですが。Excelの仕様なのでしょうか。別のシートの場合、フォーカスが動けば、操作できます。1の場合と同様です。[TakeFocusOnClick]の値の変更の結果、何が変化したのか良くわかりませんでした。 3の場合 フォーカスが動けば操作できます。シートのフォーカスが無い場合は、1回目のクリックでフォーカスが動き、2枚目のクリックで、操作できます。ただ、ご指摘のような「常にウィンドウを選ばずに一発」では操作できませんでした。なぜでしょう。また、フォームコントロールではなく、activeXコントロールで何とかしたいと思っています。 実際の操作の場合、フォーカスが動いてから操作できれば十分だと思っています。しかし現状では、activeXコントロールのボタンの場合、全く動きません。どうしたらいいのでしょうか。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

コントロールツールボックスのボタンを利用しているとシートモジュールになるのでなんだか無理みたいですね。ツールーバーのフォームで表示されるボタンを利用すると標準モジュールになるので並べて表示しても両方動きます。

qso
質問者

お礼

ありがとうございます。 フォームコントロールだと、フォーカスが動いた後、確かに、動きました。しかし、いろいろな操作性・自由度などの点からactiveXコントロールで何とかしたいと思っています。

関連するQ&A