| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Creo |
Autor
|
Thema: VBApi – VBA Model regenerieren (5983 mal gelesen)
|
ble Mitglied
Beiträge: 175 Registriert: 18.02.2002 Pro/E WF 4 CREO Elements/Pro 5 CREO 2.0 Parametric
|
erstellt am: 20. Jul. 2010 07:26 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen, ich versuche mich im Moment in der Nutzung der VBApi über VBA. Leider scheitere ich hier daran, ein Model zu regenerieren. Laut Dokumentation steht das Regenerieren von Modellen IpfcSolid Interface zur Verfügung. Laut Beispielen müsste ich das Model über eine Datenkonvertierung vom IpfcModel in das IpfcSolid wie folgt übernehmen: mdlsolid = CType(model, IpfcSolid) Hieran scheitere ich, da mir die CType Funktion in VBA nicht zur Verfügung steht. Hier ein Auszug aus meinen derzeitigen Versuchen: Dim asynconn As New pfcls.CCpfcAsyncConnection Dim conn As pfcls.IpfcAsyncConnection Dim session As pfcls.IpfcBaseSession Dim mdl As IpfcModelDescriptor Dim mdlCreate As CCpfcModelDescriptor Dim model As IpfcModel Dim mdlsolid As IpfcSolid Dim modelItems As IpfcModelItems Dim modelitem_owner As IpfcModelItemOwner Dim dimension As IpfcBaseDimension Private Sub DimValSet_Click() Set conn = asynconn.connect("", "", ".", 5) Set session = conn.session Set model = session.CurrentModel Set modelitem_owner = model Set dimension = modelitem_owner.GetItemByName(EpfcModelItemType.EpfcITEM_DIMENSION, CStr(Excel.Cells(3, 1))) dimension.DimValue = Excel.Cells(3, 2) Set dimension = modelitem_owner.GetItemByName(EpfcModelItemType.EpfcITEM_DIMENSION, CStr(Excel.Cells(4, 1))) dimension.DimValue = Excel.Cells(4, 2) ' Set mdlsolid = CType(model, IpfcSolid) ' mdlsolid.Regenerate (0) session.RunMacro ("~ Command `ProCmdRegenPart`;") conn.disconnect (2) End Sub Wobei ich hierbei im Moment über ein Makro regeneriere, was ich gerne ersetzt hätte. Gibt es eine Möglichkeit die CType Funktion zu umgehen? Gruß Bernd
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DonChunior Mitglied CAD-Systemadministrator
Beiträge: 1148 Registriert: 09.09.2004 Creo Parametric 4.0 M120 Windchill 11.1 M020-CPS11 Windows 10 Enterprise x64
|
erstellt am: 20. Jul. 2010 10:48 <-- editieren / zitieren --> Unities abgeben: Nur für ble
Ich bin zwar mit Pro/TOOLKIT unterwegs und hab von der VBA-API keine Ahnung, aber wieso sollte die CType-Funktion nicht verfügbar sein? Die gehört doch zur API. Und woher weißt du, dass dein Code genau an dieser Funktion scheitert? ------------------ MfG, DonChunior Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DonChunior Mitglied CAD-Systemadministrator
Beiträge: 1148 Registriert: 09.09.2004 Creo Parametric 4.0 M120 Windchill 11.1 M020-CPS11 Windows 10 Enterprise x64
|
erstellt am: 20. Jul. 2010 11:04 <-- editieren / zitieren --> Unities abgeben: Nur für ble
|
ble Mitglied
Beiträge: 175 Registriert: 18.02.2002 Pro/E WF 4 CREO Elements/Pro 5 CREO 2.0 Parametric
|
erstellt am: 21. Jul. 2010 06:15 <-- editieren / zitieren --> Unities abgeben:
Die CType Funktion ist meines Wissens Bestandteil der Entwicklungsumgebung und nicht der API. Beim Kompilieren bleibe ich dann auch immer genau an der Stelle hängen, siehe Bild. Die Google Suche nach VBA und CType lieferte einige Foreneintrage, die besagen, dass CType unter VBA nicht unterstützt wird.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DonChunior Mitglied CAD-Systemadministrator
Beiträge: 1148 Registriert: 09.09.2004 Creo Parametric 4.0 M120 Windchill 11.1 M020-CPS11 Windows 10 Enterprise x64
|
erstellt am: 21. Jul. 2010 07:28 <-- editieren / zitieren --> Unities abgeben: Nur für ble
Scheinbar wird die Definition nicht gefunden. Somit nehme ich an, dass das Headerfile, die Library, die DLL - oder was auch immer in VBA noch zum Projekt gebunden werden kann - nicht mit dem Projekt verknüpft wurde. ------------------ MfG, DonChunior Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DonChunior Mitglied CAD-Systemadministrator
Beiträge: 1148 Registriert: 09.09.2004 Creo Parametric 4.0 M120 Windchill 11.1 M020-CPS11 Windows 10 Enterprise x64
|
erstellt am: 21. Jul. 2010 07:46 <-- editieren / zitieren --> Unities abgeben: Nur für ble
|
ble Mitglied
Beiträge: 175 Registriert: 18.02.2002 Pro/E WF 4 CREO Elements/Pro 5 CREO 2.0 Parametric
|
erstellt am: 21. Jul. 2010 14:16 <-- editieren / zitieren --> Unities abgeben:
|
ajax01 Mitglied
Beiträge: 3 Registriert: 14.01.2013
|
erstellt am: 14. Jan. 2013 11:57 <-- editieren / zitieren --> Unities abgeben: Nur für ble
|
ajax01 Mitglied
Beiträge: 3 Registriert: 14.01.2013
|
erstellt am: 14. Jan. 2013 14:46 <-- editieren / zitieren --> Unities abgeben: Nur für ble
kurzes update, das funktioniert: Dim window As Pfcls.IpfcWindow Set window = session.CurrentWindow window.Activate window.Refresh --- Dim solid as pfcls.IpfcSolid If oModel.Type = EpfcModelType.EpfcMDL_PART Then Set solid = session.CurrentModel End If solid.regenerate(0) <-- hier gibts einen Laufzeitfehler. Warum? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
NicoFTB Mitglied Ingenieur Entwicklung/Konstuktion
Beiträge: 806 Registriert: 08.05.2012 Creo Parametric 3.0 M120 PDM Essentials 10.1 M040
|
erstellt am: 18. Jan. 2013 10:21 <-- editieren / zitieren --> Unities abgeben: Nur für ble
Zitat: Original erstellt von ajax01:
--- Dim solid as pfcls.IpfcSolid If oModel.Type = EpfcModelType.EpfcMDL_PART Then Set solid = session.CurrentModel End If solid.regenerate(nothing)
Sollte ggf. helfen. Funktioniert bei mir zumindest. ------------------ Grüße Nico \o/ Üs - ProE-Beziehungen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ajax01 Mitglied
Beiträge: 3 Registriert: 14.01.2013
|
erstellt am: 21. Jan. 2013 11:38 <-- editieren / zitieren --> Unities abgeben: Nur für ble
|
NicoFTB Mitglied Ingenieur Entwicklung/Konstuktion
Beiträge: 806 Registriert: 08.05.2012 Creo Parametric 3.0 M120 PDM Essentials 10.1 M040
|
erstellt am: 21. Jan. 2013 12:23 <-- editieren / zitieren --> Unities abgeben: Nur für ble
Code:
Sub Macro1()Dim asynconn As New pfcls.CCpfcAsyncConnection Dim conn As pfcls.IpfcAsyncConnection Dim session As pfcls.IpfcBaseSession Dim mdlname Dim window As pfcls.IpfcWindow Set conn = asynconn.Connect("", "", ".", 5) Set session = conn.session
mdlname = session.CurrentModel.Filename Range("A1").Select ActiveCell.FormulaR1C1 = mdlname MsgBox ("Name: " & mdlname) Set window = session.CurrentWindow window.Activate window.Refresh Dim solid As pfcls.IpfcSolid If session.CurrentModel.Type = EpfcModelType.EpfcMDL_PART Then Set solid = session.CurrentModel solid.Regenerate (Null) End If conn.Disconnect (2) End Sub
In Excel funktioniert das hier bei mir.------------------ Grüße Nico \o/ Üs - ProE-Beziehungen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |