返回列表 上一主題 發帖

請問規則02F - 04F 如果在Data Base 篩選在這個範圍内的相關資料

本帖最後由 198188 於 2025-10-30 17:12 編輯
回復  198188


Frame per Dwg 的分佈圖號 是 Layout Dwg  的分佈圖號帶出來的,怎麼可能後者出現,前者不 ...
Andy2483 發表於 2025-10-30 16:36



可能之前溝通有誤解:

本檔Frame per Dwg 表 的規則正確
根據本檔Layout Dwg 的分佈圖,帶出 本檔 Frame per Dwg表内一樣的分佈圖資料

本檔 Part List 表的 規則是有2條:
1. 根據本檔Layout Dwg 的分佈圖 欄 A,而沒有出現在本檔 Frame per Dwg表内,帶出 Data Base 檔 Part List表内一樣的分佈圖資料
1.1 如果最後一個字是小寫英文,就先去除再對比Data Base檔 Part List表的分佈圖資料
1.2 Qty 計算一樣

2. 根據本檔Frame per Dwg 的 組裝圖 欄B ,
2.1 本檔Frame per Dwg 的組裝圖號 含有 本檔WO No F-K欄的字母
2.2 帶出 Data Base 檔 Part List表内一樣的分佈圖資料
2.3 Qty 計算一樣

原理如下,
分佈圖包含兩種:
1. 單純零件,不需要組裝,這些是給工地使用
1.1 Layout Dwg 表是用來 透過分佈圖號 帶出一些 分佈圖號的零件 (這個是不需要組裝的零件)

2. 用組裝成為成品的零件,這些是給工廠來組裝用
2.1  Frame per Dwg 表是用來 透過組裝圖號 帶出一些 組裝圖號的零件 (這個是用來組裝用的零件)

TOP

回復  198188


1.工地用的篩選綠色,工廠用的篩黃色,這樣可以在同一表裡區別

2.增加一個工地用的工 ...
Andy2483 發表於 2025-10-30 17:40



1.工地用的篩選綠色,工廠用的篩黃色,這樣可以在同一表裡區別

之前綠色就是工地用,不過沒有完全篩除在Frame per Dwg 存在的分佈圖號

我試過幾個不同的樓層模式,發現下面這個情況:
02F-08F 這個模式好像有篩查出來,
VMU, PMU, LMI&SMI, LMI 這個模式就沒有篩查出來。

TOP

Data base裡List表有哪一個欄位區別 工地用或 工廠用嗎?
Andy2483 發表於 2025-10-30 17:59



那些是製表時才需要,備註欄會標注不同符號。
現在part list 是導出所有需要的零件,然後再透過本檔Part list表 備註欄和本檔Rule表來分配,以不同零件大類,分為
工地用/工廠用。

TOP

