返回列表 上一主題 發帖

[發問] VBA 複製data問題(跨Sheet)

  1. Sub TEST()
  2. Dim Arr, Brr(1 To 2, 1 To 39), i&, j%, xE As Range
  3. Arr = [A4:J15]
  4. Brr(1, 1) = Split([G2], "-")(0) & "-FQC3"
  5. Brr(2, 1) = Split([G2], "-")(0) & "-FQC2"
  6. Brr(1, 2) = Year([C1]): Brr(2, 2) = Year([C1])
  7. Brr(1, 3) = [C1]: Brr(2, 3) = [C1]
  8. Brr(1, 4) = [L4]: Brr(2, 4) = [L4]
  9. For i = 0 To UBound(Arr) - 1
  10.     If Arr(i + 1, 1) <> "M1" Then
  11.        For j = 5 To 7: Brr(1, i * 3 + j) = Arr(i + 1, j + 1): Next j
  12.        For j = 5 To 6: Brr(2, i * 3 + j) = Arr(i + 1, j + 4): Next j
  13.     Else
  14.        For j = 5 To 6: Brr(1, i * 3 + j) = Arr(i + 1, j + 1): Next j
  15.     End If
  16. Next i
  17. Set xE = Workbooks("FQC").Sheets("input").[A65536].End(xlUp)(2)
  18. If xE.Row < 6 Then Set xE = xE(2)
  19. xE.Resize(2, 39) = Brr
  20. End Sub
複製代碼

TOP

回復 4# dea172


Dim xB As Workbook
On Error Resume Next '以下三行可以檢查FQC是否開啟中
Set xB = Workbooks("FQC")
On Error GoTo 0

If xB Is Nothing Then Set xB = Workbooks.Open(ThisWorkbook.Path & "\FQC.xls") '若未開啟,執行開啟檔案(避免重覆開啟而當機)
Set xE = xB.Sheets("input").[A65536].End(xlUp)(2)
If xE.Row < 6 Then Set xE = xE(2)
xE.Resize(2, 39) = Brr
xB.Close 1  '關閉FQC, 並存檔

TOP

