返回列表 上一主題 發帖

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

本帖最後由 Andy2483 於 2025-11-12 19:11 編輯

回復 180# 198188


    179樓的Finish規則不足問題待釐清
其它問題也請前輩多瞭解代碼的邏輯,以後可以依需求的變化自行修改
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

本帖最後由 198188 於 2025-11-13 08:28 編輯
回復  198188


    179樓的Finish規則不足問題待釐清
其它問題也請前輩多瞭解代碼的邏輯,以後可以依 ...
Andy2483 發表於 2025-11-12 19:09


前輩,後輩嘗試過了解,不過因爲沒有注釋,理解上只是一知半解,所以多次想自己做修正,都遇到困難。
在前面字典部分,後輩初步了解,所以之前Data方面能自行做一些修正及。
Form因為牽涉其他層面,後輩正在努力學習中。希望前輩多給予指點。
Finish 規則未釐清,所以後輩想趁這個時間透過前面部分的修正,跟現在的程式,兩者相對比來學習

TOP

回復 174# 198188


    這6個模板把資料分割成多頁列印(如下圖),請前輩再調整 版面配置

用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復  198188


    這6個模板把資料分割成多頁列印(如下圖),請前輩再調整 版面配置
Andy2483 發表於 2025-11-13 08:27


前輩,這個到時後輩會調整模板的打印版面配置,才運行程式。

TOP

回復 180# 198188

1.        BOM表 漏欄C - F, H, I, K
2.        GASKET 表 漏欄C - E, G - H, J
3.        STRUCTURAL 表 資料齊全
4.        DN MATERIAL 表 漏欄F
5.        FABRICATION EXTRUSION 表 資料齊全
6.        FINISH 因爲未導出,所以未知有沒有漏資料

以上這些漏欄資料的是
Part List表或 Material表 欄位儲存格是空格
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

本帖最後由 Andy2483 於 2025-11-13 13:36 編輯

回復 180# 198188


合并及加總數量這部分需要對照每個表的數量欄位,如何加不明確,每個表 加工件編號種類不多,先幫排序再一起,請前輩自行以公式相加

Option Explicit
Public A, Z, R&, W, L, i&, Brr, Mrr, Q, Drr, j%, MyPath$
Sub Form()
Dim Arr, Crr(1 To 100000, 1 To 18), xW$, S, T$, T2$, Ts, xFile$, xBook As Workbook, Re
Ts = Timer
Application.ScreenUpdating = False
Application.DisplayAlerts = False
MyPath = ThisWorkbook.Path & "\"
xFile = "Data Base.xlsx"
On Error Resume Next
Set xBook = Workbooks(xFile)
If xBook Is Nothing Then
   Set xBook = Workbooks.Open(MyPath & xFile, , True, , "")
   Re = True: ThisWorkbook.Activate
End If
On Error GoTo 0
Mrr = xBook.Sheets("Material").UsedRange
If Re = True Then xBook.Close 0
Call RuleRun

For i = 2 To UBound(Mrr): Z(Mrr(i, 3) & "/m") = i: Next
For i = Worksheets.Count To 1 Step -1
   If Z(Sheets(i).Name & "/s") <> "" Then Sheets(i).Delete
Next
If Sheets("Part List").FilterMode = True Then Sheets("Part List").ShowAllData
With Range(Sheets("Part List").[P1], Sheets("Part List").[A65536].End(3)(2))
   With .Columns(15): .Cells = "=ROW()": .Value = .Value: End With
   Brr = .Value
   ReDim Arr(1 To UBound(Brr) - 1, 1 To 1)
   For i = 2 To UBound(Brr)
      T = Left(Brr(i, 1), 2) & "-" & Brr(i, 7)
      If InStr("Y-O", Right(T, 1)) Then Arr(i - 1, 1) = Z(T)
   Next
   .Cells(2, 16).Resize(UBound(Brr) - 1, 1) = Arr
   .Sort KEY1:=.Item(16), Order1:=1, KEY2:=.Item(1), Order1:=1, Header:=1
   Brr = .Value
   .Sort KEY1:=.Item(15), Order1:=1, Header:=1
   .Cells(1, 15).Resize(, 2).EntireColumn.Delete
   A = Crr
   For i = 2 To UBound(Brr) - 1
      If Brr(i, 16) = "" Then Exit For Else T = Brr(i, 16)
      R = R + 1: A(R, 1) = R: Run Replace(Z(T & "/s"), " ", "_")
      If T <> Brr(i + 1, 16) Then
         Sheets(Z(T & "/s")).Copy Before:=Sheets(1)
         ActiveSheet.Name = T
         With Cells(Z(Z(T & "/s") & "/UR"), 1).Resize(R, Z(Z(T & "/s") & "/UC"))
            .Value = A
            .Borders.LineStyle = xlContinuous
            ActiveSheet.PageSetup.PrintArea = Range([A1], .Cells).Address
         End With
         With Range(Z(Z(T & "/s") & "/V1")): .Value = Z(T & Switch(InStr("E0-Y", T), "/RE", T = T, "/ER")): .ShrinkToFit = True: End With
         With Range(Z(Z(T & "/s") & "/V2")): .Value = Z(T & Switch(InStr("M4-- M4-Y IG--", T), "/EEC", InStr("E0-Y", T), "/RC", T = T, "/EE")): .ShrinkToFit = True: End With
         With Range(Z(Z(T & "/s") & "/V3")): .Value = Z(T & "/EC"): .ShrinkToFit = True: End With
         A = Crr: R = 0
      End If
   Next