本帖最後由 198188 於 2025-10-30 20:24 編輯
回復  198188
用99樓的程式碼修改一下
   T = Brr(i, 8) :T1 = Brr(i, 7)
    If (Z(T) > 0 Or Z(Q) > ...
Andy2483 發表於 2025-10-30 20:04



  這個修改是否已經解決下面的問題


本檔 Part List 表的 規則是有2條:
1. 根據本檔Layout Dwg 的分佈圖 欄 A,而沒有出現在本檔 Frame per Dwg表内,帶出 Data Base 檔 Part List表内一樣的分佈圖資料
1.1 如果最後一個字是小寫英文,就先去除再對比Data Base檔 Part List表的分佈圖資料
1.2 Qty 計算一樣

2. 根據本檔Frame per Dwg 的 組裝圖 欄B ,
2.1 本檔Frame per Dwg 的組裝圖號 含有 本檔WO No F-K欄的字母
2.2 帶出 Data Base 檔 Part List表内一樣的分佈圖資料
2.3 Qty 計算一樣

TOP

本帖最後由 198188 於 2025-10-30 21:09 編輯
回復  198188

加改這段
Brr = Range(Brr, Brr.Offset(, 1))
For i = 2 To UBound(Brr)
   If Z(Brr ...
Andy2483 發表於 2025-10-30 20:40



這段修改是針對FRAME PER DWG表導出的內容嗎? 之前 FRAME PER DWG 表導出內容沒問題的。
應該是針對PART LIST表需要導出的內容。是Part list 表的資料不正確。
應該在下面的程式加一句紅色的過濾規則

For i = UBound(Brr) To 2 Step -1
   T = Brr(i, 8)
     如果本檔Layout Dwg分佈圖號沒在本檔Frame per Dwg表出現,then
   If T Like "*[a-z]" Then
   '↑1.若T變數尾部是英文小寫
      Q = Left(T, Len(T) - 1)
      '↑就令Q變數是 T變數去掉尾部小寫英文後的字串
      Else
      'Q = "||"
      '↑否則就令Q變數是 "||",
      '如果沒有這行 Q = "||" !!,下一筆會殘留 尾部是英文小寫的數量
   End If
   If Z(T) > 0 Or Z(Q) > 0 Then
      If Z(T) <> 0 And Z(Q) > 0 Then
         MsgBox "Z(Q)有殘留!"
      End If
      N = N + 1
      For j = 1 To 13: Arr(N, j) = Brr(i, j): Next
      Arr(N, 14) = Arr(N, 3) & " x " & (Z(T) + Z(Q))
      Arr(N, 3) = Arr(N, 3) * (Z(T) + Z(Q))
   End If

TOP

  1. Sub Data()
  2. Dim Arr, Brr, Crr, Z, Q, S, i&, j%, N&, T$, T1$, MyPath$, xFile$, xBook As Workbook, Re, R&
  3. Application.ScreenUpdating = False
  4. For Each S In [{"Layout Dwg","Frame per Dwg","Part List"}]
  5.    Sheets(S).UsedRange.Rows.Offset(1).EntireRow.Delete
  6. Next
  7. MyPath = ThisWorkbook.Path & "\"
  8. xFile = "Data Base1.xlsx"
  9. On Error Resume Next
  10. Set xBook = Workbooks(xFile)
  11. If xBook Is Nothing Then
  12.    Set xBook = Workbooks.Open(MyPath & xFile, , True, , "")
  13.    Re = True: ThisWorkbook.Activate
  14. End If
  15. On Error GoTo 0
  16. Set Z = CreateObject("Scripting.Dictionary")
  17. T = Sheets("Read").[A2] & "|" & Sheets("Read").[C2]
  18. T1 = Sheets("Read").[B2]
  19. With xBook.Sheets("WO No")
  20.    For i = 2 To .[A65536].End(3).Row
  21.       If .Cells(i, "B") & "|" & .Cells(i, "D") = T Then
  22.          .Rows(i).Copy Sheets("WO No").Rows(2)
  23.          For j = 6 To 11
  24.             Z("|" & .Cells(i, j)) = ""
  25.          Next
  26.          Sheets("Read").[A2].Resize(, 3).Copy Sheets("WO No").[B2]
  27.          GoTo 11
  28.       End If
  29.    Next
  30.    MsgBox "Nothing": Exit Sub
  31. End With
  32. 11
  33. If T1 Like "##F-*##F" Then
  34.    For i = Val(T1) To Val(StrReverse(Mid(StrReverse(T1), 2, 2)))
  35.       Z(Format(i, "00F")) = ""
  36.    Next
  37.    Else
  38.       Q = Split(T1 & "&" & T1, "&")
  39.       For i = 0 To UBound(Q)
  40.          Z(Q(i)) = 0
  41.       Next
  42. End If
  43. Brr = xBook.Sheets("Layout Dwg").UsedRange
  44. For i = 2 To UBound(Brr)
  45.    If Z.Exists(Brr(i, 2)) And Brr(i, 4) = Sheets("Read").[A2] Then
  46.       Z(Brr(i, 1)) = Z(Brr(i, 1)) + Val(Brr(i, 3))
  47.       N = N + 1
  48.       For j = 1 To 4: Brr(N, j) = Brr(i, j): Next
  49.    End If
  50. Next
  51. If N > 0 Then Sheets("Layout Dwg").[A2].Resize(N, 4) = Brr: N = 0 Else MsgBox "Nothing under the floor": GoTo 12
  52. Set Brr = xBook.Sheets("Frame per Dwg").UsedRange
  53. Brr = Range(Brr, Brr.Offset(, 1))
  54. For i = 2 To UBound(Brr)
  55.    If Z(Brr(i, 1)) > 0 Then
  56.       N = N + 1
  57.       For j = 1 To 6: Brr(N, j) = Brr(i, j): Next
  58.       Brr(N, 7) = Brr(N, 5) & " x " & Z(Brr(i, 1))
  59.       Brr(N, 5) = Brr(N, 5) * Z(Brr(i, 1))
  60.       Z(Brr(i, 2) & "/") = Z(Brr(i, 2) & "/") + Brr(N, 5)
  61.    End If
  62. Next
  63. For i = 1 To N
  64.    Brr(i, 1) = i
  65. Next
  66. Sheets("Frame per Dwg").[A1] = " No "
  67. If N > 0 Then Sheets("Frame per Dwg").[A2].Resize(N, 7) = Brr: N = 0 Else MsgBox "Frame per Dwg_Nothing"
  68. Brr = xBook.Sheets("Part List").UsedRange
  69. ReDim Arr(1 To 100000, 1 To 14): Crr = Arr
  70. For i = 2 To UBound(Brr)
  71.    T = Brr(i, 8): T1 = Brr(i, 7)
  72.     If (Z(T) > 0 Or Z(Q) > 0) And InStr("YO", T1) > 0 Then
  73.       N = N + 1
  74.       For j = 1 To 13: Arr(N, j) = Brr(i, j): Next
  75.       Arr(N, 14) = Arr(N, 3) & " x " & (Z(T) + Z(Q))
  76.       Arr(N, 3) = Arr(N, 3) * (Z(T) + Z(Q))
  77.    End If
  78.    If Z(T & "/") > 0 And Z.Exists("|" & Left(T, 2)) And InStr("YO", T1) = 0 Then
  79.       R = R + 1
  80.       For j = 1 To 13: Crr(R, j) = Brr(i, j): Next
  81.       Crr(R, 14) = Crr(R, 3) & " x " & Z(T & "/")
  82.       Crr(R, 3) = Crr(R, 3) * Z(T & "/")
  83.    End If
  84. Next
  85. If N > 0 Then
  86.    With Sheets("Part List").[A2].Resize(N, 14)
  87.       .Value = Arr
  88.       .Interior.ColorIndex = 35
  89.    End With
  90. End If
  91. If R > 0 Then
  92.    With Sheets("Part List").Cells(N + 2, 1).Resize(R, 14)
  93.       .Value = Crr
  94.       .Interior.ColorIndex = 36
  95.    End With
  96. End If
  97. If N + R = 0 Then MsgBox "Part List_Nothing"
  98. 12: If Re = True Then xBook.Close 0
  99. End Sub
複製代碼
回復  198188


   
1.這程式碼已經亂掉了,全部都刪除
2.複製99 樓的程式碼貼進去
3.用116樓的程式 ...
Andy2483 發表於 2025-10-30 22:26




前輩,換了之後,執行出現這個問題。

TOP

回復  198188


    會不會是系統語言不同造成的差異,請試試以下 代碼

Sub Data()
Dim Arr, Brr, C ...
Andy2483 發表於 2025-10-30 10:53


前輩,可否直接在這個程式加一個條件,篩查 將沒有在本檔Frame per Dwg 出現 的 Layout Dwg 分佈圖號,跟 Data Base Part List 分佈圖號 對比。
其他方面這個程式沒有問題了。

TOP

現在在戶外沒辦法幫測試
偵錯停下的是檢查  List檔G欄是Y或O的歸到工地用:
請查看i 執行到第幾 ...
Andy2483 發表於 2025-10-31 09:09
  1. Sub Data()
  2. Dim Arr, Brr, Crr, Z, Q, S, i&, j%, N&, T$, T1$, MyPath$, xFile$, xBook As Workbook, Re, R&
  3. Dim rng, cell As Range

  4. Application.ScreenUpdating = False
  5. For Each S In [{"Layout Dwg","Frame per Dwg","Part List"}]
  6.    Sheets(S).UsedRange.Rows.Offset(1).EntireRow.Delete
  7.    'Delete Old data of "Layout Dwg","Frame per Dwg","Part List" from this workbook
  8. Next
  9. MyPath = ThisWorkbook.Path & "\"
  10. xFile = "Data Base.xlsx"
  11. On Error Resume Next
  12. Set xBook = Workbooks(xFile)
  13. If xBook Is Nothing Then
  14.    Set xBook = Workbooks.Open(MyPath & xFile, , True, , "")
  15.    Re = True: ThisWorkbook.Activate
  16. End If
  17. On Error GoTo 0
  18. Set Z = CreateObject("Scripting.Dictionary")
  19. T = Sheets("Read").[A2] & "|" & Sheets("Read").[C2]
  20. T1 = Sheets("Read").[B2]
  21. With xBook.Sheets("WO No")
  22.    For i = 2 To .[A65536].End(3).Row
  23.       If .Cells(i, "B") & "|" & .Cells(i, "D") = T Then
  24.          .Rows(i).Copy Sheets("WO No").Rows(2)
  25.          For j = 6 To 11
  26.             Z("|" & .Cells(i, j)) = ""
  27.             'Let Column F-K of WO No Sheet as KEY item and add "|" between each word then put into dictionary
  28.          Next
  29.          Sheets("Read").[A2].Resize(, 3).Copy Sheets("WO No").[B2]
  30.          GoTo 11
  31.       End If
  32.    Next
  33.    MsgBox "Nothing": Exit Sub
  34. End With
  35. 11
  36. If T1 Like "##F-*##F" Then
  37.    For i = Val(T1) To Val(StrReverse(Mid(StrReverse(T1), 2, 2)))
  38.       Z(Format(i, "00F")) = ""
  39.    Next
  40.    Else
  41.       Q = Split(T1 & "&" & T1, "&")
  42.       For i = 0 To UBound(Q)
  43.          Z(Q(i)) = 0
  44.       Next
  45. End If
  46. Brr = xBook.Sheets("Layout Dwg").UsedRange
  47. For i = 2 To UBound(Brr)
  48.    If Z.Exists(Brr(i, 2)) And Brr(i, 4) = Sheets("Read").[A2] Then
  49.       'If match of column B floor and column D batch
  50.       Z(Brr(i, 1)) = Z(Brr(i, 1)) + Val(Brr(i, 3))
  51.       'Sum of column C QTY of same of column A "Distribution Map No." of "Layout Dwg" (Name as:LDTotalQTY)
  52.       N = N + 1
  53.       For j = 1 To 4: Brr(N, j) = Brr(i, j): Next
  54.    End If
  55. Next
  56. If N > 0 Then Sheets("Layout Dwg").[A2].Resize(N, 4) = Brr: N = 0 Else MsgBox "Nothing under the floor": GoTo 12
  57. Brr = xBook.Sheets("Frame per Dwg").UsedRange
  58. For i = 2 To UBound(Brr)
  59.    If Z(Brr(i, 1)) > 0 Then
  60.       N = N + 1
  61.       For j = 1 To 6: Brr(N, j) = Brr(i, j): Next
  62.       Brr(N, 5) = Brr(N, 5) * Z(Brr(i, 1))
  63.       'Let Column E QTY of "Frame per Dwg" * LDTotalQTY
  64.       If Z(Brr(i, 2)) > 0 Then
  65.          MsgBox "*Layout Dwg* A column and *Frame per Dwg* B column are duplicate" & vbLf & vbLf & Brr(i, 2)
  66.          Exit Sub
  67.       End If
  68.       Z(Brr(i, 2) & "/") = Z(Brr(i, 2) & "/") + Brr(N, 5)
  69.       'Sum of Column E QTY of "Frame per Dwg" Column B "Assembly Drawing No." (Name as: FDTotalQTY)
  70.    End If
  71. Next
  72. If N > 0 Then Sheets("Frame per Dwg").[A2].Resize(N, 6) = Brr: N = 0 Else MsgBox "Frame per Dwg_Nothing"

  73. Brr = xBook.Sheets("Part List").UsedRange
  74. ReDim Arr(1 To 100000, 1 To 13): Crr = Arr
  75. For i = 2 To UBound(Brr)
  76.    T = Brr(i, 8)
  77.    If T Like "*[a-z]" Then Q = Left(T, Len(T) - 1) Else Q = "||"
  78.    If Z(T) > 0 Or Z(Q) > 0 Then
  79.    Set rng = Sheets("Frame per Dwg").Columns("A:A")
  80.    Set cell = rng.Find(What:=T, LookIn:=xlFormulas, _
  81.                     LookAt:=xlWhole, MatchCase:=False)
  82.    If cell Is Nothing Then
  83.       N = N + 1
  84.       For j = 1 To 13: Arr(N, j) = Brr(i, j): Next
  85.       Arr(N, 3) = Arr(N, 3) * (Z(T) + Z(Q))
  86.    End If

  87.    End If
  88.    '1.Filter Layout Dwg column A "Distribution Map No." of this workbook which don't appear on the Frame per Dwg of this workbook
  89.    '1.1 Match of Layout Dwg column A "Distribution Map No." of this workbook and Part List column H "Distribution Map No." of Data Base workbook
  90.    '1.2 If (1.) Match, list out the row on Part List of this workbook and column C QTY * LDTotalQTY
  91.    '1.3 If the last word column H is lowercase letter of "Part List" of Data Base workbook, then remove the lowercase letter and match column A of "Layout Dwg" of this workbook, then list out the row on Part List of this workbook and column C QTY * LDTotalQTY
  92.    If Z(T & "/") > 0 And Z.Exists("|" & Left(T, 2)) Then
  93.       R = R + 1
  94.       For j = 1 To 13: Crr(R, j) = Brr(i, j): Next
  95.       Crr(R, 3) = Crr(R, 3) * Z(T & "/")
  96.       '2. Column B "Assembly Drawing No." of "Frame per Dwg" of this workbook including column F-K of WO No, then match column H "Distribution Map No." of "Part List" of Data Base workbook
  97.       '2.1 If (2.1) match, list out the row on Part List of this workbook and column C QTY * FDTotalQTY
  98.    End If
  99. Next
  100. If N > 0 Then
  101.    With Sheets("Part List").[A2].Resize(N, 13)
  102.       .Value = Arr
  103.       .Interior.ColorIndex = 35
  104.       'Let Green which item list out by "Distribution Map No."
  105.    End With
  106. End If
  107. If R > 0 Then
  108.    With Sheets("Part List").Cells(N + 2, 1).Resize(R, 13)
  109.       .Value = Crr
  110.       .Interior.ColorIndex = 36
  111.       'Let Yellow which item list out by "Assembly Drawing No."
  112.    End With
  113. End If
  114. If N + R = 0 Then MsgBox "Part List_Nothing"
  115. 12: If Re = True Then xBook.Close 0
  116. End Sub
複製代碼
前輩,我增加了一個 set find 功能在這�堙A過濾掉出現在Frame per Dwg 的分佈圖號。
Brr = xBook.Sheets("Part List").UsedRange
ReDim Arr(1 To 100000, 1 To 13): Crr = Arr
For i = 2 To UBound(Brr)
   T = Brr(i, 8)
   If T Like "*[a-z]" Then Q = Left(T, Len(T) - 1) Else Q = "||"
   If Z(T) > 0 Or Z(Q) > 0 Then
   Set rng = Sheets("Frame per Dwg").Columns("A:A")
   Set cell = rng.Find(What:=T, LookIn:=xlFormulas, _
                    LookAt:=xlWhole, MatchCase:=False)
   If cell Is Nothing Then
      N = N + 1
      For j = 1 To 13: Arr(N, j) = Brr(i, j): Next
      Arr(N, 3) = Arr(N, 3) * (Z(T) + Z(Q))
   End If
   End If

TOP

回復  198188


    以下方案請試試看:

Option Explicit
Dim A, Z, R&, W, L, i&, Brr, Mrr, Q, Dr ...
Andy2483 發表於 2025-10-27 15:31



前輩,采用這個方案,在執行制表時,出現上圖的錯誤,無法複製表格,附上範本,請幫看看

TOP

回復  198188


    所以Data部份前輩已經搞定了嗎?
Andy2483 發表於 2025-10-31 11:32



    前輩,是的。現在Form 部分卡住了,請看 #125

TOP

        靜思自在 : 脾氣嘴巴不好,心地再好也不能算是好人。
返回列表 上一主題