プロが教えるわが家の防犯対策術!

Excel VBAの初心者です。
今回、マニュアル本を見ながら試行錯誤でマクロにチャレンジしています。
用語や説明が上手くできないかもしれませんがよろしくお願いします。

OSはWindows2000、Excelのバージョンは2000です。

sheet1をメニュー画面として、コマンドボタンをいくつか貼り付けて、そのシート名を表示したコマンドボタンをクリックすると別のシートに
飛ぶようにしています。

別のシートに飛んで、そこで作業を終えたら、今度はそのシート上に貼り付けた『メニューに戻る』コマンドボタンをクリックしてsheet1のメニュー画面に戻るようにマクロを組みました。

ところが、作業用のシートからメニューに戻ると前回クリックしたコマンドボタンが表示上消えてしまっています。
そのコマンドボタンがあった位置にカーソルを持って行ってクリックするとちゃんとコマンドボタンの動作をします。

同じような質問がないか検索してみましたら『コマンドボタン上の文字の表示がおかしくなる』という質問があって、下記コードを入れたら解決したそうなので、Sheet1に下記のようなコードを入れてみました。
でもダメでした。

Private Sub Worksheet_Activate()

Application.ScreenUpdating = False
ActiveWindow.ScrollRow = 100
ActiveWindow.ScrollRow = 1

End Sub

解決方法のご教授をお願い致します。

A 回答 (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

としてみては?
    • good
    • 1
この回答へのお礼

そうなんです!
メニューに戻った時に、メニューから目的のシートに飛ぶためにクリックしたコマンドボタンだけが画面上で消えてしまっているんです。
でもそのコマンドボタンのあった位置をクリックしてみると、ちゃんとそのコマンドボタンで指定してあるシートに再度飛ぶので、画面表示上だけの問題だと想像して再描画をさせたかったのです。

画面を再描画させる手段を探して見つけたコードが質問中に書いたコードだったのですが、ScreenUpdatingをFalseにしてしまったのが間違いでした。

Application.ScreenUpdating = True
に直してみたら消えてしまったコマンドボタンも表示されるようになりました。

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

お礼日時:2008/08/27 10:50

状況がわかりません。

補足願います。

1.Sheet1の列名は左よりABCD… 行No.は上より12345…と並んでいますか

2.SHee1に配置した全てのボタンが消えますか

3.コントロールツールボックス内のデザインモードをクリックしてください。
ボタンが表示されましたか? ボタンの左上角で右クリック→プロパティーで 下から3行目のVisibleは true になっていますか

4.マクロのコードを掲示願います。
ツールメニュー→マクロ→マクロ→マクロ選択→編集で表示されます。
表示中 ’(シングルコーテーション)で始まる色付きの行は不要です。削除して残りをコピー&ペーストします。

追伸 コマンドボタンには2種のプロパティーがあるのをご存知ですか?
一つはボタン自身のプロパティーで 上記3で表示されるもので
今一つは、セルとボタンのかかわりを設定するもので、マクロボタンの左上角右クリック→コントロールの書式設定から入るものです。

この回答への補足

説明がつたなくて申し訳ありません。
補足です。

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に変更してみたり、コントロールの書式設定のプロパティタブのオブジェクトの位置関係を「セルに合わせて移動やサイズ変更をしない」に変更したり、いろいろといじってみました。
エクセルは本当に奥が深く、勉強しなければならない事がたくさんあると実感しました。

補足日時:2008/08/27 11:09
    • good
    • 0
この回答へのお礼

冒頭のコード
Application.ScreenUpdating = Falseを
Application.ScreenUpdating = Trueに直したら
コマンドボタンもきちんと表示されるようになりました。

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

お礼日時:2008/08/27 11:31

こんばんは。



>コマンドボタンが表示上消えてしまっています。
>コマンドボタン上の文字の表示がおかしくなる

コマンドボタンの文字が消えるということと、

ActiveWindow.ScrollRow = 100
ActiveWindow.ScrollRow = 1

と、どうつながるのですか?位置が違う場合でも、そんなコードは使わないです。たぶん、意味が違うのでは?マクロでは、そんなコードは、めったに書かないです。

「コマンドボタンが表示上で消える」と聞けば、ワークシート上から、フレームアウトしているかもしれませんが、ともかく、見えなくなっていると解釈できます。そういう話でしょうか。質問が良く分かりません。

たぶん、表示の問題は、フォームのコマンドボタンに書いているのでは?
その編集部分(Caption)に空白が入っているからではありませんか。ベテランでも、うっかりする失敗です。コントロールツールは、プロパティ一覧で確認できますが、フォームは出来ません。

ただ、Excel 2000 クラスのマニュアル本には、フォームを使うとかは、あまりないはずです。Excel2000 では、既に、隠しオブジェクトになってしまっているので、入門レベルでは、ほんの少ししか触れられないはずです。

この回答への補足

説明がつたなくて申し訳ありません。
補足です。

メニューに貼り付けたコマンドボタンをクリックして別シートに飛ばして、またメニューに戻った時に前回クリックしたコマンドボタンのみ画面上で消えてしまうのです。
でも、そのコマンドボタンの配置されているはずの位置をクリックすると、ちゃんとコード上の動作はしてくれるので、画面の表示上だけの問題だと推測しました。


コマンドボタンの文字が消えるということとのつながりとしては、コマンドボタンの表示がおかしくなったのを、きちんと表示させ直したら問題解決したという回答を見て、画面を再描画させる手段として参考にできるかな?と思ったからです。

使用しているExcelは2000なのですが、最近勉強を始めたばかりなので、購入したマニュアル本(3冊)は、みなExcel2002,2003,2007対応版を使用しています。

補足日時:2008/08/27 11:21
    • good
    • 0
この回答へのお礼

冒頭のコード
Application.ScreenUpdating = Falseを
Application.ScreenUpdating = Trueに直したら
コマンドボタンもきちんと表示されるようになりました。

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

お礼日時:2008/08/27 11:32

お役に立てずに申し訳ありません。


原因ははっきりと分かりませんが、入れてみたというコードに疑問があったので返信させて頂きます。
Application.ScreenUpdating = False
というのは画面の更新を止めるという処理になりますので、
そのあとの
ActiveWindow.ScrollRow = 100
ActiveWindow.ScrollRow = 1
のあと
Application.ScreenUpdating = True
という処理を入れるべきではないでしょうか。
    • good
    • 0
この回答へのお礼

冒頭のコード
Application.ScreenUpdating = Falseを
Application.ScreenUpdating = Trueに直したら
コマンドボタンもきちんと表示されるようになりました。

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

お礼日時:2008/08/27 11:30

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A