Mam teraz ten błąd!
Sub main()
Dim xlApp As Object
Dim wbk As Object 'not Workbook
Dim sht As Object 'not Arkusz roboczy
'w razie potrzeby: Dim rng As Object ‹ not Range ›
Dim swApp jako SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swBOMAnnotation As SldWorks.BomTableAnnotation
Dim swBOMFeature As SldWorks.BomFeature
Dim boolstatus As Boolean
Dim BomType tak długo, jak długo
Przyciemnij konfigurację jako ciąg
Dim TemplateName As Ciąg
Ustaw swApp = Application.SldWorks
Ustaw swModel = swApp.ActiveDoc
Jeśli swModel jest niczym, to
swApp.SendMsgToUser2 (' Nie wykryto aktywnego zestawu. '), swMbWarning, swMbOk' aktywność dokumentu testowego
Wyjdź z subwoofera
ElseIf swModel.GetType <> swDocASSEMBLY Następnie
swApp.SendMsgToUser2 (' Nie wykryto aktywnego zestawu. '), swMbWarning, swMbOk' sprawdza, czy plik jest zestawem
Wyjdź z subwoofera
ElseIf swModel.GetPathName = " " Następnie
swApp.SendMsgToUser2 ( 'Niezarejestrowany zestaw. '), swMbWarning, swMbOk' testuje, czy zestaw jest zarejestrowany
Wyjdź z subwoofera
Zakończ jeżeli:
Ustaw swModelDocExt = swModel.Extension
Ustaw xlApp = CreateObject(" Excel.Application ")
Ustaw wbk = xlApp.Workbooks.Open(" ... Nomenclature.xls") ' otwierając szablon ‹ lub tworząc nowy: Ustaw wbk = xlApp.Workbooks.Add
‹ w razie potrzeby: Istniejący wybór arkuszy: Ustaw sht = wbk. Arkusze robocze(1) ›: dodano arkusz kalkulacyjnyUstaw wks = wbk. Arkusze.Dodaj ›
‹ w razie potrzeby: Zaznaczanie komórki: Ustaw rng = thisWs.Range(" A11 ") ›
TemplateName = " ... Detailed.sldbomtbt » ‹ Tworzenie automatycznego zestawienia materiałów Solidworks zgodnie z modelem ›
BomType = swBomType_Indented
Konfiguracja = " Domyślnie" ‹ nazwa ustawionej konfiguracji ›
Ustaw swBOMAnnotation = swModelDocExt.InsertBomTable3(NazwaSzablonu, 0, 0, Typ Bom, Konfiguracja, Fałsz, swNumberingType_Detailed, Fałsz)
Ustaw swBOMFeature = swBOMAnnotation.BomFeature
swModel.ForceRebuild3 Prawda
Dim NumCol tak długo
Dim NumRow tak długo
Słońce i tak długo
Słońce J Tak długo
LiczbaKolumn = swBOMAnnotation.ColumnCount
NumRow = swBOMAnnotation.RowCount
Przyciemnij rząd tak długo
wiersz = 0
Dla i = 0 Do LiczbaWiersz
Dim itemNum As String, partnum As String
swBOMAnnotation.GetComponentsCount2 i + 1, "", itemNum, partnum
If isValidPart2(partnum) = False Then GoTo next_i
For J = 0 To NumCol
wbk.Sheets("Nomenclature").Cells(row + 9, J + 1) = swBOMAnnotation.Text(i + 1, J)
Next J
row = row + 1
next_i:
Dalej i
boolstatus = swModelDocExt.SelectByID2(swBOMFeature.GetFeature.Description, " BOMFEATURE ", 0, 0, 0, Prawda, 0, Nic, 0)
swModel.EditDelete
swModel.ForceRebuild3 Prawda
Przyciemnij konfigurację jako SldWorks.Configuration
Dim cusPropMgr As SldWorks.CustomPropertyManager
Dim lRetVal tak długo
Dim ValOut As String
Dim ResolvedValOut As String
Dim wasResolved As Boolean
Dim nNbrProps tak długo
Dim vPropNames jako wariant
Dim vPropTypes jako wariant
Dim vPropValues jako wariant
Dim rozwiązany jako wariant
Dim custPropType As Long
Dim K tak długo
Dim PropertyName1 As Ciąg
Dim PropertyName2 As Ciąg
Dim PropertyName3 As Ciąg
Dim PropertyName4 As Ciąg
Dim PropertyName5 As Ciąg
Dim PropertyName6 As Ciąg
Dim PropertyName7 As Ciąg
Dim DateStr As Data
Set config = swModel.GetActiveConfiguration ': wskazuje na właściwości solidworks bieżącego dokumentu
‹ Ustaw cusPropMgr = config. CustomPropertyManager ›: Pobieranie właściwości specyficznych dla konfiguracji (właściwości Solidworks >> właściwości specyficzne dla konfiguracji.
Ustaw cusPropMgr = swModelDocExt.CustomPropertyManager(" ")
nNbrProps = cusPropMgr.Count
vPropNames = cusPropMgr.GetNames
Dla K = 0 do nNbrProps - 1
cusPropMgr.Get2 vPropNames(K), ValOut, ResolvedValOut
custPropType = cusPropMgr.GetType2(vPropNames(K))
If vPropNames(K) = "N° de projet" Then 'récupération de la propriété "N° de projet"'
NomProperty1 = ResolvedValOut
wbk.Sheets("Nomenclature").Cells(1, 3) = NomProperty1
End If
If vPropNames(K) = "N° Plan / Réf / Dim" Then
NomProperty2 = ResolvedValOut
wbk.Sheets("Nomenclature").Cells(1, 5) = "-" & NomProperty2
End If
If vPropNames(K) = "Nom de projet" Then
NomProperty3 = ResolvedValOut
wbk.Sheets("Nomenclature").Cells(3, 3) = NomProperty3
End If
If vPropNames(K) = "Désignation" Then
NomProperty4 = ResolvedValOut
wbk.Sheets("Nomenclature").Cells(5, 3) = NomProperty4
End If
If vPropNames(K) = "Dessinateur" Then
NomProperty5 = ResolvedValOut
wbk.Sheets("Nomenclature").Cells(2, 7) = " Dessinateur : " & NomProperty5
End If
If vPropNames(K) = "Vérificateur" Then
NomProperty6 = ResolvedValOut
wbk.Sheets("Nomenclature").Cells(3, 7) = " Vérificateur : " & NomProperty6
End If
If vPropNames(K) = "Indice en cours" Then
NomProperty7 = ResolvedValOut
wbk.Sheets("Nomenclature").Cells(4, 7) = " Indice en cours : " & NomProperty7
End If
Następny k
WBK. Arkusze (" Nomenklatura "). Cells(1, 6) = " Data: " & DateValue(Now)
Przyciemnij ścieżkę jako ciąg
path = Strings.Left(swModel.GetPathName, Len(swModel.GetPathName) - 7) & " - " & PropertyName7 & " -Detailed " & " .xlsx " ' Wypełnij ścieżkę i nazwę rekordu ' & PropertyName: Dodano niestandardową właściwość do nazwy pliku
Z xlApp
.DisplayAlerts = False
.EnableEvents = False
wbk.SaveAs chemin 'enregistre le fichier et écrase si fichier déjà existant
.DisplayAlerts = True
.EnableEvents = True
wbk.Close 'ferme le workbook
.Quit 'quitte excel
Zakończ się na
swApp.SendMsgToUser2 (" BOM całej utworzonej maszyny. "), swMbInformation, swMbOk 'msgbox solidworks
Koniec subwoofera
Funkcja isValidPart2(str As String) As Boolean
isValidPart2 = False
If str = "" Then Exit Function
Dim i As Long
For i = 1 To Len(str)
If Mid(str, i, 1) <> " " Then
isValidPart2 = True
Exit Function
End If
Next i
Zakończ funkcję