プロが教えるわが家の防犯対策術!

マクロ
Sub データコピペ()
Dim expressionRng, destinationRng
Dim n
'コピー元のファイルを開く
Workbooks.Open ActiveWorkbook.Path & "\" & "FDデータ.xlsx"
Set expressionRng = Workbooks("FDデータ.xlsx").Sheets("Sheet1").Range("A1:OZ12")
Set destinationRng = ThisWorkbook.Sheets("FDデータ").Range("A1:B2")
For n = 1 To expressionRng.Rows.Count
destinationRng(n, 1).RowHeight = expressionRng(n, 1).RowHeight
Next
For n = 1 To expressionRng.Columns.Count
destinationRng(1, n).ColumnWidth = expressionRng(1, n).ColumnWidth
Next
expressionRng.Copy destinationRng
Workbooks("FDデータ.xlsx").Close
End Sub
が有ります。
このマクロはファイル名が「FDデータ.xlsx」の指定セル値を作業ブックの指定シートの指定セル値にコピー&ペースト出来ます。
しかし、希にコピー元ファイルの「FDデータ.xlsx」のセル値が
ペースト先のセルに上手くコピー&ペーストが出来ない場合が有ります。
コピー元からペースト先に確実にコピー&ペーストが出来る方法があれば教えてください。
もし、コピー範囲に問題が有る場合はコピー範囲は「A1:OZ12」となっておりますが、行は「1~12」までで
列は「OZ」では無く、列の指定無しでも構いません。
よろしくお願いいたします。

質問者からの補足コメント

  • うーん・・・

    回答ありがとうございます。
    貴者の指示通りにマクロコードを設定しましたが
    Set expressionWb = Workbooks.Open(Filename:=ActiveWorkbook.Path & "" & "FDデータ.xlsx", ReadOnly:=True)
    のコードが黄色く成りエラーが出て
    マクロが実行されませんでした。
    解決方法をお願いいたします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2023/03/12 13:55

A 回答 (1件)

このマクロでコピー元のファイル「FDデータ.xlsx」が開かれている間、他のユーザーが同じファイルにアクセスして変更する可能性があります。

これがコピー&ペーストが失敗する原因になる可能性があります。

この問題を解決するために、コピー元のファイル「FDデータ.xlsx」を開かずにデータを取得する方法があります。次のように変更することができます。

Sub データコピペ()
Dim expressionRng As Range, destinationRng As Range
Dim expressionWb As Workbook
Dim n

'コピー元のファイルを開かずにデータを取得する
Set expressionWb = Workbooks.Open(Filename:=ActiveWorkbook.Path & "" & "FDデータ.xlsx", ReadOnly:=True)
Set expressionRng = expressionWb.Sheets("Sheet1").Range("A1:OZ12")
Set destinationRng = ThisWorkbook.Sheets("FDデータ").Range("A1:B2")

'行の高さをコピーする
For n = 1 To expressionRng.Rows.Count
destinationRng(n, 1).RowHeight = expressionRng(n, 1).RowHeight
Next

'列の幅をコピーする
For n = 1 To expressionRng.Columns.Count
destinationRng(1, n).ColumnWidth = expressionRng(1, n).ColumnWidth
Next

'データをコピーする
expressionRng.Copy destinationRng

'コピー元のファイルを閉じる
expressionWb.Close SaveChanges:=False
End Sub

このバージョンのマクロでは、コピー元のファイル「FDデータ.xlsx」を読み取り専用で開き、データを直接コピーしています。ファイルが開かれている時間が短くなり、他のユーザーがファイルにアクセスして変更する可能性が低くなります。

また、ファイルを閉じるときにSaveChanges:=Falseとしているため、コピー元のファイルが変更されることはありません。必要に応じて、このオプションをTrueに変更して、変更が必要な場合にはコピー元のファイルが保存されるようにすることもできます。
この回答への補足あり
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
少し整理をして、改めて質問させて頂きます。

お礼日時:2023/03/12 14:54

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