VBAで他のブックにコピペ | |
---|---|
[196001] VBAで他のブックにコピペ- ■親トピック/記事引用/メール受信=ON■ □投稿者/ マイマイ -(2023/10/25(23:08)) □U R L/ AというフォルダーにBとCというファイルがあります B(コピー元)はPASS設定で開くエクセルの台帳 Bのデータをコピペし、C(コピー先)のファイルにはりつけたい VBAの動作としては、Cのファイルを開くと、自動的にBのファイルが開かれCにコピぺ後、 Bの画面は保存されることなく、閉じるような流れになります。 以下2点教えてください。 ・以下のコードで修正が必要な部分と修正コード ・現状よりもVBAの動作が早くなるようなコード Private Sub Workbook_Open() 'Put your code here ' '台帳取込 Macro() ’ ’ Dim FilePath As String Dim FileName As String Dim wb As Workbook Dim OpenFlag As Boolean 'コピー元ファイルの入っているフォルダをパスを設定 FilePath = "C:\Users\user\OneDrive\デスクトップ\台帳データ" 'コピー元ファイル名を設定 FileName = "コピー元.xlsx" ’動作を早くするコマンド開始 With Application ・Caluculation = xlCalculationManual ・EnableEvents = False ・ScreenUpdating = False End With 'コピー元のブックが存在するか確認 If Dir(FilePath & "\" & FileName) = "" Then 'データが存在しないときは・・・。 MsgBox FileName & "というファイルが存在しません" & vbCrLf & _ "指定のフォルダに該当のファイルを入れて実行し直してください" Exit Sub End If '既に開いているかをチェック For Each wb In Workbooks If wb.Name = FileName Then '既に開いていたらフラグを立ててfor文を抜ける OpenFlag = True Exit For End If Next wb 'フラグがFalseだったらコピー元のファイルが開いていないので、開く If OpenFlag = False Then ’パスワードの解除をし、コピー元の台帳を開く On Error Resume Next Workbooks,Open FileName:=”C:\Users\user\OneDrive\デスクトップ\台帳データ¥コピー元.xlsx”,Password:="ic" If Err.Number=0 Then MsgBox"ブックを開けました" Else MsgBox"ブックを開けませんでした" End If End If 'コピー元の台帳のデータをコピー Workbooks(FileName).Worksheets("台帳(最新)").Range("A1:Y3600").Copy _ Workbooks(ThisWorkbook.Name).Worksheets("台帳(参照用)").Range("A1") 'コピー元のブックを閉じる(セーブしない) Workbooks(FileName).Close savechanges:=False 'コピー先に貼付した台帳データの編集(マクロの記録)のコード '<省略> ’動作を早くするコマンド終了 With Application ・Caluculation = xlCalculationAutomatic ・EnableEvents = True ・ScreenUpdating = True End With MsgBox ”データ更新・取込終了しました。別紙の入力をお願いします” End Sub この記事にはVBAのコードが含まれています。 緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他 |
[196003] Re[1]: VBAで他のブックにコピペ- ■記事引用/メール受信=OFF■ □投稿者/ ヘンリー -(2023/10/28(09:40)) □U R L/ >・以下のコードで修正が必要な部分と修正コード 現状で不具合がないなら、修正は必要ないと思います。 >・現状よりもVBAの動作が早くなるようなコード セルの値だけ取得できれば良いのなら、Excel4.0マクロを使用する。 コピー元の形状にもよりますが、ADOやODBCなどを使用して値を取得する。 その他、「コピー&ペースト」はなるべく使わずに、 「値を代入する」という考え方をするとよいと思います。 例えば、 Range("A1").Copy Range("A2").Select ActiveSheet.Paste とするのではなく、 Range("A2").Value = Range("A1").Value とする方が速いです。 この記事にはVBAのコードが含まれています。 緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他 |
このトピックに書きこむ |
---|