次の方法で共有

エクセル2013のユーザーフォームを使ったシートの切替

Anonymous
2014-01-26T09:21:51+00:00

次のようにシートを切り替えるモジュールがエクセル2010までは正常に動作していました。

エクセル2013では、シート上に作ったコマンドボタンでシートを切り替える場合は正常ですが、ユーザーフォーム上に作ったコマンドボタンでシートの切替を行うと、画面では切り替えたシートが表示されていますが、実態は切替前のシートのようです。

改善策をご教示ください。

1 シート名”元”のコマンドボタンでユーザーフォームを表示する。

Private Sub フォーム()

UserForm1.Show

End Sub

2 ユーザーフォーム上のコマンドボタンでシート名”先”へ切替

Private Sub CommandButton1_Click()

Unload UserForm1

Worksheets("先").Activate

End Sub

切り替わったシート”先”では一見正常ですが、具体的に次のような症状があります。

1 マウスのロールボタン等でスクロールが正しくできない。

2 セルに文字等を入力するとシート”元”の方に入力される。

3 シート”先”に結合セルがあった場合、セルポインタをカーソルキーで移動すると、結合前のように移動する。

4 ウインドウを閉じるボタンも利かない。 等々

◆但し、一旦手動でシート”元”を選択して戻ると正常になっています。

これは仕様変更のためでしょうか。

よろしくお願いします。

開発者テクノロジ | Visual Basic for Applications

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

5 件の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2014-01-30T14:14:29+00:00

    y sakuda様 ご丁寧なご指導ありがとうございます。

    すごく特殊な操作ではないのに新しいバージョンでうまくいかないのは納得がいかない感じですが、やり方を変更することで対応したいと思います。

    お礼が遅くなり申し訳ありませんでした。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2014-01-26T23:15:48+00:00

    ざっと試してみた範囲では、マクロをシート上のフォームコマンドボタンないしはオートシェイプ等の図から起動した場合にこの症状がでるようですね。

    シート上のActiveXのコマンドボタンから起動した場合や、マクロダイアローグから起動した場合には症状が出ません。ですから、シート上のボタンをActiveXに変えるのが一番スマートみたいです。

    (個人的にはシート上にActiveXを配置するのは好きではありませんし、お勧めしません)

    で、現状を大幅に変えない回避策にはよい物は見つかりませんでした。

    ↓は実質的にシートのActivateをメイン側に返されてから行うと言う手段です。

    Sub main()

    UserForm1.Show

    Set x = ActiveSheet

    Worksheets(1).Activate ’<=別のシートなら何でもよいです。

    x.Activate

    End Sub

    こんなことをするくらいなら、初めからイベントプロシージャでActivateなんかやらない方がスマートなんですが、イベントプロシージャからメインモジュールに帰る際にデータを受けわたしする手段は限定されます。

    1. Tagを使用してシート名を返す⇒Tagを別の目的で使う場合に問題となってしまう可能性があります。

    2.グローバル変数により受け渡す⇒グローバル変数はプロシージャの独立性を損ないますので、どうしても必要な場合以外は使わない方が無難だと考えます。

    参考まで。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2014-01-26T13:26:24+00:00

    なるほど、コードをシート上のボタンから起動した場合おっしゃるような症状がでますね。

    多分バグでしょうが、VBAの場合、SPなどで対応されない場合がほとんどですので、こういうのは回避策を考えるしかありません。

    2013では、UserFormのコードの中でSheetのActivateをやっても効かないケースがあることは承知していたんですが、私の承知しているのは、別ブックを操作している場合のケースです。

    幾つか回避策を考えて見たのですが、今のところうまく行くのは極めてダサイとしか言いようのないものですので、もうちょっと考えて見て改めて提示します。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  4. Anonymous
    2014-01-26T12:13:58+00:00

    y sakuda

    早速のご返信ありがとうございます。

    Unload を Hide に変更してみました。

    確かに切替は出来るのですが、具体的症状として書いている状態は改善しません。

    シート上のコマンドボタンでは全く問題ないのに、ユーザーフォーム上のボタンを利用した場合にこのようになるのが不思議です。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  5. Anonymous
    2014-01-26T09:37:28+00:00

    普通に切り替えられます。

    Private Sub CommandButton1_Click()

    Worksheets("先").Activate

    Me.Hide

    End Sub

    としてみて下さい。

    イベントプロシージャの中で、Unloadなんかしてるんで変なことになってるんでは?

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません