Hallo Forum!
Problem 1:
Ich möchte in Catia ein Makro erstellen (VBA), oder Catia per VBA ansteuern (geht auch aus Excel?). Immer wenn ich dazu in Catia eine Makrobibliothek öffnen oder anlgegen möchte, kommt ein Fehler, dass VBA nicht richtig installiert sei. Nach einiger Recherche habe ich folgendes herausgefunden:
1) Catia V5 R21 ist nicht zu VBA7, wie es mit unserem MS Office2010 ausgeliefert wird kompatibel. Das wäre erst ab R24 der Fall.
2) Der Support von Cenit hat meine Ahnung bestätigt, dass ich VBA6 benötige
3) Zusätzlich scheint Catia (da über Cenit angesteuert) nicht lokal registriert zu sein (was akaik eine weitere Fehlerquelle sein kann).
4) Der "Tick" Catia manuell zu registrieren über CNEXT.exe -register geht nicht, da ich mit der cmd-Zeile nicht auf den Serverpfad komme...
Kann ich VBA6 "nachinstallieren"? Laufen dann VBA6 und VBA7 parallel?
Kann ich Catia auch mittels VBA7 Makro aus Excel ansprechen?
Macht es Sinn, evtl. komplett auf VB.net zu wechseln?
Problem 2:
Eigentlich möchte ich gerne mittels VBA ein Makro erstellen, welches ein (bereits geöffnetes) CATproduct elementeweise durchgeht und mir in Abhängigkeit davon, ob es sich um ein CATproduct oder ein CATpart am aktuellen Punkt der Baumstruktur handelt, verschiedene Werte zurückgibt.
Als CATproduct den PartName und PartDefinition, als CATpart den Partname, Partdefinition, Oberfläche und Volumen.
Die abgefragten Werte sollen dann in ein Excel übertragen werden, wo sie mit weiteren Makros nachbearbeitet werden.
Da meine VBA-Kenntnisse nur rudimentär sind, habe ich mir aus allerlei Codeschnipseln was zusammengebastelt:
_____
Sub CATMain()
version = "1.0"
makroname = "Catia Datenexport"
'Excel instanzieren
Dim Excel As Object
Set Excel = GetObject(, "Excel.Application")
'Abfangen Fehler
If Err.Number <> 0 Then
            Err.Clear
            Set Excel = CreateObject("Excel.Application")
Else
            Err.Clear
            MsgBox "Please note you have to close Excel", vbCritical
            Exit Sub
End If
'Excel Variablen Deklarieren
Set myworkbook = Excel.workbooks.Add
Excel.Worksheets.Add After:=Sheets(Sheets.Count)
Excel.ActiveWorksheet.Name = "Catia-Daten"
Excel.Application.Visible = True
' Datenübertragung an Excel
'Excel.ActiveWorksheet.Range...???
'Zellen formatieren
Excel.Range("A:A").ColumnWidth = 5
Excel.Range("B:B").ColumnWidth = 30
Excel.Range("C:L").ColumnWidth = 15
Excel.Range("A:L").Font.Name = "Arial"
Excel.Range("A:L").Font.Size = 10
'mehr Zellenformatierung
Excel.Range("1:1").Font.Bold = True
Excel.Range("1:1").RowHeight = 20
Excel.Range("1:1").Font.Size = 11
    
