[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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
質問については、提示されたようなコードであれば、最後に開いたデータ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
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
(ky) 2021/01/15(金) 16:12
msgbox Activeworkbook.name
とやると、
2つ目のブック名が表示され、
OK押下でその後に2つ目のブックがアクティブになったように見えます。
あと、
Debug.Print ActiveWindow.Caption
とやってみたところ、
名前は2つ目が取得されますが、
見た目は1つ目がアクティブになっているように見えます。
(まっつわん) 2021/01/15(金) 16:20
さて、データ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.