- ©«¤l
- 1534
- ¥DÃD
- 40
- ºëµØ
- 0
- ¿n¤À
- 1558
- ÂI¦W
- 0
- §@·~¨t²Î
- Windows 7
- ³nÅ骩¥»
- Excel 2010 & 2016
- ¾\ŪÅv
- 100
- ©Ê§O
- ¨k
- ¨Ó¦Û
- ¥xÆW
- µù¥U®É¶¡
- 2020-7-15
- ³Ì«áµn¿ý
- 2025-11-5
|
¥»©«³Ì«á¥Ñ Andy2483 ©ó 2025-11-5 14:09 ½s¿è
¦^´_ 151# 198188
FORM Åܧó¦p¤U:
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, 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 & "/EC"): .ShrinkToFit = True: End With
With Range(Z(Z(T & "/s") & "/V2")): .Value = Z(T & "/ER"): .ShrinkToFit = True: End With
A = Crr: R = 0
End If
Next
End With
ThisWorkbook.Activate
If Sheets("Frame per Dwg").FilterMode = True Then Sheets("Frame per Dwg").ShowAllData
With Range(Sheets("Frame per Dwg").[I1], Sheets("Frame per Dwg").[A65536].End(3)(2))
With .Columns(8): .Cells = "=ROW()": .Value = .Value: End With
Drr = .Value
ReDim Arr(1 To UBound(Drr) - 1, 1 To 1)
For i = 2 To UBound(Drr)
T = Left(Drr(i, 2), 2) & "-" & Drr(i, 6)
If InStr("WT", Right(T, 1)) Then Arr(i - 1, 1) = Z(T)
Next
.Cells(2, 9).Resize(UBound(Drr) - 1, 1) = Arr
.Sort KEY1:=.Item(9), Order1:=1, Header:=1
Drr = .Value
.Sort KEY1:=.Item(8), Order1:=1, Header:=1
.Cells(1, 8).Resize(, 2).EntireColumn.Delete
A = Crr: R = 0
For i = 2 To UBound(Drr) - 1
If Drr(i, 9) = "" Then Exit For Else T = Drr(i, 9)
R = R + 1: A(R, 1) = R: Run Replace(Z(T & "/s"), " ", "_")
If T <> Drr(i + 1, 9) 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 & "/EC"): .ShrinkToFit = True: End With
With Range(Z(Z(T & "/s") & "/V2")): .Value = Z(T & "/ER"): .ShrinkToFit = True: End With
A = Crr: R = 0
End If
Next
End With
Set Z = Nothing
Erase Arr, Brr, Crr, Drr, A, Mrr
MsgBox "¦@¯Ó®É¡G" & 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 & "|") = "" 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 & "/EC") = Brr(i, 9) & "-" & Brr(i, 10)
Z(T2 & "/ER") = 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", "A4", S = "Gasket", "D6", S = "Structural", "C3", S = "Fabrication Extrusion", "A3", S = "Finish", "A3", S = "DN Material", "A3")
Z(S & "/V2") = Switch(S = "Bom", "A5", S = "Gasket", "D7", S = "Structural", "C4", S = "Fabrication Extrusion", "A4", S = "Finish", "A4", S = "DN Material", "A4")
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)) = Drr(i, Array(2, 3, 4, 5, 6)(j)): Next
End Sub |
|