- ベストアンサー
Excel VBA --- コマンドボタンが表示上で消える ---
Excel VBAの初心者です。 今回、マニュアル本を見ながら試行錯誤でマクロにチャレンジしています。 用語や説明が上手くできないかもしれませんがよろしくお願いします。 OSはWindows2000、Excelのバージョンは2000です。 sheet1をメニュー画面として、コマンドボタンをいくつか貼り付けて、そのシート名を表示したコマンドボタンをクリックすると別のシートに 飛ぶようにしています。 別のシートに飛んで、そこで作業を終えたら、今度はそのシート上に貼り付けた『メニューに戻る』コマンドボタンをクリックしてsheet1のメニュー画面に戻るようにマクロを組みました。 ところが、作業用のシートからメニューに戻ると前回クリックしたコマンドボタンが表示上消えてしまっています。 そのコマンドボタンがあった位置にカーソルを持って行ってクリックするとちゃんとコマンドボタンの動作をします。 同じような質問がないか検索してみましたら『コマンドボタン上の文字の表示がおかしくなる』という質問があって、下記コードを入れたら解決したそうなので、Sheet1に下記のようなコードを入れてみました。 でもダメでした。 Private Sub Worksheet_Activate() Application.ScreenUpdating = False ActiveWindow.ScrollRow = 100 ActiveWindow.ScrollRow = 1 End Sub 解決方法のご教授をお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 > Application.ScreenUpdating = False > ActiveWindow.ScrollRow = 100 > ActiveWindow.ScrollRow = 1 ワークシートには Redraw メソッドが無いので、その代用コード だと思います。以前、一度同じような状況になって、 Application.ScreenUpdating = True では再描写してくれなかったため、同様のコードを書いたことが あります。ScrollRow を使ったのか覚えてませんが、確かシート をスクロールさせたような..? で、回答ですが、再描写が目的なので ScreenUpdating = False として画面更新を止めてしまっては意味がないですよ。それ以前 のコード実行中に画面更新を止めている可能性があるので、 コードの終了部で、 Application.ScreenUpdating = True ActiveWindow.ScrollRow = 100 ActiveWindow.ScrollRow = 1 としてみては?
その他の回答 (3)
- shinkami
- ベストアンサー率43% (179/411)
状況がわかりません。 補足願います。 1.Sheet1の列名は左よりABCD… 行No.は上より12345…と並んでいますか 2.SHee1に配置した全てのボタンが消えますか 3.コントロールツールボックス内のデザインモードをクリックしてください。 ボタンが表示されましたか? ボタンの左上角で右クリック→プロパティーで 下から3行目のVisibleは true になっていますか 4.マクロのコードを掲示願います。 ツールメニュー→マクロ→マクロ→マクロ選択→編集で表示されます。 表示中 ’(シングルコーテーション)で始まる色付きの行は不要です。削除して残りをコピー&ペーストします。 追伸 コマンドボタンには2種のプロパティーがあるのをご存知ですか? 一つはボタン自身のプロパティーで 上記3で表示されるもので 今一つは、セルとボタンのかかわりを設定するもので、マクロボタンの左上角右クリック→コントロールの書式設定から入るものです。
お礼
冒頭のコード Application.ScreenUpdating = Falseを Application.ScreenUpdating = Trueに直したら コマンドボタンもきちんと表示されるようになりました。 ありがとうございました。
補足
説明がつたなくて申し訳ありません。 補足です。 1.Sheet1の列名は左よりABCD… 行No.は上より12345…と並んでいます。 2.メニュー用のSHee1から他のシートに飛ばすためにクリックしたコマンドボタンのみ消えています。 3.Visibleは true になっています。 4.コードを提示します。 sheet1のコードは Private Sub CommandButton1_Click() Worksheets("見積書").Activate End Sub Private Sub CommandButton2_Click() Worksheets("請求書").Activate End Sub Private Sub CommandButton3_Click() Worksheets("売上集計表").Activate End Sub Private Sub Worksheet_Activate() Application.ScreenUpdating = False ActiveWindow.ScrollRow = 100 ActiveWindow.ScrollRow = 1 End Sub ------------------------------------------ シート "見積書","請求書","売上集計表"ではそれぞれ Private Sub CommandButton1_Click() Worksheets("sheet1").Activate End Sub と入れています。 各シート上で各々いろいろな作業をさせているので他のコードもありますが、今回コマンドボタンが消えてしまうのは画面表示上だけの問題のようなので省略させていただきました。 プロパティーにつきましては、初心者なので本当によくわかっていないのですが、今回の問題でネットで検索して、ボタン自身のプロパティ上でAutoSizeをTrueをFalseに変更してみたり、コントロールの書式設定のプロパティタブのオブジェクトの位置関係を「セルに合わせて移動やサイズ変更をしない」に変更したり、いろいろといじってみました。 エクセルは本当に奥が深く、勉強しなければならない事がたくさんあると実感しました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >コマンドボタンが表示上消えてしまっています。 >コマンドボタン上の文字の表示がおかしくなる コマンドボタンの文字が消えるということと、 ActiveWindow.ScrollRow = 100 ActiveWindow.ScrollRow = 1 と、どうつながるのですか?位置が違う場合でも、そんなコードは使わないです。たぶん、意味が違うのでは?マクロでは、そんなコードは、めったに書かないです。 「コマンドボタンが表示上で消える」と聞けば、ワークシート上から、フレームアウトしているかもしれませんが、ともかく、見えなくなっていると解釈できます。そういう話でしょうか。質問が良く分かりません。 たぶん、表示の問題は、フォームのコマンドボタンに書いているのでは? その編集部分(Caption)に空白が入っているからではありませんか。ベテランでも、うっかりする失敗です。コントロールツールは、プロパティ一覧で確認できますが、フォームは出来ません。 ただ、Excel 2000 クラスのマニュアル本には、フォームを使うとかは、あまりないはずです。Excel2000 では、既に、隠しオブジェクトになってしまっているので、入門レベルでは、ほんの少ししか触れられないはずです。
お礼
冒頭のコード Application.ScreenUpdating = Falseを Application.ScreenUpdating = Trueに直したら コマンドボタンもきちんと表示されるようになりました。 ありがとうございました。
補足
説明がつたなくて申し訳ありません。 補足です。 メニューに貼り付けたコマンドボタンをクリックして別シートに飛ばして、またメニューに戻った時に前回クリックしたコマンドボタンのみ画面上で消えてしまうのです。 でも、そのコマンドボタンの配置されているはずの位置をクリックすると、ちゃんとコード上の動作はしてくれるので、画面の表示上だけの問題だと推測しました。 コマンドボタンの文字が消えるということとのつながりとしては、コマンドボタンの表示がおかしくなったのを、きちんと表示させ直したら問題解決したという回答を見て、画面を再描画させる手段として参考にできるかな?と思ったからです。 使用しているExcelは2000なのですが、最近勉強を始めたばかりなので、購入したマニュアル本(3冊)は、みなExcel2002,2003,2007対応版を使用しています。
- tossy005
- ベストアンサー率38% (7/18)
お役に立てずに申し訳ありません。 原因ははっきりと分かりませんが、入れてみたというコードに疑問があったので返信させて頂きます。 Application.ScreenUpdating = False というのは画面の更新を止めるという処理になりますので、 そのあとの ActiveWindow.ScrollRow = 100 ActiveWindow.ScrollRow = 1 のあと Application.ScreenUpdating = True という処理を入れるべきではないでしょうか。
お礼
冒頭のコード Application.ScreenUpdating = Falseを Application.ScreenUpdating = Trueに直したら コマンドボタンもきちんと表示されるようになりました。 ありがとうございました。
お礼
そうなんです! メニューに戻った時に、メニューから目的のシートに飛ぶためにクリックしたコマンドボタンだけが画面上で消えてしまっているんです。 でもそのコマンドボタンのあった位置をクリックしてみると、ちゃんとそのコマンドボタンで指定してあるシートに再度飛ぶので、画面表示上だけの問題だと想像して再描画をさせたかったのです。 画面を再描画させる手段を探して見つけたコードが質問中に書いたコードだったのですが、ScreenUpdatingをFalseにしてしまったのが間違いでした。 Application.ScreenUpdating = True に直してみたら消えてしまったコマンドボタンも表示されるようになりました。 本当にありがとうございました。