Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 8.1 : Excel 2013)
画面のちらつき防止
投稿日時: 21/03/24 08:11:03
投稿者: 山下 弘
メールを送信

前回 画面のちらつき防止について教えて頂いたのですが
コピー & ペーストはうまくいったのですが
新しいブックを開くときにちらつきます
これを防ぐ方法を教えて下さい
 
コードは 下記です
 
Application.ScreenUpdating = False
    Workbooks.Open ActiveWorkbook.Path & "\Y1.xlsm"
    Workbooks("Yoyaku.xlsm").Activate
    Workbooks("Y1.xlsm").Activate
    Set BookY1 = Workbooks("Y1.xlsm")
    Set BookYoyaku = Workbooks("Yoyaku.xlsm")
     
    With BookYoyaku
       For n = 1 To 31
        .Worksheets("D1").Range("A31:U50").Copy _
            Destination:=BookY1.Worksheets(n).Range("A31:U50")
        Next n
    End With
    Workbooks("Y1.xlsm").Close True

回答
投稿日時: 21/03/24 08:37:57
投稿者: simple

こういうことでしょうか。

    Application.ScreenUpdating = False
    Set BookYoyaku = Workbooks("Yoyaku.xlsm")
    Set BookY1 = Workbooks.Open(ActiveWorkbook.Path & "\Y1.xlsm")
    With BookYoyaku
        For n = 1 To 31
            .Worksheets("D1").Range("A31:U50").Copy _
                    Destination:=BookY1.Worksheets(n).Range("A31:U50")
        Next n
    End With
    BookY1.Close True
    Application.ScreenUpdating = True
(変数宣言は提示に従い省略しています。動作確認はしていません。)

投稿日時: 21/03/24 11:12:57
投稿者: 山下 弘
メールを送信

早速 回答ありがとうございます
至急 試してみます
ありがとうございました

投稿日時: 21/03/24 12:13:43
投稿者: 山下 弘
メールを送信

教えて頂いたようにしましたが
ファイルは開きます
どうしたらよいのでしょうか
よろしくお願いいたします
 
 Workbooks("Yoyaku.xlsm").Activate
    Set BookY1 = Workbooks.Open(ActiveWorkbook.Path & "\Y1.xlsm")
    Set BookYoyaku = Workbooks("Yoyaku.xlsm")
     
    With BookYoyaku
       For n = 1 To 31
        .Worksheets("D1").Range("A31:U50").Copy _
            Destination:=BookY1.Worksheets(n).Range("A31:U50")
        Next n
    End With

回答
投稿日時: 21/03/24 13:25:05
投稿者: simple

>教えて頂いたようにしましたが
あれ、そうでしたか?

Workbooks("Yoyaku.xlsm").Activate
というコードは私は書いていませんが?
アクティブにしたり、とかはチラツキの元だから、
使わないようにしましょう
、という流れで来ているはずなんですがねえ。
癖になってしまっているのでしょうか。
 
引用:
ファイルは開きます
どうしたらよいのでしょうか
いえいえ、それは私は知りませんよ。
あなたの頭の中までは見えません。
あなたの例示をそのまま書いただけなんで、
あなたがしたいことを実行していただかないと、前には進みません。
 
意図したことが実行されないのであれば、
とりあえず、Sub ○○() 〜 End Subまで、
変数宣言なども省略せずに提示されたらどうでしょう。
そのうえで、想定はこうだが、実際は、こんなことになってしまう、
という話をして下さい。
 
皆さんからもコメントがあるはずです。
(私はこれ以上ネタがありませんので、ここで失礼します)

回答
投稿日時: 21/03/24 15:25:48
投稿者: mattuwan44

Option Explicit

Sub test()
    Dim wbkY1 As Workbook       '転記先ブック
    Dim rngCopyForm As Range    'コピー元セル範囲
    Dim ix As Long              'シートのインデックス番号
    
    'アプリケーションの画面の更新の設定を「しない」に設定する
    Application.ScreenUpdating = False
    
    '操作対象の定義
    Set wbkY1 = Workbooks.Open(ThisWorkbook.Path & "\Y1.xlsm")
    Set rngCopyForm = ThisWorkbook.Worksheets("D1").Range("A31:U50")
    
    'セルのコピー
    rngCopyForm.Copy
    
    '各シート毎に繰り返し
    For ix = 1 To 31
        '指定したシートに貼り付け
        With wbkY1.Worksheets(ix)
            .Paste Destination:=.Range(rngCopyForm.Address)
        End With
    Next
    
    '上書き保存で閉じる
    wbkY1.Close savechnges:=True
    
    'アプリケーションの画面の更新の設定を「する」に設定
    Application.ScreenUpdating = True
End Sub

 
※動作確認をしてないのでちゃんと動かないかも知れません。
 
えっと、プログラムは
Subから始まってEnd Subで終わります。
回答者側からみて、ここに提示されてない情報は、
実際には書いてあるのかないのかの判別が出来ません。
なので、できるだけ省略しない方が質問者にとって得策です。
 
ちゃんと、画面の更新を止めてから、ブックを開くようにコードで書いていても、
ブックが開いたり閉じたりする動作が、見えてしまうということでしょうか?

投稿日時: 21/03/24 16:19:45
投稿者: 山下 弘
メールを送信

ご連絡ありがとうございます
早速試してみます
本当に助かります

投稿日時: 21/03/24 16:50:42
投稿者: 山下 弘
メールを送信

ご連絡ありがとうございます
教えて頂いたテストを試してみました
プログラムは動いたのですが
画面のちらつき防止できませんでした
ご指摘いただいたコードを表示いたします
よろしくお願いいたします
 
Sub Test8() 'マスト変更 1月
    Dim BookYoyaku As Workbook
    Dim BookY1 As Workbook
    Dim n As Long 'シートのインデックス番号
     
    Set BookY1 = Workbooks.Open(ActiveWorkbook.Path & "\Y1.xlsm")
    Set BookYoyaku = Workbooks("Yoyaku.xlsm")
     
    With BookYoyaku
       For n = 1 To 31
        .Worksheets("D1").Range("A31:U50").Copy _
            Destination:=BookY1.Worksheets(n).Range("A31:U50")
        Next n
    End With
   End Sub

投稿日時: 21/03/24 17:22:32
投稿者: 山下 弘
メールを送信

こんにちは
先ほど画面がチラtクと言いましたが
下記 コードがエラーちらつきました
wbkY1.Close savechnges:=True を
 
訂正しましたら ちらつきが防止できました
失礼致しました
あらためてお礼申し上げます
ありがとうございました