返回列表 上一主題 發帖

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

回復 29# 198188


    請將規則文字敘述表單化後上傳新範例 ,如下圖

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

TOP

本帖最後由 198188 於 2025-10-23 08:26 編輯
回復  198188


    請將規則文字敘述表單化後上傳新範例 ,如下圖
Andy2483 發表於 2025-10-22 16:44




由於中文會有亂碼,所以我上載的範例 Result 用英文敘述,另外圖片用中文敘述。附件規則是中文描述規則。

Rule 欄 A "複製表格 Copy Form"  藍色部分是指示複雜哪個模板的表格
Rule 欄 B - H "備注符號 Remark " 黃色部分是對應 Part List 欄 G "備注" & Frame per Dwg 欄 F "組裝圖的出貨情況" 的辨認
Rule 欄 K - AB " 關鍵字Key Word" 綠色部分是 對應 Part List 欄 A "加工件編號" & Frame per Dwg 欄 B "組裝圖編號" 的頭兩個字的辨認
當 Rule 欄 B - H "備注符號 Remark " & Rule 欄 K - AB " 關鍵字Key Word" 兩個都符合條件的 根據Rule 欄 A  "複製表格 Copy Form" 來生產一個新的表格,然後按照 規則 來填入資料。
最後把所有新生成的表格,打印成PDF 儲存在當下的桌面 / 該Excel 的位置。

規則.rar (17.6 KB)

規則描述

result.rar (294.76 KB)

表格

TOP

回復 32# 198188


工作表名稱只能有31個字元,若超過如何處理?
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復  198188


工作表名稱只能有31個字元,若超過如何處理?
Andy2483 發表於 2025-10-23 08:43


如果 只有1個 Key Word 的直接用 Key Word 命名,
如果出現超過一個 key word 的直接用English Product命名。

舉例
Hardware = HW
Screw = Screw
Weather Sealant = Weather Sealant
Flush Slab Edge Cover Frame = FF
Door Frame  = DF
Casting = Casting
Structural Sealant = Structural Sealant
Gasket = Gasket
Thermal Rock = TR
   
另外Remark
直接用符號命名。
符號 - 用 -
符號 Y 用Y
符號 O 用 O
符號 T 用 T
符號 W 用 W

TOP

回復 34# 198188


    以下請先試試看

Option Explicit
Sub TEST()
Dim Arr, Brr, Crr(1 To 10000, 1 To 18), A, V, Z, Q, S, i&, j%, R&, C%, y%, K, X%, T$, T1$, T2$, T3$, T4$, T5$, Rk$, W, L
Application.ScreenUpdating = False
Set Z = CreateObject("Scripting.Dictionary")
Brr = [Rule!A1].CurrentRegion
For j = 2 To 8
   T = Trim(Mid(Brr(2, j), 1, Len(Brr(2, j)) * 2 - LenB(StrConv(Brr(2, j), vbFromUnicode)) - 2))
   For i = 3 To UBound(Brr)
      If Brr(i, j) <> "" Then Z(Brr(i, j) & "|") = T: Exit For
   Next
Next
For i = 3 To UBound(Brr)
   For j = 11 To 28
      If Brr(i, j) = "" Then
         If j = 12 Then
            Z("/" & Brr(i, 9) & "/") = Brr(i, 11)
         End If
         Exit For
      End If
      Z("/" & Brr(i, j) & "/") = Brr(i, 9)
      Z("/" & Brr(i, j) & "//") = Brr(i, 10)
   Next
