|   |   | 
  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für PTC CREO | 
|   |   | 
  | Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
  | 
| 
Autor
 | 
Thema:  VBApi – VBA Model regenerieren (6451 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: 1162 Registriert: 09.09.2004 Creo Parametric 10.0.5.0 Windchill 12.1.2.9 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: 1162 Registriert: 09.09.2004 Creo Parametric 10.0.5.0 Windchill 12.1.2.9 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: 1162 Registriert: 09.09.2004 Creo Parametric 10.0.5.0 Windchill 12.1.2.9 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: 1162 Registriert: 09.09.2004 Creo Parametric 10.0.5.0 Windchill 12.1.2.9 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  |