性格悪い人が優勝

VBAでAというExcelのbookをBというbookに1行ずつコピーする時のちらつきを無くしたいのですが、下記のようなコードだとおそらくコピー&ペーストを繰り返す時に行ったり来たりするからでしょうか画面が高速に切り替わってしまいます。

Sub test()
Dim A as Workbook
Dim B as Workbook
Dim firstLine as Long
Dim copyI as Long
Dim varFileName As Variant

Set A = Workbooks("A.csv")
Set B = Workbooks("B.xlsm")
copyI = 2
varFileName = dCsv

Workbooks.Open Filename:=varFileName

firstLine =B.Cells(Rows.count, "A").End(xlUp).Row
A.Application.ScreenUpdating = False
B.Application.ScreenUpdating = False

Do While A.Worksheets(1).Cells(copyI, 1).Value <> ""
A.Worksheets(1).Rows(copyI).Copy
B.Worksheets(1).Rows(firstLine + 1).PasteSpecial (xlPasteAll)
copyI = copyI + 1
firstLine = firstLine + 1
Loop

A.Application.ScreenUpdating = True
B.Application.ScreenUpdating = True
End Sub

どのようにすればそれを無くせるかご教示お願い致します。

A 回答 (1件)

Workbooks.Open Filename:=varFileName



firstLine =B.Cells(Rows.count, "A").End(xlUp).Row
A.Application.ScreenUpdating = False
B.Application.ScreenUpdating = False



Application.ScreenUpdating = False

Workbooks.Open Filename:=varFileName

firstLine =B.Cells(Rows.count, "A").End(xlUp).Row
'A.Application.ScreenUpdating = False Book毎にやる必要はないかと
'B.Application.ScreenUpdating = False




A.Application.ScreenUpdating = True
B.Application.ScreenUpdating = True



Application.ScreenUpdating = True
'A.Application.ScreenUpdating = True こちらも
'B.Application.ScreenUpdating = True

Bookに対して画面更新を停めると言うよりExcelアプリに対してやるのではないかな。

ただ
>Workbooks.Open Filename:=varFileName
これの存在意味が不明なのですが、これ自体がサブであってメインが別にあるのなら画面更新はメインの最初で停めて最後で戻すのかも。
    • good
    • 0
この回答へのお礼

ありがとうございます。
まず、
Workbooks.Open Filename:=varFileName
なのですがA.csvをインポートするために記述しています。
質問の際に見やすいように実際のコードをシンプルにするために書き直したのですが、上手く出来ていなかったようです、すみません。

ちらつく問題なのですが、ご教示頂きました
Application.ScreenUpdating = False

Workbooks.Open Filename:=varFileName
の上に、
Application.ScreenUpdating = True

Loopの下に記述することで解消致しました。

ありがとうございました!!

お礼日時:2020/09/17 09:42

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