Next
For i = 3 To UBound(Brr)
      T = Brr(i, 9)
      Rk = ""
      For j = 2 To 8
         Rk = Rk & Brr(i, j)
      Next
      S = Brr(i, 1)
      Z(T & "\" & Rk) = 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
Next
Arr = Sheets("Material").UsedRange
For i = 2 To UBound(Arr)
   Z(Arr(i, 3) & "/m") = i
Next
Brr = Range(Sheets("Part List").[M1], Sheets("Part List").[A65536].End(3))
For i = 2 To UBound(Brr)
   T5 = Left(Brr(i, 1), 2)
   T = Z("/" & T5 & "/")
   T4 = Z("/" & Left(Brr(i, 1), 2) & "//")
   Rk = Brr(i, 7)
   T2 = Z(T & "\" & Rk)
   T3 = T & "-" & Z(Rk & "|")
   If Len(T3) > 31 Then
      T3 = T4 & "-" & Z(Rk & "|")
      If Len(T3) > 31 Then
         T3 = T5 & "-" & Rk
      End If
   End If
   Z("|" & T3) = T2
   A = Z("/" & T3)
   R = Z("r/" & T3)
   If Not IsArray(A) Then
      A = Crr
   End If
   If T2 = "Bom" Then
      R = R + 1
      A(R, 1) = R
      A(R, 2) = Brr(i, 1)
      A(R, 3) = Brr(i, 12)
      If A(R, 3) <> "" Then
         A(R, 4) = Arr(Z(A(R, 3) & "/m"), 5)
         A(R, 5) = Arr(Z(A(R, 3) & "/m"), 6)
         A(R, 6) = Arr(Z(A(R, 3) & "/m"), 7)
         A(R, 8) = Arr(Z(A(R, 3) & "/m"), 11)
         A(R, 9) = Arr(Z(A(R, 3) & "/m"), 10)
         A(R, 13) = Arr(Z(A(R, 3) & "/m"), 8)
      End If
      A(R, 7) = Brr(i, 4) & " x " & Brr(i, 5)
      A(R, 10) = Brr(i, 3)
      A(R, 18) = Brr(i, 7)
      GoTo i01
   End If
   If T2 = "Gasket" Then
      R = R + 1
      A(R, 1) = R
      A(R, 2) = Brr(i, 1)
      A(R, 9) = Brr(i, 3)
      A(R, 6) = Brr(i, 5)
      A(R, 7) = Brr(i, 6)
      A(R, 11) = Brr(i, 7)
      A(R, 3) = Brr(i, 12)
      If A(R, 3) <> "" Then
         A(R, 4) = Arr(Z(A(R, 3) & "/m"), 5)
         A(R, 5) = Arr(Z(A(R, 3) & "/m"), 6)
         A(R, 8) = Arr(Z(A(R, 3) & "/m"), 8)
      End If
      GoTo i01
   End If
   If T2 = "Structural" Then
      R = R + 1
      A(R, 1) = R
      A(R, 2) = Brr(i, 1)
      A(R, 3) = Brr(i, 2)
      A(R, 5) = Brr(i, 3)
      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)
      GoTo i01
   End If
   If T2 = "DN Material" Then '
      R = R + 1
      A(R, 1) = R
      A(R, 2) = Brr(i, 1)
      A(R, 3) = Brr(i, 12)
      A(R, 4) = Brr(i, 5)
      A(R, 7) = Brr(i, 3)
      If A(R, 3) <> "" Then
         A(R, 5) = Arr(Z(A(R, 3) & "/m"), 11)
         A(R, 6) = Arr(Z(A(R, 3) & "/m"), 8)
         A(R, 6) = A(R, 5) * A(R, 7)
      End If
      A(R, 9) = Brr(i, 7)
      GoTo i01
   End If
   If T2 = "Fabrication Extrusion" Then
      R = R + 1
      A(R, 1) = R
      A(R, 2) = Brr(i, 1)
      A(R, 3) = Brr(i, 11)
      A(R, 4) = Brr(i, 10)
      A(R, 5) = Brr(i, 4)
      A(R, 6) = Brr(i, 3)
      A(R, 7) = Brr(i, 1)
      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 If
i01: Z("/" & T3) = A
   Z("r/" & T3) = R
Next
Brr = Range(Sheets("Frame per Dwg").[M1], Sheets("Frame per Dwg").[A65536].End(3))
For i = 2 To UBound(Brr)
   T = Z("/" & Left(Brr(i, 2), 2) & "/")
   T4 = Z("/" & T & "/")
   Rk = Brr(i, 6)
   T2 = Z(T & "\" & Rk)
   T3 = T4 & "-" & Z(Rk & "|")
   Z("|" & T3) = T2
   A = Z("/" & T3)
   R = Z("r/" & T3)
   If Not IsArray(A) Then
      A = Crr
   End If
   If T2 = "Finish" Then
      R = R + 1
      A(R, 1) = R
      A(R, 2) = Brr(i, 2)
      A(R, 3) = Brr(i, 3)
      A(R, 4) = Brr(i, 4)
      A(R, 5) = Brr(i, 5)
      A(R, 7) = Brr(i, 6)
   End If
   Z("/" & T3) = A
   Z("r/" & T3) = R
Next
Workbooks.Add
Q = ActiveWorkbook.Name
For Each K In Z.Keys
   If IsArray(Z(K)) And Z("r" & K) > 0 Then
      T = Mid(K, 2)
      ThisWorkbook.Sheets(Z("|" & T)).Copy Before:=Workbooks(Q).Sheets(1)
      ActiveSheet.Name = T
      With Cells(Z(Z("|" & T) & "/UR"), 1).Resize(Z("r" & K), Z(Z("|" & T) & "/UC"))
         .Value = Z(K)
         .Borders.LineStyle = xlContinuous
      End With
   End If
Next
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復  198188


    以下請先試試看

Option Explicit
Sub TEST()
Dim Arr, Brr, Crr(1 To 10000,  ...
Andy2483 發表於 2025-10-23 11:57



執行後,出現這個錯誤。

TOP

回復 36# 198188


    可能原因:Material表資料不完整
Part List表L(供應商編號) 在 Material表C欄找不到  相應的(供應商編號)
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復  198188


    可能原因:Material表資料不完整
Part List表L(供應商編號) 在 Material表C欄找不 ...
Andy2483 發表於 2025-10-23 13:59


那能不能加一句,如果讀取Material 時找不到的,直接空白?

TOP

本帖最後由 Andy2483 於 2025-10-23 14:44 編輯

回復 38# 198188


    裡面有3行:    If A(R, 3) <> "" Then
都置換成:    If A(R, 3) <> "" And Z.Exists(A(R, 3) & "/m") Then
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復  198188


    裡面有3行:    If A(R, 3)  "" Then
都置換成:    If A(R, 3)  "" And Z.Exists( ...
Andy2483 發表於 2025-10-23 14:38


改完之後,運行程式,整個Excel 一直 沒有回應。

TOP

        靜思自在 : 多做多得。少做多失。
返回列表 上一主題