Microsoft 製品に組み込まれている Visual Basic の実装。
y sakuda様 ご丁寧なご指導ありがとうございます。
すごく特殊な操作ではないのに新しいバージョンでうまくいかないのは納得がいかない感じですが、やり方を変更することで対応したいと思います。
お礼が遅くなり申し訳ありませんでした。
このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
次のようにシートを切り替えるモジュールがエクセル2010までは正常に動作していました。
エクセル2013では、シート上に作ったコマンドボタンでシートを切り替える場合は正常ですが、ユーザーフォーム上に作ったコマンドボタンでシートの切替を行うと、画面では切り替えたシートが表示されていますが、実態は切替前のシートのようです。
改善策をご教示ください。
1 シート名”元”のコマンドボタンでユーザーフォームを表示する。
Private Sub フォーム()
UserForm1.Show
End Sub
2 ユーザーフォーム上のコマンドボタンでシート名”先”へ切替
Private Sub CommandButton1_Click()
Unload UserForm1
Worksheets("先").Activate
End Sub
切り替わったシート”先”では一見正常ですが、具体的に次のような症状があります。
1 マウスのロールボタン等でスクロールが正しくできない。
2 セルに文字等を入力するとシート”元”の方に入力される。
3 シート”先”に結合セルがあった場合、セルポインタをカーソルキーで移動すると、結合前のように移動する。
4 ウインドウを閉じるボタンも利かない。 等々
◆但し、一旦手動でシート”元”を選択して戻ると正常になっています。
これは仕様変更のためでしょうか。
よろしくお願いします。
Microsoft 製品に組み込まれている Visual Basic の実装。
ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。
y sakuda様 ご丁寧なご指導ありがとうございます。
すごく特殊な操作ではないのに新しいバージョンでうまくいかないのは納得がいかない感じですが、やり方を変更することで対応したいと思います。
お礼が遅くなり申し訳ありませんでした。
ざっと試してみた範囲では、マクロをシート上のフォームコマンドボタンないしはオートシェイプ等の図から起動した場合にこの症状がでるようですね。
シート上のActiveXのコマンドボタンから起動した場合や、マクロダイアローグから起動した場合には症状が出ません。ですから、シート上のボタンをActiveXに変えるのが一番スマートみたいです。
(個人的にはシート上にActiveXを配置するのは好きではありませんし、お勧めしません)
で、現状を大幅に変えない回避策にはよい物は見つかりませんでした。
↓は実質的にシートのActivateをメイン側に返されてから行うと言う手段です。
Sub main()
UserForm1.Show
Set x = ActiveSheet
Worksheets(1).Activate ’<=別のシートなら何でもよいです。
x.Activate
End Sub
こんなことをするくらいなら、初めからイベントプロシージャでActivateなんかやらない方がスマートなんですが、イベントプロシージャからメインモジュールに帰る際にデータを受けわたしする手段は限定されます。
1. Tagを使用してシート名を返す⇒Tagを別の目的で使う場合に問題となってしまう可能性があります。
2.グローバル変数により受け渡す⇒グローバル変数はプロシージャの独立性を損ないますので、どうしても必要な場合以外は使わない方が無難だと考えます。
参考まで。
なるほど、コードをシート上のボタンから起動した場合おっしゃるような症状がでますね。
多分バグでしょうが、VBAの場合、SPなどで対応されない場合がほとんどですので、こういうのは回避策を考えるしかありません。
2013では、UserFormのコードの中でSheetのActivateをやっても効かないケースがあることは承知していたんですが、私の承知しているのは、別ブックを操作している場合のケースです。
幾つか回避策を考えて見たのですが、今のところうまく行くのは極めてダサイとしか言いようのないものですので、もうちょっと考えて見て改めて提示します。
早速のご返信ありがとうございます。
Unload を Hide に変更してみました。
確かに切替は出来るのですが、具体的症状として書いている状態は改善しません。
シート上のコマンドボタンでは全く問題ないのに、ユーザーフォーム上のボタンを利用した場合にこのようになるのが不思議です。
普通に切り替えられます。
Private Sub CommandButton1_Click()
Worksheets("先").Activate
Me.Hide
End Sub
としてみて下さい。
イベントプロシージャの中で、Unloadなんかしてるんで変なことになってるんでは?