Autor
|
Thema: Excel Makro für Catia bearbeiten (2026 mal gelesen)
|
minotito Mitglied Student
Beiträge: 31 Registriert: 11.11.2019
|
erstellt am: 27. Nov. 2019 07:49 <-- editieren / zitieren --> Unities abgeben:
Hallo liebe CAD-Community, Ich habe eine Exceltabelle mit einem Makro von Catia, die Punkte oder Splines von der Exceltabelle in Catia generiert (Denke die Tabelle steht jedem zur Verfügung). Ich habe folgendes Problem dabei: Die Punkte, die von der Excel generiert werden, werden in einem neuen Unterpunkt (GeometryFromExcel) generiert. Jedoch ist in meinem Start-Model der Unterpunk "ConnecterReferencePoints" für die generierten Punkte aus der Excel vorgesehen.... Im Makro von der Exceltabelle habe ich auch schon die dafür zuständige Zeile gefunden. Nur weiß ich nicht was ich in der Zeile ändern muss, damit die generierten Punkte direkt in den Unterpunkt "ConnecterReferencePoints" eingefügt werden. In den Bildern sieht man nochmal genau wovon ich rede. Ich bedanke mich im Voraus bei euch. Gruß minotito Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
Beiträge: 695 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 27. Nov. 2019 11:20 <-- editieren / zitieren --> Unities abgeben: Nur für minotito
Moin, wenn du in der markierten Zeile "GeometryFromExcel" durch "ConnecterReferencePoints" ersetzt sollte es eigentlich schon gehen. Voraussetzung ist das dass GeoSet "ConnecterReferencePoints" existiert. Gruß Randle ------------------ Wer für nichts steht, fällt für alles! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
minotito Mitglied Student
Beiträge: 31 Registriert: 11.11.2019
|
erstellt am: 27. Nov. 2019 13:21 <-- editieren / zitieren --> Unities abgeben:
Hallo Randle, danke für die schnelle Antwort. Hab es ausprobiert, der macht mir aber dann einen neuen Geoset mit dem selben Namen. Hab mich nochmal im Makro umgeguckt Set referencebody = PtDoc.Part.CreateReferenceFromObject(myHBody) PtDoc.Part.HybridShapeFactory.ChangeFeatureName referencebody, "GeometryFromExcel" "CreateReferenceFromObject(myHBody)" muss ich denke ich mal ändern, dass er anstelle einer neuen Geoset ein bestehendes auswählt.
Wäre nett wenn du mir da weiterhelfen kannst... Gruß minotito Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
Beiträge: 695 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 27. Nov. 2019 13:41 <-- editieren / zitieren --> Unities abgeben: Nur für minotito
Hallo, dann gehe ich davon aus das es irgendwo eine Zeile mit "HybridBodies.Add" (o.ä.) gibt. Die müsstest du dann auskommentieren. Habe auf diesem Rechner (auf dem ich angemeldet bin) gerade kein CATIA zur Hand. Gruß Randle ------------------ Wer für nichts steht, fällt für alles! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
minotito Mitglied Student
Beiträge: 31 Registriert: 11.11.2019
|
erstellt am: 27. Nov. 2019 13:59 <-- editieren / zitieren --> Unities abgeben:
Hallo, Ja hast recht. Hab es gefunden. Soll ich das einfach als Kommentar da stehen Lassen ? Dann stimmt aber etwas nicht mehr mit dem restlichen Makro ?!? Gruß minotito [Diese Nachricht wurde von minotito am 27. Nov. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
Beiträge: 695 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 27. Nov. 2019 14:12 <-- editieren / zitieren --> Unities abgeben: Nur für minotito
Hallo, dann kopiere dir mal die markierte Zeile aus deinem ersten Bild an die Stelle an der jetzt die Add-Zeile ist. Die Add-Zeile kannst du einfach auskommentieren. Gruß Randle ------------------ Wer für nichts steht, fällt für alles! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
minotito Mitglied Student
Beiträge: 31 Registriert: 11.11.2019
|
erstellt am: 27. Nov. 2019 14:26 <-- editieren / zitieren --> Unities abgeben:
Hallo, jetzt meldet er einen Fehler nach der Zeile: Set myHBody = PtDoc.Part.HybridBodies.Item("Connector_Reference_Points") Gruß minotito [Diese Nachricht wurde von minotito am 27. Nov. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 27. Nov. 2019 17:57 <-- editieren / zitieren --> Unities abgeben: Nur für minotito
Servus minotito Das Makro will auf ein GeoSet mit dem Namen "Connector_Reference_Points" zugreifen. Gibt es das GeoSet? (in deinem Bild ist es ohne Unterstrich geschrieben) Oder soll es angelegt werden? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
minotito Mitglied Student
Beiträge: 31 Registriert: 11.11.2019
|
erstellt am: 28. Nov. 2019 07:40 <-- editieren / zitieren --> Unities abgeben:
Hey Bernd, hab es mal so ausprobiert, wie du es mir empfohlen hast. Geht leider Immer noch nicht. Selbe Fehlermeldung..... Kann ich irgendwie das Makro hier hochladen ? Denke es wäre dann einfacher. Gruß minotito [Diese Nachricht wurde von minotito am 28. Nov. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 28. Nov. 2019 08:20 <-- editieren / zitieren --> Unities abgeben: Nur für minotito
Servus Was ist denn PtDoc (Watch- oder Local-Fenster)? Den Code des Makros am einfachsten hier zwischen CODE-Tags reinkopieren. Gruß Bernd PS: Ich hab kurz mal das original Excel-Makro überflogen. Fehlt da nicht ob wirklich ein PartDocument geöffnet ist? ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
minotito Mitglied Student
Beiträge: 31 Registriert: 11.11.2019
|
erstellt am: 28. Nov. 2019 08:43 <-- editieren / zitieren --> Unities abgeben:
Hey, denke damit ist doch PtDoc definiert oder nicht (Bild) ?
Code: Const Cst_iSTARTCurve As Integer = 1 Const Cst_iENDCurve As Integer = 11 Const Cst_iSTARTLoft As Integer = 2 Const Cst_iENDLoft As Integer = 22 Const Cst_iSTARTCoord As Integer = 3 Const Cst_iENDCoord As Integer = 33 Const Cst_iERRORCool As Integer = 99 Const Cst_iEND As Integer = 9999Const Cst_strSTARTCurve As String = "StartCurve" Const Cst_strENDCurve As String = "EndCurve" Const Cst_strSTARTLoft As String = "StartLoft" Const Cst_strENDLoft As String = "EndLoft" Const Cst_strSTARTCoord As String = "StartCoord" Const Cst_strENDCoord As String = "EndCoord" Const Cst_strEND As String = "End" '------------------------------------------------------------------------ 'To define the kind of elements to create (1: create only points '2: creates points and splines '3: Creates points, splines and loft '------------------------------------------------------------------------ Function GetTypeFile() As Integer Dim strInput As String, strMsg As String choice = 1 GetTypeFile = choice End Function '------------------------------------------------------------------------ 'Get the active cell '------------------------------------------------------------------------ Function GetCell(iindex As Integer, column As Integer) As String Dim Chain As String Sheets("Feuil1").Select If (column = 1) Then Chain = "A" + CStr(iindex) ElseIf (column = 2) Then Chain = "B" + CStr(iindex) ElseIf (column = 3) Then Chain = "C" + CStr(iindex) End If Range(Chain).Select GetCell = ActiveCell.Value End Function Function GetCellA(iRang As Integer) As String GetCellA = GetCell(iRang, 1) End Function Function GetCellB(iRang As Integer) As String GetCellB = GetCell(iRang, 2) End Function Function GetCellC(iRang As Integer) As String GetCellC = GetCell(iRang, 3) End Function '------------------------------------------------------------------------ 'Syntax of the parameter file '------------------------ 'StartCurve -> to start the list of points defining the spline ' double , double , double ' double , double , double -> as many points as necessary to define the spline 'EndCurve -> to end the list of points defining the spline ' ' 'Example: '-------- 'StartCurve ' -10.89, 10 , 46.78 '1.56, 4, 6 'EndCurve -> spline composed of 2 points '------------------------------------------------------------------------ Sub ChainAnalysis(ByRef iRang As Integer, ByRef x As Double, ByRef y As Double, ByRef z As Double, ByRef iValid As Integer) Dim Chain As String Dim Chain2 As String Dim Chain3 As String Chain = GetCellA(iRang) Select Case Chain Case Cst_strSTARTCurve iValid = Cst_iSTARTCurve Case Cst_strENDCurve iValid = Cst_iENDCurve Case Cst_strSTARTLoft iValid = Cst_iSTARTLoft Case Cst_strENDLoft iValid = Cst_iENDLoft Case Cst_strSTARTCoord iValid = Cst_iSTARTCoord Case Cst_strENDCoord iValid = Cst_iENDCoord Case Cst_strEND iValid = Cst_iEND Case Else iValid = 0 End Select If (iValid <> 0) Then Exit Sub End If 'Conversion string -> double Chain2 = GetCellB(iRang) Chain3 = GetCellC(iRang) If ((Len(Chain) > 0) And (Len(Chain2) > 0) And (Len(Chain3) > 0)) Then x = CDbl(Chain) y = CDbl(Chain2) z = CDbl(Chain3) Else iValid = Cst_iERRORCool x = 0# y = 0# z = 0# End If End Sub '------------------------------------------------------------------------ ' Get CATIA Application '------------------------------------------------------------------------ 'Remark: ' When KO, update CATIA registers with: ' CNEXT /unregserver ' CNEXT /regserver '-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Function GetCATIA() As Object Set CATIA = GetObject(, "CATIA.Application") If CATIA Is Nothing Then Set CATIA = CreateObject("CATIA.Application") CATIA.Visible = True End If Set GetCATIA = CATIA End Function '------------------------------------------------------------------------ ' Get CATIADocument '------------------------------------------------------------------------ Function GetCATIAPartDocument() As Object Set CATIA = GetCATIA Dim MyPartDocument As Object Set MyPartDocument = CATIA.ActiveDocument Set GetCATIAPartDocument = MyPartDocument End Function '------------------------------------------------------------------------ ' Creates all usable points from the parameter file '------------------------------------------------------------------------ Sub CreationPoint() 'Get CATIA Dim PtDoc As Object Set PtDoc = GetCATIAPartDocument ' Get the HybridBody Dim myHBody As Object Set myHBody = PtDoc.Part.HybridBodies.Item("GeometryFromExcel") Dim iLigne As Integer Dim iValid As Integer Dim x As Double Dim y As Double Dim z As Double Dim Point As Object iLigne = 1 'Analyze file While iValid <> Cst_iEND 'Read a line ChainAnalysis iLigne, x, y, z, iValid iLigne = iLigne + 1 'Not on a startcurve or endcurve -> valid point If (iValid = 0) Then Set Point = PtDoc.Part.HybridShapeFactory.AddNewPointCoord(x, y, z) myHBody.AppendHybridShape Point End If Wend 'Model update PtDoc.Part.Update End Sub '------------------------------------------------------------------------ 'Main program '------------------------------------------------------------------------ Sub Main() 'Get the type of operations to do: ' Points --> 1 ' Splines + Points --> 2 ' Loft + Splines + Points --> 3 Dim TypeFile As Integer TypeFile = GetTypeFile ' V5R12 - Create dedicate opneBody for created geometry 'Get CATIA Dim PtDoc As Object Set PtDoc = GetCATIAPartDocument ' Create Open body 'Set myHBody = PtDoc.Part.HybridBodies.Add() Set myHBody = PtDoc.Part.HybridBodies.Item("Connector Reference Points") Set referencebody = PtDoc.Part.CreateReferenceFromObject(myHBody) TypeFile = 1 CreationPoint End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 28. Nov. 2019 09:07 <-- editieren / zitieren --> Unities abgeben: Nur für minotito
Servus Und was ist nun das PtDoc? Ein PartDocument oder was? Läuft das Makro wenn Catia gestartet ist und ein PartDocument geöffnet (im eigenen Fenster aktiv ist)? Ich vermute das a) Catia nicht geöffnet ist oder b) ein falschen Dokument geöffnet/aktiv ist Gruß Bernd PS: Schau dir mal die Möglichkeiten des VBA-Editors genauer an (Makro Schrittweise ausführen, Haltemarken, Watch-Fenster, Local-Fenster) ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
minotito Mitglied Student
Beiträge: 31 Registriert: 11.11.2019
|
erstellt am: 28. Nov. 2019 09:51 <-- editieren / zitieren --> Unities abgeben:
Hey Bernd, also PtDoc wurde definiert durch : Set PtDoc = GetCATIAPartDocument GetCATIAPartDocument = MyPartDocument Set MyPartDocument = CATIA.ActiveDocument Das Makro läuft, wenn Excel und das aktive Catia Model/Doc. geöffnet sind.
Das Programm läuft ja ganz normal ( eigentlich). Will nur, dass bei dem Punktegenerieren kein neues Geoset erstellt wird, sonder das bestehende Geoset: Connector Reference Points benutzs wird ( die Punkte in das genannte Geoset generiert werden). Sobald ich versuche etwas am namen zuändern geht es nicht mehr....
Gruß minotito Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 28. Nov. 2019 10:01 <-- editieren / zitieren --> Unities abgeben: Nur für minotito
Servus Ich weiß was du vor hast. Ich will dich in die richtige Richtung lenken, dass du den Fehler das Makro besser verstehst. Hast du das original Makro halbwegs verstanden? Vermutlich müsstest du ja nur die Zeile mit dem erzeugen des GeoSet raus löschen (und die folgenden zum umbenennen) und in der Sub CreationPoint in der Zeile Set myHBody = PtDoc.Part.HybridBodies.Item("GeometryFromExcel") den richtigen Namen des GeoSets anpassen. Denn erst da wird bestimmt wo die Punkte erzeugt werden. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
minotito Mitglied Student
Beiträge: 31 Registriert: 11.11.2019
|
erstellt am: 28. Nov. 2019 10:17 <-- editieren / zitieren --> Unities abgeben:
|