回復 7# dea172
  1. Private Sub CommandButton2_Click()
  2. Dim Arr, Brr, i&, j%, xE As Range
  3. Arr = [A3:J17]
  4. ReDim Brr(1 To 2, 1 To [A:AV].Columns.Count)
  5. Brr(1, 1) = Split([G1], "-")(0) & "-FQC3"
  6. Brr(2, 1) = Split([G1], "-")(0) & "-FQC2"
  7. Brr(1, 2) = Year([C1]): Brr(2, 2) = Year([C1])
  8. Brr(1, 3) = [C1]: Brr(2, 3) = [C1]
  9. Brr(1, 4) = [E1]: Brr(2, 4) = [L2]
  10. For i = 0 To UBound(Arr) - 1
  11.     If i >= UBound(Arr) - 2 Then '最後兩筆(L/M)
  12.        For j = 5 To 6: Brr(1, i * 3 + j) = Arr(i + 1, j + 1): Next j '只抓前2格
  13.     Else
  14.        For j = 5 To 7: Brr(1, i * 3 + j) = Arr(i + 1, j + 1): Next j '抓前3格
  15.        For j = 5 To 6: Brr(2, i * 3 + j) = Arr(i + 1, j + 4): Next j '抓後2格
  16.     End If
  17. Next i

  18. Dim xN$, xB As Workbook, xS As Worksheet, xF As Range
  19. xN = "L-15-3-2018-FQC.xls"
  20. On Error Resume Next '以下三行可以檢查FQC是否開啟中
  21. Set xB = Workbooks(xN)
  22. If xB Is Nothing Then Set xB = Workbooks.Open(ThisWorkbook.Path & "\" & xN) '若未開啟,執行開啟檔案
  23. On Error GoTo 0
  24. If xB Is Nothing Then MsgBox "找不到〔" & xN & "〕檔案": Exit Sub

  25. Set xS = xB.Sheets("輸入表")
  26. Set xF = xS.[A:A].Find(Split(Brr(1, 1), "-")(0), Lookat:=xlPart)
  27. If Not xF Is Nothing Then MsgBox "批號重覆": xB.Close 0: Exit Sub
  28. Set xE = xS.[A65536].End(xlUp)(2)
  29. If xE.Row < 6 Then Set xE = xE(2)
  30. xE.Resize(2, UBound(Brr, 2)) = Brr
  31. xB.Close 1  '關閉FQC, 並存檔
  32. End Sub
複製代碼
L-15-3-2018-IPQC.rar (75.84 KB)

TOP

回復 9# dea172

問題描述不清,本來只有一對一檔案,現變成三個,難以下手!!!
1.每個IPQC是否各對應一個FQC? 且檔案名稱前綴相同?
  例如:L-26P-2018-IPQC 對應 L-26P-2018-FQC,相同為"L-26P-2018"
2.IPQC的A欄項目數量是〔固定〕的? 且必與FQC相對應?
3.抓5格或抓2格的規則是什麼?
  或者,可利用IPQC的K欄,抓5筆的輸入5,抓2筆的輸入2,就用這來判斷抓幾格

TOP

回復 9# dea172


2.IPQC 檔案 H欄位有五個數值, FQC 只抓取前兩個數值(參閲檔案L-15-3)
圖片看是M欄位???
是否用"M"來判斷取2格???  還是[最後一筆]取2格???

2.IPQC 檔案 P/M欄位有五個數值, FQC 各抓取前兩個數值(參閲檔案L-26P)
是否用"P"或"M"判斷取2格???  或是[最後2筆]取2格???

然後, FQC檔案名稱不是固定的, 無法寫死在程式裡(不然每次都要手改)???

TOP

本帖最後由 准提部林 於 2018-4-19 16:10 編輯

回復 15# dea172


IPQC-FQC.rar (167 KB)


這個FQC檔名自動與IPQC匹配:
IPQC-FQC-2.rar (168.17 KB)

TOP

回復 17# dea172

For i = 0 To UBound(Arr) - 1
    If Arr(i + 1, 1) = "P" Then
       '這裡空白即可(不做任何動作)
    ElseIf Arr(i + 1, 1) = "M" Then
       For j = 5 To 6: Brr(1, i * 3 + j) = Arr(i + 1, j + 1): Next j '只抓前2格
     Else
       For j = 5 To 7: Brr(1, i * 3 + j) = Arr(i + 1, j + 1): Next j '抓前3格
           For j = 5 To 6: Brr(2, i * 3 + j) = Arr(i + 1, j + 4): Next j '抓後2格
    End If
Next i

TOP

本帖最後由 准提部林 於 2018-4-19 16:45 編輯

回復 17# dea172

若是要排除多個:
If InStr("-A2-H-P-", "-" & Trim(Arr(i + 1, 1)) & "-") Then

A2,H,P 都不錄入

因為檔案中A2後多了一個空格, 須用Trim清除

記住:這個排除要放在IF條件的第一個,其它再用ELSEIF接其它條件

TOP

為了防呆,在程式碼的前端再加這三行:
If IsDate([C1]) = False Then MsgBox "日期格式錯誤或未輸入!!": Exit Sub
If [E1] = "" Then MsgBox "Machine No 未輸入!!": Exit Sub
If [G1] Like "########-####" = False Then MsgBox "Lot No 錯誤或未輸入!!": Exit Sub

TOP

回復 21# dea172


不是欄位都是固定的???
實在沒時間再去修改程式,
等其他版主來幫忙吧!

TOP

        靜思自在 : 人生不一定球球是好球,但是有歷練的強打者,隨時都可以揮棒。
返回列表 上一主題