Cze wszystkim
Pozwólcie, że wyjaśnię wam moją sytuację. Pracuję nad złożeniami składającymi się z kilkuset części i muszę wyeksportować niektóre plany części w formacie PDF. W tym celu wstawiam tabelę zestawienia komponentów do mojego zespołu. Ostatnia kolumna tabeli mówi mi, czy chcemy plan pomieszczenia, czy nie. Następnie eksportuję interesujące mnie plany w PDF jeden po drugim.
Chciałbym zrobić program, który trochę to wszystko automatyzuje, aby zaoszczędzić mi czas. Chciałbym, aby użytkownik wprowadził numer części w oknie dialogowym (np. "25", aby wybrać 25. część tabeli). Następnie program otworzy plan powiązany z wybranym pomieszczeniem i zapisze go jako plik PDF.
Druga część programu nie stanowi dla mnie problemu, ale wybór części po jej numerze nomenklatury jest dla mnie problemem. Nie potrafię stworzyć programu zdolnego do odczytania i znalezienia 25. części tabeli nomenklatury oraz otwarcia planu tej części. Jeśli masz jakieś pomysły, bardzo by mi to pomogło.
Mam nadzieję, że będzie wystarczająco jasne :)
Dziękuję za pomoc
Witam;
Oto przykład liczenia linii:
http://help.solidworks.com/2020/English/api/sldworksapi/Get_Components_in_Each_BOM_Table_Row_VB.htm?verRedirect=1
Zmienna, która powinna Cię zainteresować, to: nNumRow = swTableAnn. Liczba wierszy
Kolejne makro do otwierania planu bezpośrednio z nomenklatury:
https://r1132100503382-eu1-3dswym.3dexperience.3ds.com/#community:yUw32GbYTEqKdgY7-jbZPg/post:YxLaeuf8RRWPjMc6PF9ulA
' ###################################################
' # Title: Open Drawing From BOM #
' # Version: 21.9.6 #
' # Author: Stefan Sterk #
' # Company: Idee Techniek Engineering B.V. #
' # #
' # This macro will try to open the drawing for the #
' # selected component(s) in the Bill of Meterials. #
' # #
' # NOTE: Drawing file must be in same folder as #
' # component and must have the same filename #
' ###################################################
Option Explicit
Dim swApp As SldWorks.SldWorks
Sub main()
Dim swModel As SldWorks.ModelDoc2
Dim swSelMgr As SldWorks.SelectionMgr
Dim swTblAnn As SldWorks.TableAnnotation
Dim swBOMTbl As SldWorks.BomTableAnnotation
Dim swComp As SldWorks.Component2
Dim i As Integer, selType As Integer
Dim frtRow As Long, lstRow As Long
Dim frtCol As Long, lstCol As Long
Dim Row As Integer
Dim vComps As Variant
Dim CfgName As String
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then Exit Sub
If Not swModel.GetType = swDocDRAWING Then Exit Sub
Set swSelMgr = swModel.SelectionManager
For i = 1 To swSelMgr.GetSelectedObjectCount2(-1)
selType = swSelMgr.GetSelectedObjectType3(i, -1)
If selType <> 98 Then
MsgBox "Please select a cel from BOM!"
Exit Sub
End If
Set swTblAnn = swSelMgr.GetSelectedObject6(i, -1)
Set swBOMTbl = swTblAnn
swTblAnn.GetCellRange frtRow, lstRow, frtCol, lstCol
For Row = frtRow To lstRow
CfgName = swBOMTbl.BomFeature.GetConfigurations(True, True)(0)
vComps = swBOMTbl.GetComponents2(Row, CfgName)
If Not IsEmpty(vComps) Then
Set swComp = swBOMTbl.GetComponents2(Row, CfgName)(0)
openComponentDrawing swComp
End If
Next Row
Next i
End Sub
Private Function openComponentDrawing(swComp As Component2)
Dim compPath As String
compPath = swComp.GetPathName
Dim drwPath As String
drwPath = Left(compPath, InStrRev(compPath, ".") - 1) & ".slddrw"
' Try Open Drawing
Dim swDrw As SldWorks.DrawingDoc
Dim errors As Long, warnings As Long
Set swDrw = swApp.OpenDoc6(drwPath, swDocDRAWING, 0, "", errors, warnings)
If errors <> 0 Then
If errors = 2 Then
Dim partNumber As String
partNumber = Right(drwPath, Len(drwPath) - InStrRev(drwPath, "\"))
partNumber = Left(partNumber, InStrRev(partNumber, ".") - 1)
MsgBox "Couldn't find drawing for following part number: " & partNumber
End If
Else
swApp.ActivateDoc3 drwPath, False, 0, errors
End If
End Function
Pozdrowienia.
2 polubienia