End With
ThisWorkbook.Activate
Set Z = Nothing
Erase Arr, Brr, Crr, A, Mrr
MsgBox "共耗時:" & Timer - Ts & " 秒"
End Sub

Sub RuleRun()
Dim T$, T2$, S$, i&, j%
Set Z = CreateObject("Scripting.Dictionary")
Brr = [Rule!A1].CurrentRegion
For i = 3 To UBound(Brr)
   For j = 2 To 8
      T = Brr(i, j)
      If T <> "" Then
         If Z(T & "|") = "" Or j = 5 Or j = 8 Then
            Z(T & "^") = Brr(2, j)
            Z(T & "|") = Trim(Mid(Brr(2, j), 1, Len(Brr(2, j)) * 2 - LenB(StrConv(Brr(2, j), vbFromUnicode)) - 2))
         End If
         Exit For
      End If
   Next
   For j = 11 To 28
      If Brr(i, j) = "" Then Exit For
      T2 = Brr(i, 11) & "-" & T
      Z(Brr(i, j) & "-" & T) = T2
      If Z(T2 & "/") = "" Then
         Z(T2 & "/") = Brr(i, 9) & "-" & Z(T & "|")
         Z(T2 & "/ER") = Z(T & "^")
         Z(T2 & "/EE") = Brr(i, 9)
         Z(T2 & "/EC") = Brr(i, 10)
         Z(T2 & "/EEC") = Brr(i, 9) & "/" & Brr(i, 10)
         Z(T2 & "/RC") = Trim(Replace(Replace(Z(T & "^"), Z(T & "|"), ""), "-", ""))
         Z(T2 & "/RE") = Z(T & "|")
      End If
      S = Brr(i, 1)
      Z(T2 & "/s") = S
      Z(S & "/UR") = Sheets(S).[A65536].End(3)(2).Row
      Z(S & "/UC") = Sheets(S).Cells(Z(S & "/UR") - 1, 256).End(xlToLeft).Column
      Z(S & "/V1") = Switch(S = "Bom", "L3", S = "Gasket", "D4", S = "Structural", "C4", S = "Fabrication Extrusion", "A3", S = "Finish", "A3", S = "DN Material", "A3")
      Z(S & "/V2") = Switch(S = "Bom", "A4", S = "Gasket", "D3", S = "Structural", "C3", S = "Fabrication Extrusion", "A4", S = "Finish", "A4", S = "DN Material", "A4")
      Z(S & "/V3") = Switch(S = "Bom", "A5", S = "Gasket", "E3", S = "Structural", "D3", S = "Fabrication Extrusion", "B3", S = "Finish", "B3", S = "DN Material", "B3")
   Next
Next
End Sub

Sub Bom()
A(R, 2) = Brr(i, 1)
A(R, 3) = Brr(i, 12)
If A(R, 3) <> "" And Z.Exists(A(R, 3) & "/m") Then
   For j = 0 To 5: A(R, Array(4, 5, 6, 8, 9, 13)(j)) = Mrr(Z(A(R, 3) & "/m"), Array(5, 6, 7, 11, 10, 8)(j)): Next
End If
A(R, 7) = Brr(i, 4) & " x " & Brr(i, 5)
A(R, 10) = Brr(i, 3)
A(R, 18) = Brr(i, 7)
End Sub

Sub Gasket()
For j = 0 To 5: A(R, Array(2, 9, 6, 7, 11, 3)(j)) = Brr(i, Array(1, 3, 5, 6, 7, 12)(j)): Next
If A(R, 3) <> "" And Z.Exists(A(R, 3) & "/m") Then
   For j = 0 To 2: A(R, Array(4, 5, 8)(j)) = Mrr(Z(A(R, 3) & "/m"), Array(5, 6, 8)(j)): Next
End If
End Sub

