電子書籍の厳選無料作品が豊富!

次のプログラムですが、ブックが勝手に切り替わってしまいます。
Main, Sub 二つのブックを同時に開き、Mainのアクティブセルをコマンドボタンを押して動かすだけでSubのブックがアクティブになってしまいます。

Rem 標準モジュール
Public SubBook As Workbook
Public MainBook As Workbook

Private Sub Workbook_Open()
Set MainBook = ThisWorkbook
Dim wsh As Object
Set wsh = CreateObject("WScript.Shell")
Workbooks.Open wsh.SpecialFolders("Desktop") + "\Sub.xlsm"
Set SubBook = ActiveWorkbook
UserForm1.Show vbModeless
End Sub

Private Sub CmdA1_Click()
ActiveSheet.Range("A1").Activate
End Sub

Private Sub CmdG4_Click()
ActiveSheet.Range("G4").Activate
End Sub

Private Sub CmdMain_Click()
MainBook.Activate
End Sub

Private Sub CmdSubActivate_Click()
SubBook.Activate
End Sub

質問者からの補足コメント

  • どう思う?

    SubBook.Activate
    MainBook.Activate
    因みにこれを前置しておくと大丈夫です。
    ちゃんとMainBookだけがが動作します。

    No.2の回答に寄せられた補足コメントです。 補足日時:2023/11/16 12:23

A 回答 (2件)

No1です



>移動ボタンを押すと勝手にSubBookがアクティブになってしまい
エクセル側が、フォームを表示した際の状態をどこかに記憶しているようですね。

まぁ、表示したいブックが決まっているようですので、クリックイベントでの処理で
>ActiveSheet
のような状態依存の指定方法をせずに、表示したいブック・シートを明示すれば済む話のように思いますけれど・・・?
この回答への補足あり
    • good
    • 1
この回答へのお礼

ActiveSheetをMainBookに変えて明示するようにしたのですが、それでも移動ボタンを押す度にMain, Sub, Main, SubとBookが交互に変ります。

お礼日時:2023/11/16 11:00

こんばんは



全体像が不明なので、Public変数を用いている意図などがわかりかねますが・・

Workbooks.Openメソッドを実行すると、手操作と同様で開いたブックがActiveになります。
(これは仕様なので仕方がないですね)
元のブックをアクティブにしておきたければ、その後で
 MainBook.Activate
などを実行しておけば済むと思います。

ブックを開く間に画面がチラつくのが気になる様であれば、Subのブックは非表示の別インスタンスで開くという方法もあります。
こちらの場合は、ブックの扱いが若干面倒になりますけれど・・
    • good
    • 0
この回答へのお礼

分かりにくくてすみません。
先ずMainBook.xlsmとSubBook.xlsmの二つのファイルがあります。
そしてMainBookの方を起動するとSubBookの方も起動します。
MainBookの方にはUserForm1が有り、このフォームにはアクティブセルがA1セルへ移動するボタン、G4セルへ移動するボタン、MainBookをアクティブにするボタン、SubBookをアクティブにするボタンが付いています。(計4つのボタン)
症状:MainBookがアクティブの状態で、移動ボタンを押すと勝手にSubBookがアクティブになってしまい、次移動ボタンを押すとSubBookの方が反応しセルが移動してしまいます。
またこのときセルの周りの枠線が、MainBook、SubBookのどちらにも付いてしまいます。
エクセルのバグとしか思えないです。

お礼日時:2023/11/15 19:54

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

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


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