'Erste Reihe
Excel.Cells(1, 1) = "Materialnummer"
Excel.Cells(1, 2) = "Teilenummer"
Excel.Cells(1, 3) = "Name"
Excel.Cells(1, 4) = "Fläche"
Excel.Cells(1, 5) = "Volumen"
Ecxel.Cells(1, 6) = "Gewicht"
'CATIA Initialisierung
Dim objSPAWkb
Set objSPAWkb = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench")
Dim Dkmnt As Document
Set Dkmnt = CATIA.ActiveDocument
Dim partDoc As Object
Set partDoc = CATIA.ActiveDocument.Part
Dim productDoc As Object
Set productDoc = CATIA.ActiveDocument.Product
Dim bodyNumber As Integer
bodyNumber = productDoc.Products.Count
Dim RwNum As Integer
RwNum = 1
'Schleife durch alle Baugruppen, Unterbaugruppen und Einzelteile
Dim i As Integer
'Zugriff auf Metadaten eines CATParts oder CATProducts über das Ankerobjekt "Product" der Klasse "PartDocument"
'Schleife durch alle Komponenten
    For i = 1 To CATIA.ActiveDocument.Product.Count
    
    'Abfrage nach Part oder Product und Schreiben der Werte in Excel
    'Eventuell besser über CASE zu regeln...
    
        'Select Case [CATIA.Documents.Item(i).Name]
        'Case (Right(CATIA.Documents.Item(i).Name, 10) = "CATProduct")
        If (Right(CATIA.Documents.Item(i).Name, 10) = "CATProduct") Then
        
        'Deklaration der Objekte
            Dim prod1 As Product
            Dim ProdName As String
            Dim ProductNumber As String
            
            Set prod1 = CATIA.Documents.Item(i).Product
        'Produktnamen abfragen
            ProdName = prod1.Definition
        'Produktnummer abfragen
            ProdNumber = prod1.PartNumber
            
        'Element unsichtbar setzen
            prod1.SetShow catVisPropertyNoShowAfter
        
        'Datenübergabe an Excel
            'Excel.Cells(RwNum + 1, 1) = i
            Excel.Cells(RwNum + 1, 2) = ProdNnumber
            Excel.Cells(RwNum + 1, 3) = ProdName
            
            RwNum = RwNum + 1
        
        'Case (Right(CATIA.Documents.Item(i).Name, 7) = "CATPart")
        ElseIf (Right(CATIA.Documents.Item(i).Name, 7) = "CATPart") Then
        
        'Deklaration der Objekte
            Dim part1 As Part
            Dim PNumber As String
            Dim PName As String
            Dim PArea As Object
            Dim PVolume As Object
            Dim PMass As Object
            
        'Platzhalter auf das i-te Element setzen
            Set part1 = CATIA.ActiveDocument.Item(i)
        'get "Part Number"
            PNumber = part1.PartNumber
        'get "Definition"
            PName = part1.Definition
        'get "volume"
            PArea = part1.Analyze.WetArea
        'get "surface"
            PVolume = part1.Analyze.Volume
        'get "weight"
            PWeight = part1.Analyze.Mass
            
        'Element unsichtbar setzen
            part1.SetShow catVisPropertyNoShowAfter
            
        ' Row two
            Excel.Cells(RwNum + 1, 1) = i
            Excel.Cells(RwNum + 1, 2) = PName
            Excel.Cells(RwNum + 1, 3) = PNumber
            Excel.Cells(RwNum + 1, 4) = PArea
            Excel.Cells(RowNum + 1, 5) = PVolume
            Ecxel.Cells(RowNum + 1, 6) = PMass
        
            RwNum = RwNum + 1
            
        'Case Else
            'Next
        End If
        'End Select
        
    Next i
Excel.ActiveWorkbook.Name = Excel.Cells(1, 3).Value
'User Interface: Save result?
If MsgBox("Fertig! Ergebnis speichern?" + makroname + "" + version, _
    vbYesNo Or vbQuestion, "Sicherung") = vbYes Then
    Dim Erfolg As Boolean
    Erfolg = Excel.Application.Dialogs(xlDialogSaveAs).Show(arg1:=Excel.ActiveWorkbook.Name) 'file name = product name
    If Not Erfolg Then
    MsgBox "Keine Datei Ausgewählt. Nicht gespeichert!"
    End If
End If
MsgBox "Makro ist beendet", 64, makroname + "" + version
End Sub
_____
[Diese Nachricht wurde von felix302 am 10. Okt. 2018 editiert.]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP