[[20210115144218]] 『Activateされない』(ky) ページの最後に飛ぶ

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

 

『Activateされない』(ky)

VBAで異なるファイルを開いたところ、2つ目のファイルを開いても最初に開いたファイルがactiveなままで、2つ目のファイルを開いた後にactivateしても、最初に開いたファイルがactiveなままです。

昨日はちゃんと動いていたのですが、自宅PCのoffice365で作業してからおかしくなりました。
調べると、office365では「Application.ScreenUpdating = False」のせいでactivateが効かないから、ファイルopenの前にいったん「 Application.ScreenUpdating = true」にすればいい、というのを見ましたので、そのようにしましたが、ダメです。

「Workbooks(BFile.Name).Activate」の箇所でデバッグしてF8で進めると、ようやくBFileがactiveになります。

ちなみに今はexcel2019で作業しています。

原因と対処法がお分かりの方、どうかご教授ください。
よろしくお願いします。

'---------------------------------------------------
Dim AFile As Workbook, BFile As Workbook

 Application.ScreenUpdating = False

'ファイAをOpen

  Workbooks.Open Filename:="データA.xlsx"

   Set AFile = Workbooks("データA.xlsx")

'ファイルBをOpen

  Workbooks.Open Filename:= "データB.xlsx"

   Set BFile = Workbooks("データB.xlsx")

   Workbooks(BFile.Name).Activate

※ActiveWorkbook.nameはデータA.xlsxのまま

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


 >Application.ScreenUpdating = False

 これの意味解ってますか?Why
(Why) 2021/01/15(金) 15:05

 Activateの直前に
 Application.ScreenUpdating = true
 を入れても変わりませんか?
(tkit) 2021/01/15(金) 15:06

 >※ActiveWorkbook.nameはデータA.xlsxのまま

 本当?
 因みに、
 Workbooks(BFile.Name).Activate
 の後に
 msgbox Activeworkbook.name
 とかを入れて自分で確認した結果でしょうか?
(Why) 2021/01/15(金) 15:11

>office365では「Application.ScreenUpdating = False」のせいでactivateが効かない
初耳ですが、ちょっと興味があるので、差し支えなければどこで見かけた情報か教えてもらえませんか?

質問については、提示されたようなコードであれば、最後に開いたデータBがアクティブになっているようにおもうので、残念ながら私には原因は分かりません。
ただ、2番目に開いたブックがアクティブでないと困る理由は何ですか?
VBAの世界では基本的に、ブックやシート(オブジェクトと言います)を明確に記述すれば、いちいち選択したりアクティブにしたりする必要はありません。

    Sub ななしのまくろ()
        Dim AFile As Workbook, BFile As Workbook

        Set AFile = Workbooks.Open(Filename:="データA.xlsx")
        Set BFile = Workbooks.Open(Filename:="データB.xlsx")

        Debug.Print "1番目に開いたのは " & AFile.Name
        Debug.Print "2番目に開いたのは " & BFile.Name
    End Sub

(もこな2) 2021/01/15(金) 15:18


 単純に見ただけで判断していると思われ、聞いた事がある無しではないと思いますよ。
(Why) 2021/01/15(金) 15:33

皆様、ありがとうございます。

ちなみに、最初の「Application.ScreenUpdating = False」を無効にすると、2つ目の「データB.xlsx」をopenした時点でこのファイルがactiveになります。
ただ、画面表示に反映させないという作業上の条件を課せられていますので。
(ky) 2021/01/15(金) 15:39


2019です。
同様の現象を確認しました。

Sub test()

    Dim wb1 As Workbook
    Dim wb2 As Workbook

    Application.ScreenUpdating = False

    With Workbooks
        Set wb1 = .Open("A.xlsx")

        DoEvents
        DoEvents

        Set wb2 = .Open("B.xlsx")
    End With
End Sub

表示が追い付かないんですかね?

2つ目を開く前に、
DoEvents
と呪文を2回唱えると回避できそうです。(1回ではダメでした)

(まっつわん) 2021/01/15(金) 15:43


 >ただ、画面表示に反映させないという作業上の条件を課せられていますので。

1つ目に開いたブックを最小化とか非表示にする方法もありかも?
(まっつわん) 2021/01/15(金) 15:48


 だから、

 msgbox Activeworkbook.name
 とかを入れて自分で確認した結果でしょうか?
(Why) 2021/01/15(金) 15:49

投稿が表示されていないので、もう一度。

tkit様
「Application.ScreenUpdating = true」を入れても変わりません。

Why様
確認済みです。

もこな2様
excel2013についての記述のようでした。office365という文字があったので。。。
https://docs.microsoft.com/ja-jp/office/troubleshoot/excel/workbook-not-activated

まっつわん様
ありがとうございます。
試してみます。
(ky) 2021/01/15(金) 16:05


まっつわん様
ダブルのDoEventsのお陰で解決しました。
大感謝です。
皆様もありがとうございました。

(ky) 2021/01/15(金) 16:12


ちなみに、

msgbox Activeworkbook.name

とやると、

2つ目のブック名が表示され、

OK押下でその後に2つ目のブックがアクティブになったように見えます。

あと、

Debug.Print ActiveWindow.Caption

とやってみたところ、
名前は2つ目が取得されますが、
見た目は1つ目がアクティブになっているように見えます。

(まっつわん) 2021/01/15(金) 16:20


ありがとうございます。
私もDoEvevts1回は試したのですが、ダメだったのでそれは諦めてました。
(根本的な解決なのかは疑問ですが。。。)
本当に助かりました。
改めて感謝です。
ありがとうございました。
(ky) 2021/01/15(金) 17:00

情報ありがとうございました。

さて、データBがアクティブでならない理由が↓だとしたら、データAを非表示にしちゃったらどうですかね?
>画面表示に反映させないという作業上の条件

    Sub ななしのまくろ()
        Dim AFile As Workbook, BFile As Workbook

         Application.ScreenUpdating = False

        Set AFile = Workbooks.Open(Filename:="データA.xlsx")
        Set BFile = Workbooks.Open(Filename:="データB.xlsx")

        Windows(AFile.Name).Visible = False
        Application.ScreenUpdating = True

    End Sub

画面更新抑制中に行われれば、気づかれないと思いますが如何でしょうか?

(もこな2) 2021/01/16(土) 12:27


コメント返信:

[ 一覧(最新更新順) ]


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