• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCEL VBA コピー貼り付け時のチェック)

Excel VBA コピー貼り付け時のチェック

このQ&Aのポイント
  • VBAを使用して、Excelの特定のシートの範囲をコピーし、別のブックに貼り付けたいが、他のユーザーがそのブックを開いている場合は貼り付け処理を中止する方法について教えてください。
  • Excel VBAを使って、特定のシートの範囲をコピーして別のブックに貼り付けたいが、他のユーザーがそのブックを開いている場合は貼り付け処理を中止したいです。方法を教えてください。
  • ExcelのVBAで、特定のシートの範囲をコピーして別のブックに貼り付ける方法について教えてください。ただし、他のユーザーがそのブックを開いている場合は貼り付け処理を中止したいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

「VBAの練習」との事なので、No1にてご質問のチェック方法のみの記述としましたが、コピー貼付の部分も含めた回答を補足として上げさせていただきます。 不要であれば以下は無視してください。 今回のコードは、コピー元となるAブックにVBAコードを記述する場合となります。 (Aブックがほかに有る場合はAブックを開く処理を加える必要が有ります) >[シート1]という名称の単にシートに貼り付けしたいのです。 どのセルに張り付けるのか記載されていないため、 同じセル(基点をA1セルとして)貼り付けています。 不明な点がありましたら補足願います。 参考まで。 ■VBAコード Sub Sample()   'ダイアログ表示を無効化   Application.DisplayAlerts = False   'Bブックのファイルを開く(利用可能時の通知非表示)   Workbooks.Open Filename:="C:\Users\田中\Desktop\B.xls", Notify:=False   'ダイアログ表示を有効化   Application.DisplayAlerts = True   '読み取り専用で開いているかチェック   If ActiveWorkbook.ReadOnly Then   '▼読み取り専用の場合に実行     '誰かが開いている場合、メッセージを表示     MsgBox "読み取り専用のため中止します"     '開いたBブックを閉じる     ActiveWorkbook.Close   Else   '▼読み取り専用でない場合に実行     'このマクロコードが記述されているAブックの選択中のシートのA1:L20をコピーし、     'Bブックのシート1のセルA1を基点にして貼り付ける     ThisWorkbook.ActiveSheet.Range("A1:L20").Copy Worksheets("シート1").Range("A1")     'Bブックを上書き保存(不要であれば削除)     ActiveWorkbook.Save     'Bブックを閉じる(不要であれば削除)     ActiveWorkbook.Close   End If End Sub

その他の回答 (1)

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

1つのファイルを共有して開いた場合は、あとから開いた方が読み取り専用で開かれます。 ワークブックオブジェクトのReadOnlyプロパティの値で読み取り専用であるかが判断可能です。これを利用すれば、そのファイルがほかのユーザーが既に開いているか判断することが出来ます。 末尾に「★」を付けている箇所でBブックのパスを指定してください。 また同一行の「Notify:=False」にて、ファイルが使用可能になった際の通知を無効化しています。 この場合、開く際に誰かが開いていると確認のダイアログが表示されてしまうため、 前後に「Application.DisplayAlerts = False/True」でダイアログを無効化しています。 誰かが開いていた場合は、メッセージを表示した後に読み取り専用で開いたブックを閉じる処理にしています。 「'ここにAブックからBブックへのコピー処理を記述」の箇所へ、コピーする処理を記述してください。 ■VBAコード Sub Sample()   Application.DisplayAlerts = False   Workbooks.Open Filename:="Bブックのファイルパス", Notify:=False '★   Application.DisplayAlerts = True   If ActiveWorkbook.ReadOnly Then     MsgBox "読み取り専用のため中止します"     ActiveWorkbook.Close   Else     'ここにAブックからBブックへのコピー処理を記述   End If End Sub

yakkun2338
質問者

お礼

eden3616 さん、早速のご連絡ありがとうございます! ご教授いただきましたロジックで完璧に出来ました!! すごいです! このたびは本当にありがとうございました!!

関連するQ&A

専門家に質問してみよう