返回列表 上一主題 發帖

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

回復  198188


    Z(T & "/s") 是英文
xW 是新增 活頁簿名稱(依照所使用語言新增的名字)
Andy2483 發表於 2025-11-3 15:21




前輩,應該不是亂碼問題,我改用英文版也出現這個問題。
現附出錯圖片給前輩參考。

TOP

回復  198188


    出錯位置的T值 是什麼字串,xW是什麼字串?
Andy2483 發表於 2025-11-3 16:01


中文版
xW 是亂碼
T 是 AC-Y

因爲版
xW 是 Book3
T 是 AC-Y

TOP

回復  198188


    主程式換成以下代碼,請試試看
Option Explicit
Dim A, Z, R&, W, L, i&, Brr, Mr ...
Andy2483 發表於 2025-11-3 16:31



也一樣,卡在那�堙C

xW 是“ ”空白
T 是 AC-Y

TOP

回復  198188


    把亂碼的工作表名改掉試試看
Andy2483 發表於 2025-11-3 16:43



無法修改

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. 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.    
  78.    If Z(T) > 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 Sheets("WO No").[F2] = "BW" Or Sheets("WO No").[F2] = "TW" Then
  101. If N > 0 Then

  102.    With Sheets("Part List").[A2].Resize(N, 13)
  103.       .Value = Arr
  104.       .Interior.ColorIndex = 35
  105.       'Let Green which item list out by "Distribution Map No."
  106.    End With
  107. End If
  108. Else
  109. N = 0
  110. End If

  111. If R > 0 Then
  112.    With Sheets("Part List").Cells(N + 2, 1).Resize(R, 13)
  113.       .Value = Crr
  114.       .Interior.ColorIndex = 36
  115.       'Let Yellow which item list out by "Assembly Drawing No."
  116.    End With
  117. End If
  118. If N + R = 0 Then MsgBox "Part List_Nothing"
  119. 12: If Re = True Then xBook.Close 0
  120. End Sub
複製代碼
回復  198188


    Data的修改方案也提供參考:

Sub Data()
Dim Arr, Brr, Crr, Z, Q, S, i&, j%,  ...
Andy2483 發表於 2025-11-5 14:04


Part List 數據規則有紅色部分修改: 附上修改程式碼

本檔 WO No 表資料顯示規則如下:
1.本檔的Read 表的 A 欄 批次次序,B 欄 樓層 ,C 欄 生產單號 比對Data Base 檔�� WO No 表的 B 欄 批次次序,  C 欄 樓層 及 D欄 生產單號
1.1 若吻合時整列帶出來到本檔的WO No

本檔 Layout Dwg表資料顯示規則如下:
1.本檔的 WO No 表的 C 欄 樓層 比對 Data Base 檔�� Layout Dwg 表的 B 欄 樓層
1.1 若吻合時, 整列帶出來到本檔的WO No

本檔Frame per Dwg 表資料顯示規則如下:
1. 本檔的Layout Dwg表 的A欄 分佈圖號(其C欄數量 (相同分佈圖號) 要加總,以下稱:LD合計數量) 要比對 Data Base 檔裡Frame per Dwg 表的A欄 分佈圖號
1.1 若吻合時, 整列帶出來到本檔的Frame per Dwg,其中E欄的數量要*LD合計數量

本檔Part List 表資料顯示規則如下:
1. 本檔的 WO No 表的 “F2-K2”儲存格是 ”BW” or “TW”
1.1本檔的Layout Dwg表 的A欄 分佈圖號 要比對本檔的Frame per Dwg 表的A欄 分佈圖號,如果沒有在本檔的Frame per Dwg 表�堨X現
1.2 若吻合時, 本檔的Layout Dwg表 的A欄 分佈圖號(其C欄數量(相同分佈圖號)要加總,以下稱:LD合計數量) 要比對 Data Base檔 裡Part List表的H欄 分佈圖編號
1.3若吻合時, 整列帶出來到本檔的Part List,其中C欄的數量要*LD合計數量

