###前提・実現したいこと
VBAを使用したマクロを作成したのですが、
実行環境等によってアクティブシートが移動するときとしないときがあるように感じます。
マクロ自体は対策を行い、完成しているのですが、今後のために正確な挙動の仕様がわかればと思い質問させていただきます。
###発生している問題・エラーメッセージ
以下のマクロを実行した際に、実行環境等によって異なる結果となる。
マクロはSheet1~3までの3枚のシートを予め作成したExcel内で実行しています。
###該当のソースコード
VBA
1Sub test() 2 Dim ws As Worksheet 3 Dim r As Range 4 5 ActiveSheet.Range("A1").Value = "test" 6 7 ThisWorkbook.Worksheets("Sheet3").Activate 8 ActiveSheet.Range("A2").Value = "test" 9 10 Set ws = ThisWorkbook.Worksheets("Sheet2") 11 12 ws.Range("A1").Copy 13 ws.Range("B1").PasteSpecial (xlPasteFormats) 14 '//※1 15 16 ActiveSheet.Range("A3").Value = "test" 17 ws.Range("C1").Copy 18 ActiveSheet.Range("A4").Value = "test" 19 ws.Range("D1").PasteSpecial (xlPasteFormats) '//※2 20 ActiveSheet.Range("A5").Value = "test" 21 22End Sub
###試したこと
以下の環境で動作の確認を行いました。
1.Excel2016にて、Sheet1をアクティブにした状態でマクロを直接実行(Alt+F8など)
→A1セルの文字列=Sheet1、A2~A5セルの文字列=Sheet3 に表示される
2.Excel2016にて、Sheet1にボタンを作成し、ボタン経由でマクロを実行
→A1セルの文字列=Sheet1、A2~A4セルの文字列=Sheet3、A5セルの文字列=Sheet2 に表示される
3.Excel2016にて、2.と同様にボタン経由でマクロを実行し、ソースコードの※2の行で一旦breakした後そのまま再開
→A1セルの文字列=Sheet1、A2~A5セルの文字列=Sheet3 に表示される
4.Excel2010にて、2.の手順を実行
→A1セルの文字列=Sheet1、A2~A5セルの文字列=Sheet3 に表示される
5.Excel2016にて、ソースコードの※1の部分にコピペモードの解除処理を追加し、2.の手順を実行
→A1セルの文字列=Sheet1、A2~A5セルの文字列=Sheet3 に表示される
(追加したコード:「Application.CutCopyMode = False」)
上記の実験から、※2でペーストを行う際に条件によりアクティブシートが移動することがあるようなのですが、一旦breakすると現象が発生しないことからも条件がよくわからない状態となっています。
この現象についてご存じの方がいらっしゃいましたら、ご教示いただければと存じます。
宜しくお願いいたします。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/31 00:59