質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.53%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Windows 7

Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

3回答

28366閲覧

Excel2016のVBAにおいて、意図しないシートがアクティブになる

ramune3

総合スコア11

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Windows 7

Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2017/11/07 04:39

編集2022/01/12 10:55

###発生している事象と質問の内容
win7で稼働中のマクロブックのwin10互換性検証を行っています。

ボタン押下後、
ForEachでシートを順番に取得し、If文で名称が一致したシートにUnprotectを行う処理で、勝手にアクティブになってしまうシートと、問題なく(アクティブにならずに)処理できるシートが混在してしまっています。

この現象では必ず同じシートがアクティブになるのですが、そのシートが複数あり(sheetA、sheetBとします)
-通常実行
→sheetAがアクティブになる
-ステップイン
→どのシートもアクティブにならず、本来アクティブであるべきシート(sheet1)がアクティブになる
-ブレイクポイント設定後、F5押下
→sheetBがアクティブになる
-途中までステップイン後、途中からF5で実行
→F5を押した箇所によってsheetA、sheetB、sheet1とアクティブなシートが変化
と言った状況で、実行方法によってアクティブなシートが変わっていきます。

修正方法は、本来アクティブであるべきシートを「Sheets().Activate」で明示的にアクティブにすれば解決すると思いますが
原因について、見当がつかず困っている、という状況です。
お力を貸していただければ幸いです。
###初期処理より前の処理に関して
現象が発生するボタンがこの処理にたどり着くまでに行っている処理は以下の通りです。

-Application.ScreenUpdating=False
-sheet1のオートフィルタ解除
-ボタン押下フラグの判定

###試したこと
-1つ1つの処理にブレイクポイントを、設置して一度ステップインをしてからF5押下でどこで現象発生するか検証する(End If,Nextにブレイクポイント設置時のみ正しく動作する)
-ウォッチウィンドウでアクティブシートが変化する度に処理を停止させる
-MsgBoxでアクティブシートの名前を表示するようにし、通常実行時のアクティブシートがどう移り変わるか調査(ウォッチウィンドウと同じ結果)

###備考
使用PC1
Windows7(32bit)
Excel2010(32bit)
ver.14.0.7128.5000
使用PC2
Windows10(64bit)
Excel2016(32bit)
ver.16.0.4266.1001

win7ではこの現象は発生しません。
社内環境のため、バージョン変更等はできません。

何卒、よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

現象が発生していないので何とも言えませんが、SheetA、SheetBのWorksheet_Activateイベント処理と別のSheetのWorksheet_Activateイベント処理で違いがあるか確認してはどうでしょうか?

投稿2017/11/11 11:57

diracpaul

総合スコア157

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

以下のようなこともあるようです。
シートコピー後のActiveSheetは保証されない

結局は、

修正方法は、本来アクティブであるべきシートを「Sheets().Activate」で明示的にアクティブにすれば解決すると思いますが

だとは思いますが、安定させる為に、場合によってはDoEventsが必要な個所があるかもしれません。

投稿2017/11/07 08:03

sazi

総合スコア25041

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

コードが提示されていないので何とも言えませんが、状況的にアクティブシートに対しての処理をしているのではないかと思います。
まあそれでもきちんと制御できていれば構わないのですが、アクティブシート前提の作りは失敗すると現在のような状況になりますし、作り的にもあまり効率的ではありません。
VBAは処理したいシートをアクティブ化しなくても直接指定して処理できますので、全体的にそのような作りに変えてみてはいかがでしょうか。

VBA

1WorkSheets(x).Activate 2ActiveSheet.Cells() = xxx 3ActiveSheet.Cells() = xxx 4ActiveSheet.Cells() = xxx 56Dim sh as Worksheet 7Set sh = WorkSheets(x) 8sh.Cells() = xxx 9sh.Cells() = xxx 10sh.Cells() = xxx

投稿2017/11/07 06:34

ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.53%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問