Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Pro ENGINEER
  VBApi – VBA Model regenerieren

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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
 


Sehen Sie sich das Profil von ble an!   Senden Sie eine Private Message an ble  Schreiben Sie einen Gästebucheintrag für ble

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von DonChunior an!   Senden Sie eine Private Message an DonChunior  Schreiben Sie einen Gästebucheintrag für DonChunior

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ble 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von DonChunior an!   Senden Sie eine Private Message an DonChunior  Schreiben Sie einen Gästebucheintrag für DonChunior

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ble 10 Unities + Antwort hilfreich

Vielleicht ist
Code:
mdlsolid.Regenerate(0)

falsch und
Code:
mdlsolid.Regenerate(Nothing)

wäre richtig?!

------------------
MfG, DonChunior

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

ble
Mitglied
 


Sehen Sie sich das Profil von ble an!   Senden Sie eine Private Message an ble  Schreiben Sie einen Gästebucheintrag für ble

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


CType.gif

 
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


Sehen Sie sich das Profil von DonChunior an!   Senden Sie eine Private Message an DonChunior  Schreiben Sie einen Gästebucheintrag für DonChunior

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ble 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von DonChunior an!   Senden Sie eine Private Message an DonChunior  Schreiben Sie einen Gästebucheintrag für DonChunior

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ble 10 Unities + Antwort hilfreich


vba_ref.gif

 
Hast du die im Bild zu sehenden Projektreferenzen gesetzt?

------------------
MfG, DonChunior

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

ble
Mitglied
 


Sehen Sie sich das Profil von ble an!   Senden Sie eine Private Message an ble  Schreiben Sie einen Gästebucheintrag für ble

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ja, diese Projektreferenz ist gesetzt, ohne diese würde mein Beispiel nicht funktionieren.
Bis auf die Datenkonvertierung (CType) funktioniert es ja.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

ajax01
Mitglied


Sehen Sie sich das Profil von ajax01 an!   Senden Sie eine Private Message an ajax01  Schreiben Sie einen Gästebucheintrag für ajax01

Beiträge: 3
Registriert: 14.01.2013

erstellt am: 14. Jan. 2013 11:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ble 10 Unities + Antwort hilfreich

hat jemand das Problem mitlerweile gelöst?

CType gibts bei vba nicht, aber es müsste doch einen weg geben das zu umgehen ?!

Grüße

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

ajax01
Mitglied


Sehen Sie sich das Profil von ajax01 an!   Senden Sie eine Private Message an ajax01  Schreiben Sie einen Gästebucheintrag für ajax01

Beiträge: 3
Registriert: 14.01.2013

erstellt am: 14. Jan. 2013 14:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ble 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von NicoFTB an!   Senden Sie eine Private Message an NicoFTB  Schreiben Sie einen Gästebucheintrag für NicoFTB

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ble 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von ajax01 an!   Senden Sie eine Private Message an ajax01  Schreiben Sie einen Gästebucheintrag für ajax01

Beiträge: 3
Registriert: 14.01.2013

erstellt am: 21. Jan. 2013 11:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ble 10 Unities + Antwort hilfreich

Bei mir komm leider immer der Fehler:
pfcExceptions::XToolkitBadContext
bei pfcls.ipfcSolit.regenerate(Object_Instrs)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

NicoFTB
Mitglied
Ingenieur Entwicklung/Konstuktion


Sehen Sie sich das Profil von NicoFTB an!   Senden Sie eine Private Message an NicoFTB  Schreiben Sie einen Gästebucheintrag für NicoFTB

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ble 10 Unities + Antwort hilfreich

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz