Witam, stworzyłem makro, które pozwala na konfigurację mojej części (wymiary, obróbka z wypłyśnięciem czy usuwaniem materiału itp.). Po utworzeniu części chciałbym, aby po ponownym uruchomieniu makra na tej części, wartości wyświetlane w formularzu użytkownika były tymi, które umieściłem w pokoju, aby mieć szybki podgląd mojej otwartej części. W przeciwnym razie wyświetlane są wartości domyślne. Powinieneś więc uzyskać informacje z części i odesłać je z powrotem do odpowiednich pól w moim formularzu użytkownika.
Udało mi się pobrać wymiary szkicu i zwrócić je za pomocą: txt_Z.Text = Part.Parameter("D1@F"). SystemValue . ale nie mogę uzyskać wartości PRAWDA lub FAŁSZ funkcji (mat. usuwanie, bossowanie, wiercenie), aby stwierdzić, czy jest ona włączona, czy usunięta w mojej części.
Jeśli masz rozwiązanie, jestem zainteresowany :)
Witam
Musisz spojrzeć na swFeat.IsSuppressed2.
3 polubienia
Option Explicit
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swSelMgr As SldWorks.SelectionMgr
Dim swFeat As SldWorks.Feature
Dim vConfNameArr As Variant
Dim vSuppStateArr As Variant
Dim i As Long
Dim bRet As Boolean
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swSelMgr = swModel.SelectionManager
Set swFeat = swSelMgr.GetSelectedObject6(1, -1)
vConfNameArr = swModel.GetConfigurationNames
vSuppStateArr = swFeat.IsSuppressed2(swThisConfiguration, vConfNameArr)
Debug.Assert 0 = UBound(vSuppStateArr)
Debug.Print "File = " & swModel.GetPathName
Debug.Print " " & swFeat.Name
Debug.Print " " & vConfNameArr(i) & " ---> " & vSuppStateArr(i)
End Sub
Witaj Cyryl, to jest to, czego potrzebuję, udało mi się uzyskać wartość PRAWDA lub FAŁSZ za pomocą tego kodu.
Ale problem polega na tym, że muszę wybrać funkcję przed uruchomieniem makra. Jak sprawić, aby po uruchomieniu makra pobierało wszystkie funkcje, które bym mu dał (w moim kodzie), aby powiedziało mi, czy jest prawdziwe, czy fałszywe? bez konieczności wybierania funkcji?
(Zaznaczam, że jestem początkującym w VBA, to wszystko, co czuję, jakbym dopiero zaczynał robić makra na sw)
Witam
Musisz wymienić wszystkie elementy "Funkcji" i pracować tylko nad tymi funkcjami, które chcesz, spójrz na podany tutaj przykład.
Pozdrowienia
2 polubienia
Private Sub ActualiserInfosPiece()
actualisationInfoPiece = True
Dim swFeature As SldWorks.Feature
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim featureName As String
Dim status As Boolean
Dim vSuppStateArr As Variant
Dim vConfNameArr As Variant
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swModelDocExt = swModel.Extension
Set Part = swModel
If swModel Is Nothing Then
Exit Sub
End If
If (swModel.GetType <> swDocPART) Then
Call MsgBox("Macro valable uniquement pour une pièce", vbOKOnly, "AVERTISSEMENT")
Exit Sub
End If
vConfNameArr = swModel.GetConfigurationNames
Set swFeature = Part.FirstFeature
Do While Not swFeature Is Nothing
featureName = swFeature.name
status = swModelDocExt.SelectByID2(featureName, "BODYFEATURE", 0, 0, 0, False, 0, Nothing, 0)
vSuppStateArr = swFeature.IsSuppressed2(swThisConfiguration, vConfNameArr)
Select Case featureName
Case "FONCTION SW 1"
TglB_N1.value = Not vSuppStateArr(0)
Case "FONCTION SW 2"
TglB_N2.value = Not vSuppStateArr(0)
Case "FONCTION SW 3"
TglB_N3.value = Not vSuppStateArr(0)
Case "FONCTION SW 4"
TglB_N4.value = Not vSuppStateArr(0)
Case "FONCTION SW 5"
TglB_N5.value = Not vSuppStateArr(0)
Case FONCTION SW 6"
TglB_N6.value = Not vSuppStateArr(0)
End Select
Set swFeature = swFeature.GetNextFeature()
Loop
ComboBox_HAUT.Text = Part.Parameter("D3@Esquisse FONCTION SW").SystemValue * 1000
ComboBox_BAS.Text = Part.Parameter("D4@Esquisse FONCTION SW").SystemValue * 1000
ComboBox_GAUCHE.Text = Part.Parameter("D2@Esquisse FONCTION SW").SystemValue * 1000
ComboBox_DROIT.Text = Part.Parameter("D1@Esquisse FONCTION SW").SystemValue * 1000
txt_X.Text = Part.Parameter("D3@Esquisse Débit").SystemValue * 1000
txt_Y.Text = Part.Parameter("D4@Esquisse Débit").SystemValue * 1000
txt_Z.Text = Part.Parameter("D1@F").SystemValue * 1000
actualisationInfoPiece = False
End Sub
Problem rozwiązany, dziękuję za odpowiedź .