- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
19#
發表於 2017-7-30 07:51
| 只看該作者
本帖最後由 GBKEE 於 2017-7-30 07:53 編輯
回復 18# PJChen
有夠清楚的,提問就是要這樣
試試看- Option Explicit
- Dim 目的檔 As Workbook, 來源檔 As Workbook
- Sub Copy_All()
- Dim RngAr(), Rng As Range, M As Variant, xM As Long, E As Integer, Msg As String
- With ThisWorkbook.Sheets("VBA指令")
- RngAr = .Range("G2", .Range("G2").End(xlDown)).Resize(, 3).Value '準則範圍置於陣列變數中
- End With
- File_settings 目的檔, "ERP_Data.XLSX"
- '**** 比對準則 的迴圈 **************
- For E = 1 To UBound(RngAr)
- File_settings 來源檔, RngAr(E, 1) & ""
- M = Application.Match(RngAr(E, 2), 來源檔.Sheets(1).Range("b:b"), 0)
- If IsNumeric(M) Then
- With 來源檔.Sheets(1)
- xM = .Range("b" & M).End(xlDown).Row
- Set Rng = .Range("b" & M, .Range("b" & xM)).Resize(, Range(RngAr(E, 3)).Columns.Count)
- Rng.copy
- End With
- With 目的檔.Sheets(Mid(RngAr(E, 1), 1, 2))
- M = Application.Match(RngAr(E, 2), .Range("c:c"), 0)
- If IsNumeric(M) Then
- '***貼上後範圍,會自動的反白,不須有程式碼做反白***
- .Range("c" & M).PasteSpecial xlPasteValues
- xM = .Range("c" & M).End(xlDown).Row '貼上後這工作表的最後一列號
- M = M + Rng.Rows.Count - 1 '準則列號+複製範圍的列數 - 1
- If xM > M Then .Range("a" & M + 1, .Range("a" & xM)).EntireRow.Delete
- Else
- '***貼上後範圍,會自動的反白,不須有程式碼做反白***
- .Range("c1").End(xlDown).Offset(1).PasteSpecial xlPasteValues
- End If
- End With
- Application.CutCopyMode = False
- Msg = Msg & vbLf & Mid(RngAr(E, 1), 1, 2) & vbTab & RngAr(E, 2) & vbTab & "更新完成!"
- Else
- Msg = Msg & vbLf & Mid(RngAr(E, 1), 1, 2) & vbTab & RngAr(E, 2) & vbTab & "不用更新!"
- End If
- 來源檔.Close False
- Next
- 目的檔.Save '**目的檔存檔
- MsgBox IIf(Msg = "", "沒有任何 指定訂單 更新", Mid(Msg, 2))
- End Sub
- '**********來源檔是同VBA報表指令的資料夾\FromERP\*********
- Sub File_settings(xFile As Workbook, 工作頁 As String) '檔案設定
- Dim xPath As String
- xPath = ThisWorkbook.Path & "\"
- If UCase(工作頁) <> UCase("ERP_Data.XLSX") Then xPath = xPath & "FromERP\"
- On Error Resume Next
- Set xFile = Workbooks(工作頁)
- If Err > 0 Then Set xFile = Workbooks.Open(xPath & 工作頁)
- If xFile.Name = "" Then
- MsgBox "請查看 " & vbLf & xPath & vbLf & "是否有 [" & 工作頁 & "]"
- End
- End If
- End Sub
複製代碼 |
|