2.1 本檔的 WO No 表的 “F2-K2”儲存格不是 ”BW” or “TW”
2.本檔的Frame per Dwg表 的B欄 組裝圖號 (其E欄數量 (相同組裝圖號) 要加總,以下稱:FD合計數量) 也要比對 Data Base檔 裡Part List表的H欄 分佈圖編號
2.1 若吻合時, 本檔的Frame per Dwg表 的B欄 組裝圖號 需要含有 WO No 表的 F - K 欄 的 字母
2.2.若吻合時, 整列也帶出來到本檔的Part List,其中C欄的數量要*FD合計數量

TOP

本帖最後由 198188 於 2025-11-5 15:31 編輯
回復  198188


    FORM 變更如下:

Option Explicit
Public A, Z, R&, W, L, i&, Brr, Mrr, Q, Dr ...
Andy2483 發表於 2025-11-5 13:59


前輩,我終於可以執行Form了,發現有部分問題:

我先說3個大方面的問題,内容部分稍後再核對和細講:

1) Form 是 根據 本檔 Part List 的 A 欄 加工件編號 和 G 欄 備注 來導出 Form
前輩的程式,連 Frame per Dwg 也導出 Form 了,這部分不需要

2)Form �堶惘酗j標題, 請看以下説明或附件説明
BOM "A4" 儲存格是 讀取 Rule 欄 I 的英文名稱 "BOM for Screw"
BOM "A5" 儲存格是 讀取 Rule 欄 J 的中文名稱 "BOM for 螺絲"
BOM "R3" 儲存格是 對應備注 讀取 Rule 欄 B2-H2  的中英文名稱 "Deliver to Site (Part) - 工地自備"

Gasket "D3" 儲存格是 讀取 Rule 欄 I 的英文名稱 & "/" & 欄 J 的中文名稱 "GASKET / 膠條"
Gasket "D4" 儲存格是 對應備注 讀取 Rule 欄 B2-H2  的中英文名稱 "Deliver to Factory - 廠房用"

Structural "C3" 儲存格是 讀取 Rule 欄 I 的英文名稱 & "/" & 欄 J 的中文名稱 " Structural Sealant / 結構膠"
Structural "C4" 儲存格是 對應備注 讀取 Rule 欄 B2-H2  的中英文名稱 " Deliver to Factory - 廠房用"

DN Material "A3" 儲存格是 對應備注 讀取 Rule 欄 B2-H2  的英文名稱 " Delivery Notes For Material Parts"
DN Material "A4" 儲存格是 對應備注 讀取 Rule 欄 B2-H2  的中文名稱  "散件出貨明細"

Fabrication Extrusion "A3" 儲存格是 對應備注 讀取 Rule 欄 B2-H2  的英文名稱 " Fabrication Order Sheet For Extrusion Parts"
Fabrication Extrusion "A4" 儲存格是 對應備注 讀取 Rule 欄 B2-H2  的中文名稱  "加工清單"

Finish "A3" 儲存格是 對應備注 讀取 Rule 欄 B2-H2 的英文名稱 "Finish Part Order On-Hold"  or "Finish Part Order"
Finish "A4" 儲存格是 對應備注 讀取 Rule 欄 B2-H2的中文名稱 "成品備用"  or "成品出貨"

3) 加工件編號相同的能否只出現一次,數量就加總。

Run Result.rar (155.11 KB)

TOP

Part List 數據規則有紅色部分修改: 附上修改程式碼

本檔 WO No 表資料顯示規則如下:
1.本檔的Re ...
198188 發表於 2025-11-5 14:38


前輩如果在完成以上 本檔 Part List 讀取後,我想再加一個程式,重複兩遍。

1.        本檔Part  List表的 A 欄 加工件編號 比對Data Base 檔�� Part  List 表的 H 欄 分佈圖號,
1.1  若吻合,, 整列帶出來到本檔的Part List,其中C欄的數量要 * Data Base 檔的Part List 的C欄的數量

完成後。

