[[20210531191339]] 『別シートのマクロ実行』(すにゃ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『別シートのマクロ実行』(すにゃ)

    Dim SetFile As String
    Dim wbMoto, wbSaki As Workbook

    Set wbMoto = ActiveWorkbook

    Application.DisplayAlerts = False

    SetFile = ThisWorkbook.Path & "\〜条件表マスタ.xlsm"

    'Workbooks.Open fileName:=SetFile, ReadOnly:=True, UpdateLinks:=0
    Set wbSaki = Workbooks.Open(SetFile)

        wbSaki.Worksheets("条件表M").Range("A1:J101").Copy

        wbMoto.Worksheets("条件表").Range("A1").PasteSpecial xlPasteFormulasAndNumberFormats

        'Application.CutCopyMode = False

        wbSaki.Close False

    Application.DisplayAlerts = True

+--------------------------------------+

シートAにボタンを作りマクロ指定→実行
マクロが実行されシートBに遷移してしまう

シートAから遷移しないで実行させたい

VBAはもともとそのような仕様になっていないのでしょうか
よろしくお願いします

< 使用 Excel:Office365、使用 OS:Windows10 >


>シートBに遷移してしまう
もうすこし詳しく説明下さい。

(γ) 2021/05/31(月) 19:26


質問とは関係ないですが、↓を参考にされたのでしょうか?
同じ失敗というか、勘違いをされているのが気になります。
[[20210301134135]] 『実行時エラー1004の原因』(sugar) 

(もこな2 ) 2021/05/31(月) 19:34


シートA上で入力作業している中でシートBで反映するマクロを実行させる(ボタンを押す)とシートBに表示が移動してしまうのです
シートBでの結果は最終的にシートAの方にリンクさせてるのでいちいちシートBに移動させられると調子悪く困ってました
(すにゃ) 2021/05/31(月) 19:38

ブックを開くと、基本的にはそちらがアクティブになるのは仕様です。
ただ、提示されたコードでは、処理後に開いたブックを閉じていますから、普通にActive(だった)bookのアクティブシートに戻るようにおもいます。

シートA、シートBがどのブックにあるかわかりませんが、ステップ実行してみて想定外の動作になっていないか確認されてみてはいかがですか?

(もこな2 ) 2021/05/31(月) 20:03


>シートA上で入力作業している中でシートBで反映するマクロを実行させる(ボタンを押す)と
>シートBに表示が移動してしまうのです
提示されたコードとの関係では、どういう説明になるんですか?
AとかBじゃなく、コードで使われているシート名で説明してください。
(γ) 2021/05/31(月) 20:14

もこなさん
同一ブック内での処理になります

Sheet条件表MがあるBookA
Sheet条件表とSheet作業表があるBookB

Sheet条件表はマクロでSheet条件表Mのデータを参照(Z)
Sheet作業表がアクティブの時にZを実行すると参照した後Sheet条件表になってしまう(Sheetが切り替わってしまう)
バックグラウンド処理?の書き方がわからないです
(すにや) 2021/05/31(月) 20:51


>wbMoto.Worksheets("条件表").Range("A1").PasteSpecial xlPasteFormulasAndNumberFormats
が実行されても、Worksheets("条件表")はアクティブにはならないはずですよ。
本当ですか?

(γ) 2021/05/31(月) 21:01


出来れば、ほかの回答者さんが遠慮されてもいけませんので名指しはご遠慮ください。

さて、「2021/05/31(月) 20:51」のお話がイマイチ理解できません。
>Sheet条件表はマクロでSheet条件表Mのデータを参照(Z)
Zというのが提示されたマクロだとすれば、

●Sheet条件表とSheet作業表がある【BookB】

 Set wbMoto = ActiveWorkbook
 wbMoto.Worksheets("条件表")

●Sheet条件表Mがある【BookA】
Set wbSaki = Workbooks.Open(SetFile)
wbSaki.Worksheets("条件表M")

という関係性でしょうから、コメントしたように普通であれば「wbSaki.Close」の段階で、Activeだった【BookB】のアクティブシート【Sheet作業表】に戻るようにおもいます。

よって他に説明していないコードがあるのではありませんか?
繰り返しになりますが、ステップ実行してみて想定外の動作になっていないか(例えばイベントなどが動いてないか)確認されてみてはいかがですか?

このほか、ガン無視されちゃいましたが、提示のコードはこの掲示板で何度かお見掛けしています。
参考にされたのであれば、そちらのコメントにもあるように無駄な記述があります。
(コメントアウトされていますけど、そもそもいらない処理です)

また、もしも同じ方であればニックネームをコロコロ変えるのはお勧めしません。
(同じ説明を何度もしてもされてもお互いにつまらないでしょう。)

(もこな2) 2021/06/01(火) 00:07


こちらの環境(Excel2016,Windows10)ではお示しのコードで質問者さんと同様の状況を確認できました。
回避方法としては、PasteSpecialの前にwbMoto.ActivateとしてwbMotoブックをアクティブにしておくことで
条件表シートがアクティブになることを回避できました。
質問者さんの環境で同一の方法でできるか、またはもっと良い方法があるかもわかりませんが、いちおう報告です。
(めざめるパワー) 2021/06/01(火) 09:00

>質問者さんと同様の状況を確認できました。
検証ありがとうございました。私は実際には試さなかったので、もしかしたらそういう仕様なのかもですね。

それなら、対処療法的な発想になりますが、マクロ起動直後のアクティブセルを覚えておき、処理がおわったらそこに戻るというのはどうでしょうか?

    Sub 名もなきマクロ()
        Dim tmp As Range: Set tmp = ActiveCell '★追加
        Dim SetFile As String
        Dim wbMoto As Workbook, wbSaki As Workbook
        Set wbMoto = ActiveWorkbook

        Application.DisplayAlerts = False
        SetFile = ThisWorkbook.Path & "\〜条件表マスタ.xlsm"

        Set wbSaki = Workbooks.Open(SetFile)
        wbSaki.Worksheets("条件表M").Range("A1:J101").Copy
        wbMoto.Worksheets("条件表").Range("A1").PasteSpecial Paste:=xlPasteFormulasAndNumberFormats
        wbSaki.Close False

        Application.Goto tmp '★追加

        Application.DisplayAlerts = True
    End Sub

(もこな2) 2021/06/01(火) 12:24


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.