Sub Structural()
For j = 0 To 2: A(R, Array(2, 3, 5)(j)) = Brr(i, Array(1, 2, 3)(j)): Next
L = Split(Brr(i, 2) & "mm", "mm")(0)
W = Split(Brr(i, 2) & "mm", "mm")(1)
L = Val(StrReverse(Mid(Val(StrReverse(L & 1)), 2)))
W = Val(StrReverse(Mid(Val(StrReverse(W & 1)), 2)))
A(R, 6) = L * W
A(R, 8) = A(R, 5) * A(R, 6) / 1000
A(R, 7) = Application.RoundUp(A(R, 5) * A(R, 6) / 1000, 0)
End Sub

Sub DN_Material()
For j = 0 To 3: A(R, Array(2, 3, 4, 7)(j)) = Brr(i, Array(1, 12, 5, 3)(j)): Next
If A(R, 3) <> "" And Z.Exists(A(R, 3) & "/m") Then
   A(R, 5) = Mrr(Z(A(R, 3) & "/m"), 11)
   A(R, 6) = Mrr(Z(A(R, 3) & "/m"), 8)
   A(R, 8) = A(R, 5) * A(R, 7)
End If
A(R, 9) = Brr(i, 7)
End Sub

Sub Fabrication_Extrusion()
For j = 0 To 5: A(R, Array(2, 3, 4, 5, 6, 7)(j)) = Brr(i, Array(1, 11, 10, 4, 3, 1)(j)): Next
If A(R, 7) Like "*-*-*" Then
   Q = Split(A(R, 7), "-")
   A(R, 7) = Q(0) & "-" & Q(1)
End If
A(R, 8) = Brr(i, 7)
End Sub

Sub Finish()
For j = 0 To 4: A(R, Array(2, 3, 4, 5, 7)(j)) = Brr(i, Array(2, 3, 4, 5, 6)(j)): Next
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

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


合并及加總數量這部分需要對照每個表的數量欄位,如何加不明確,每個表 加工件編號種類不 ...
Andy2483 發表於 2025-11-13 13:34



   
前輩,執行時,出現圖片這個問題。

加總的問題,跟 用 Layout Dwg 導出 Frame per Dwg 資料模式一樣。
先以 本檔 Part List A欄 加工件編號  & G 欄 備注 為規則,將資料放入字典,
字典: 加工件編號 & 備注是唯一,將 兩者相同的數量加總,放入字典
然後再根據 Rule 表 的 Key Word & Remark ,複製到相應的範本表格内。

Result 11 Nov 2025.rar (210.31 KB)

TOP

本帖最後由 Andy2483 於 2025-11-13 16:08 編輯

回復 187# 198188


    RunForm Module刪除就可執行

加總的問題請將6模板各手動公式加入1列加總範例上傳

Finish模板如何帶入資料都沒有規則,再繼續研究有意義嗎?
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復  198188


    RunForm Module刪除就可執行

加總的問題請將6模板各手動公式加入1列加總範例上傳 ...
Andy2483 發表於 2025-11-13 16:02





#186 樓 Fabrication Extrusion 表,出來的效果不對,附上圖給前輩

#186 樓 DN Material 表,出來的效果不對,附上圖給前輩

附上6個表的範例 excel,  每個表都有模板及一些範例。(左邊是#186樓出來的效果,右邊是我手動之後想要的效果。)
1) 黃色部分是指編碼,
2) 綠色部分是指數量,

規則:比對相同編碼(黃色),如吻合,將數量(綠色)加總,(紫色的是那些合并了重複的編碼,沒顔色的是那些沒有重複的編碼)

6個表.rar (273.91 KB)

TOP

回復  198188

1.        BOM表 漏欄C - F, H, I, K
2.        GASKET 表 漏欄C - E, G - H, J
3.     ...
Andy2483 發表於 2025-11-13 13:01


前輩,我以#186 樓程式測試,另外將 Data Base 的 Material 表 都填寫資料,及在本檔也加上Material 表 , 但是 BOM, DN Material, Gasket 還有有黃色部分沒有出來。 請看附件。

GASKET 表
D 欄 英文描述 對比 Material 表 E 欄 英文描述
E  欄 中文描述 對比 Material 表 F 欄 中文描述
H 欄 單位 對比 Material 表 I 欄 中文單位

BOM 表
D 欄 英文描述 對比 Material 表 E 欄 英文描述
E  欄 中文描述 對比 Material 表 F 欄 中文描述
F 欄 材質, 標準及等級 對比 Material 表 G 欄  材質
H 欄 單重 (KGS) 對比 Material 表 K 欄  單重
I 欄 顔色/表面處理  對比 Material 表 J 欄  顔色/表面處理
K 欄 單位 對比 Material 表 I 欄 中文單位

DN Material 表
E  欄 單重 (KGS) 對比 Material 表 K 欄  單重
F 欄 單位 對比 Material 表 I 欄 中文單位

Result 14 Nov 2025 .rar (589.57 KB)

遺漏數據資料.rar (71.95 KB)

TOP

        靜思自在 : 一句溫暖的話,就像往別人身上灑香水,自己會沾到兩三滴。
返回列表 上一主題