1.2 本檔Part  List表的 A 欄 加工件編號 比對Data Base 檔�� Part  List 表的 H 欄 分佈圖號,
1.3 若吻合,, 整列帶出來到本檔的Part List,其中C欄的數量要 * Data Base 檔的Part List 的C欄的數量
完成後。

TOP

回復  198188


    PDF檔產出方案如下:

Option Explicit
Sub Print_PDF()
Dim T$, NewMyPath, Pj ...
Andy2483 發表於 2025-11-5 14:01




這個Print PDF 是否放在本檔,操作 Form 後,直接操作這個Print PDF? 需要先儲存 Form 生成的 Excel 嗎?
出現了圖片這個問題。

TOP

回復  198188


    本檔裡的代碼都要用153~155樓的,且程式名稱不能改
Andy2483 發表於 2025-11-5 16:18


我是用 153 & 156樓的,156 是在155 的基礎上添加了一個過濾

TOP

回復  198188


    這上傳的範例與後學執行的結果不同,訂正的部分剛好同後學執行結果,可能是前輩的本檔 ...
Andy2483 發表於 2025-11-5 16:35



前輩,我已經加入RuleRun, 附件是本檔及運行 Form 之後的表單,運行後,出現以下問題:

1) Form 是 根據 本檔 Part List 的 A 欄 加工件編號 和 G 欄 備注 來導出 Form
前輩的程式,連 Frame per Dwg 也導出 Form 了,這部分不需要 (以附件的例子,WS-T, WA-W, FS-W, FG-W, FA-W �堶悸瑤s號 是不在Part List �堶情A所以不要制表)

2)Form �堶惘酗j標題, 請看以下説明或附件説明, 附件Run Resule 黃色部分。
BOM "A4" 儲存格是 讀取 Rule 欄 I 的英文名稱 "BOM for Screw"
BOM "A5" 儲存格是 讀取 Rule 欄 J 的中文名稱 "BOM for 螺絲"
BOM "R3" 儲存格是 對應備注 讀取 Rule 欄 B2-H2  的中英文名稱 "Deliver to Site (Part) - 工地自備"

Gasket "D3" 儲存格是 讀取 Rule 欄 I 的英文名稱 & "/" & 欄 J 的中文名稱 "GASKET / 膠條"
Gasket "D4" 儲存格是 對應備注 讀取 Rule 欄 B2-H2  的中英文名稱 "Deliver to Factory - 廠房用"

Structural "C3" 儲存格是 讀取 Rule 欄 I 的英文名稱 & "/" & 欄 J 的中文名稱 " Structural Sealant / 結構膠"
Structural "C4" 儲存格是 對應備注 讀取 Rule 欄 B2-H2  的中英文名稱 " Deliver to Factory - 廠房用"

DN Material "A3" 儲存格是 對應備注 讀取 Rule 欄 B2-H2  的英文名稱 " Delivery Notes For Material Parts"
DN Material "A4" 儲存格是 對應備注 讀取 Rule 欄 B2-H2  的中文名稱  "散件出貨明細"

Fabrication Extrusion "A3" 儲存格是 對應備注 讀取 Rule 欄 B2-H2  的英文名稱 " Fabrication Order Sheet For Extrusion Parts"
Fabrication Extrusion "A4" 儲存格是 對應備注 讀取 Rule 欄 B2-H2  的中文名稱  "加工清單"

Finish "A3" 儲存格是 對應備注 讀取 Rule 欄 B2-H2 的英文名稱 "Finish Part Order On-Hold"  or "Finish Part Order"
Finish "A4" 儲存格是 對應備注 讀取 Rule 欄 B2-H2的中文名稱 "成品備用"  or "成品出貨"

3) 加工件編號相同的能否只出現一次,數量就加總。

4) 附圖是運行 Print PDF 出錯 指示。

Result 4 Nov 2025.rar (194.04 KB)

Run Result.rar (242.6 KB)

TOP

        靜思自在 : 改變自己是自救,影響別人是救人。
返回列表 上一主題