Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Material nach Combobox zuweisen

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
Autor Thema:  Material nach Combobox zuweisen (5349 mal gelesen)
weylin
Mitglied



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

Beiträge: 25
Registriert: 16.06.2010

Catia V5 R18
Win 7
Core 2 Quad 2,4 Ghz

erstellt am: 28. Jun. 2010 14: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

Hallo,

ich habe mit ein VBA-Makro geschrieben, welches mir aus meiner eigenen Materialdatenbank alle Materialien in eine ComboBox einfügt,
und nach Auswahl über die Codezeilen:

Code:
Dim strParam1 As StrParam
Set strParam1 = parameters2.Item("Part1\Material")
strParam1.Value = Userform1.ComboBox1.Value

auch einfügt.
Allerdings gefällt mir diese Art der Materialübergabe nicht.

Vorgestellt habe ich mir

Code:
Set oManager = part1.GetItem("CATMatManagerVBExt")
    Dim Eingabe As String
   
    Dim Return1 As Material
    Eingabe = Userform1.ComboBox1.Value
    Set Return1 = cMaterials_list.GetItem(Eingabe)          'Hier kommt der Fehler: Objekt unterstützt diese Aktion nicht
    linkMode = 0
    oManager.ApplyMaterialOnPart part1, return1, linkMode

Also die Materialübergabe wollte ich mit ApplyMaterialonPart durchführen
aber das funktioniert so leider nicht.

Mein restlicher Code sieht eigentlich wie dieser hier aus  http://ww3.cad.de/foren/ubb/Forum137/HTML/001194.shtml
nur mit zwei Schleifen erweitert in denen die ifamily_no und die imaterial_no durchgezählt werden
und dann entsprechend mit omaterial1.name in die Combobox geladen werden.

Vielen Dank für euere Hilfe im Vorraus
Lg Weylin

Edit: Ziel ist es also (zusammenfassend), dass durch die Eingabe des Materialnamens als String ( in der Combobox),
die Familiennummer und Materialnummer in der Materialdatenbank ausgelesen wird und anschließend über den ApplyMaterialonPart das Material geändert wird.
Der Befehl funktioniert, wenn ich die Materialfamiliennummer und die Materialnummer fest definier aber sobald der Input ein String ist mit nur dem Materialnamen kommt der Fehler.

[Diese Nachricht wurde von weylin am 28. Jun. 2010 editiert.]

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

Lusilnie
Mitglied



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

Beiträge: 1486
Registriert: 13.07.2005

erstellt am: 28. Jun. 2010 23:47    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 weylin 10 Unities + Antwort hilfreich

Hallo weylin,

probiere es doch mal wie folgt:

Code:
Set Return1 = cMaterials_list.Item(Eingabe)


mfg,
Lusilnie

------------------
Alle Aussagen zu DassaultSystemes-Produkten sind sehr optimistisch, selbst diese!!!

frei nach größeren Geistern

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

weylin
Mitglied



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

Beiträge: 25
Registriert: 16.06.2010

Catia V5 R18
Win 7
Core 2 Quad 2,4 Ghz

erstellt am: 30. Jun. 2010 14:01    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

Hallo Lusilnie

hat leider auch nicht funktioniert. Als Fehler kommt nun "Die Methode 'Item' für das Objekt 'Materials' ist fehlgeschlagen."

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 30. Jun. 2010 22:11    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 weylin 10 Unities + Antwort hilfreich

Servus
Zitat aus der Doku zum Objekt "Materials": 
Zitat:

Func Item( CATVariant  iIndex) As CATIAMaterial 

Returns a material from its index in the Material collection.
iIndex
The index of the material to retrieve in the collection of materials. Compared with other collections, you cannot use the name of the material as argument.



Somit kannst du dass Material nicht über den Namen ansprechen.

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

[Diese Nachricht wurde von bgrittmann am 30. Jun. 2010 editiert.]

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

Lusilnie
Mitglied



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

Beiträge: 1486
Registriert: 13.07.2005

erstellt am: 30. Jun. 2010 23:32    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 weylin 10 Unities + Antwort hilfreich

Hallo allerseits!

@bgrittmann:
So ist das halt mit der Dokumentation, nicht immer stimmt das, was da steht. Wer viel programmiert und auf dieses "Nachschlagewerk" zurückgreifen muss, der wird dies wissen. Ich habe nicht nachgelesen sondern getestet. Und auch der heutige Test bestätigt dies: Es funktioniert in R17!

@weylin:
Dein Problem wird wahrscheinlich die vorherige richtige Auswahl der Material-Familie sein. Wähle ich ein Material, dass nicht Teil der aktuell gewählten Familie ist, bekomme ich den gleichen Fehler. Allerdings hattest Du hier keinen Code davon aufgezeigt, wodurch man auch nicht auf diesen Fehler hinweisen konnte!
Falls Du nicht klar kommst, poste doch hier den Code für die Auswahl der Material-Familie. Dann können wir Dir sicher helfen!


mfg,
Lusilnie

------------------
Alle Aussagen zu DassaultSystemes-Produkten sind sehr optimistisch, selbst diese!!!

frei nach größeren Geistern

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

weylin
Mitglied



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

Beiträge: 25
Registriert: 16.06.2010

Catia V5 R18
Win 7
Core 2 Quad 2,4 Ghz

erstellt am: 02. Jul. 2010 11:35    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

Hallo
ich poste mal meinen ganzen Code rein, da der Fehler offensichtlich auch wo anders liegen könnte:

Code:
Sub CATMain()


Dim partDocument1 As PartDocument
Set partDocument1 = CATIA.ActiveDocument

Dim part1 As Part
Set part1 = partDocument1.Part

Dim parameters1 As Parameters
Set parameters1 = part1.Parameters
  Dim sFilePath As String
    sFilePath = CATIA.SystemService.Environ("CATDocView")

sFilePath = "C:\Temp\MeinCatalog.CATMaterial"

    Dim oMaterial_document As Document
    Set oMaterial_document = CATIA.Documents.Open(sFilePath)
    Set oMaterial_document = CATIA.ActiveDocument

    Dim cFamilies_list As MaterialFamilies
    Set cFamilies_list = oMaterial_document.Families

    Dim iNb_families As Integer
    iNb_families = cFamilies_list.Count
    Dim sFamiliesName As String
    sFamiliesName = cFamilies_list.Name
 
    Dim oFirst_family As MaterialFamily
    Dim ifamily_no As Variant
    Dim I As Integer
    Dim imaterial_no As Variant

    Dim J As Integer
    I = 0

Do
I = I + 1
J = 0
ifamily_no = I

    Dim List_Anzahl As Long
    List_Anzahl = cFamilies_list.Count
 
Do
J = J + 1
    Set oFirst_family = cFamilies_list.Item(ifamily_no)
    Dim sFamilyName As String
    sFamilyName = oFirst_family.Name
   
    Dim cMaterials_list As Materials
    Set cMaterials_list = oFirst_family.Materials

    Dim iNb_materials As Integer
    iNb_materials = cMaterials_list.Count
   
    Dim Mat_Anzahl As Long
    Mat_Anzahl = cMaterials_list.Count


   
    imaterial_no = J
    Dim Material1 As Material
    Set Material1 = cMaterials_list.Item(imaterial_no)
    Dim Ausgabe As String
    Ausgabe = Material1.Name
   
 

    Dim parameters2 As Parameters
    Set parameters2 = part1.Parameters
   

Userform1.ComboBox1.AddItem (Ausgabe)

Loop Until (imaterial_no = Mat_Anzahl)                                '(IsMissing(imaterial_no + 1) = True)
Loop Until (ifamily_no = List_Anzahl)

  oMaterial_document.Close
 
part1.Update

Userform1.Show

Set oManager = part1.GetItem("CATMatManagerVBExt")
    Dim Eingabe As String
   
    Dim Return1 As Material
    Eingabe = Userform1.ComboBox1.Value
    Set Return1 = cMaterials_list.GetItem(Eingabe)          'Hier kommt der Fehler: Objekt unterstützt diese Aktion nicht
    linkMode = 0
    oManager.ApplyMaterialOnPart part1, return1, linkMode
End Sub


Danke für euere Hilfe

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

Lusilnie
Mitglied



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

Beiträge: 1486
Registriert: 13.07.2005

erstellt am: 04. Jul. 2010 01:34    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 weylin 10 Unities + Antwort hilfreich

Hallo weylin,

es ist genau so. wie ich dachte. So wie Du das abarbeitest, kannst Du nur Materialien aus der letzten eingelesenen Familie nutzen. Das muss anders gelöst werden!
Weiterhin ergibt sich aus Deinem Code noch ein anderer Fehler: Du schließt das Material-Dokument vor der Zuweisung. Das funktioniert nicht oder nicht immer(?), je nach Einstellung der Settings!

Ich habe den Code mal angepasst:

Code:
Sub CATMain()
   
    Dim partDocument1 As PartDocument
    Set partDocument1 = CATIA.ActiveDocument
   
    Dim part1 As Part
    Set part1 = partDocument1.Part
   
    Dim parameters1 As Parameters
    Set parameters1 = part1.Parameters
    Dim sFilePath As String
    sFilePath = CATIA.SystemService.Environ("CATDocView")
   
    sFilePath = "C:\Temp\MeinCatalog.CATMaterial"
   
    Dim oMaterial_document As Document
    Set oMaterial_document = CATIA.Documents.Open(sFilePath)
    Set oMaterial_document = CATIA.ActiveDocument
   
    Dim cFamilies_list As MaterialFamilies
    Set cFamilies_list = oMaterial_document.Families
   
    Dim iNb_families As Integer
    iNb_families = cFamilies_list.Count
    Dim sFamiliesName As String
    sFamiliesName = cFamilies_list.Name
   
    Dim oFirst_family As MaterialFamily
    Dim ifamily_no As Variant
    Dim I As Integer
    Dim imaterial_no As Variant
   
    Dim J As Integer
    I = 0
   
    Dim aMaterialArray()
    Dim A As Integer
    A = 0
    ReDim aMaterialArray(A)
   
    Do
        I = I + 1
        J = 0
        ifamily_no = I
       
        Dim List_Anzahl As Long
        List_Anzahl = cFamilies_list.Count
       
        Do
            J = J + 1
            Set oFirst_family = cFamilies_list.Item(ifamily_no)
            Dim sFamilyName As String
            sFamilyName = oFirst_family.Name
           
            Dim cMaterials_list As Materials
            Set cMaterials_list = oFirst_family.Materials
           
            Dim iNb_materials As Integer
            iNb_materials = cMaterials_list.Count
           
            Dim Mat_Anzahl As Long
            Mat_Anzahl = cMaterials_list.Count
           
            imaterial_no = J
            Dim Material1 As Material
            Set Material1 = cMaterials_list.Item(imaterial_no)
            Dim Ausgabe As String
            Ausgabe = Material1.Name
           
            A = A + 1
            ReDim Preserve aMaterialArray(A)
            aMaterialArray(A) = Ausgabe & ";" & sFamilyName
           
            Dim parameters2 As Parameters          ' Wozu?
            Set parameters2 = part1.Parameters    ' Wozu?
           
            Userform1.ComboBox1.AddItem (Ausgabe)
           
        Loop Until (imaterial_no = Mat_Anzahl)        '(IsMissing(imaterial_no + 1) = True)
   
    Loop Until (ifamily_no = List_Anzahl)
   
    'oMaterial_document.Close
   
    'part1.Update
   
    Userform1.Show
   
    Set oManager = part1.GetItem("CATMatManagerVBExt")
    Dim Eingabe As String
   
    Dim Return1 As Material
    Eingabe = Userform1.ComboBox1.Value
   
    Dim K As Integer
    Dim aList(1)
    Dim L As Integer
   
    For K = 1 To A
        For L = 0 To 1
            aList(L) = Split(aMaterialArray(K), ";")(L)
        Next
        If aList(0) = Eingabe Then
            Set Return1 = oMaterial_document.Families.Item(aList(1)).Materials.Item(aList(0))
            Exit For
        End If
    Next
   
    linkMode = 0
    oManager.ApplyMaterialOnPart part1, Return1, linkMode

    oMaterial_document.Close   

    part1.Update

End Sub


Ich lese die Materialien mit Name und "Familien-Name" in ein Array und weise dann das ausgewählte Material aus der gespeicherten Material-Familie zu.


mfg,
Lusilnie

------------------
Alle Aussagen zu DassaultSystemes-Produkten sind sehr optimistisch, selbst diese!!!

frei nach größeren Geistern

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

weylin
Mitglied



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

Beiträge: 25
Registriert: 16.06.2010

Catia V5 R18
Win 7
Core 2 Quad 2,4 Ghz

erstellt am: 05. Jul. 2010 09:47    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

Super vielen dank dir
hat wunderbar funktioniert.

Eine Frage hätt ich noch:

Könnte man das auch sortieren in der Combobox ? Also das die Materialien Alphabetisch von oben nach unten gelistet werden?

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 05. Jul. 2010 09:56    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 weylin 10 Unities + Antwort hilfreich

Servus
Wenn du die Material eh schon in einem Array drin hast kannst du einfach einen Sortier-Algorithmus drüber laufen lassen (zB Bubbel-Sort siehe Inet-Suche zB bei Wikipedia)

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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

weylin
Mitglied



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

Beiträge: 25
Registriert: 16.06.2010

Catia V5 R18
Win 7
Core 2 Quad 2,4 Ghz

erstellt am: 06. Jul. 2010 10:27    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

Sortiere ich dann nicht nur das Array aber nicht die Combobox??

Code:

Sub CATMain()
   
    Dim partDocument1 As PartDocument
    Set partDocument1 = CATIA.ActiveDocument
   
    Dim part1 As Part
    Set part1 = partDocument1.Part
   
    Dim parameters1 As Parameters
    Set parameters1 = part1.Parameters
    Dim sFilePath As String
    sFilePath = CATIA.SystemService.Environ("CATDocView")
   
    sFilePath = "C:\Temp\MeinCatalog.CATMaterial"
   
    Dim oMaterial_document As Document
    Set oMaterial_document = CATIA.Documents.Open(sFilePath)
    Set oMaterial_document = CATIA.ActiveDocument
   
    Dim cFamilies_list As MaterialFamilies
    Set cFamilies_list = oMaterial_document.Families
   
    Dim iNb_families As Integer
    iNb_families = cFamilies_list.Count
    Dim sFamiliesName As String
    sFamiliesName = cFamilies_list.Name
   
    Dim oFirst_family As MaterialFamily
    Dim ifamily_no As Variant
    Dim I As Integer
    Dim imaterial_no As Variant
   
    Dim J As Integer
    I = 0
   
    Dim aMaterialArray()
    Dim A As Integer
    A = 0
    ReDim aMaterialArray(A)
   
    Do
        I = I + 1
        J = 0
        ifamily_no = I
       
        Dim List_Anzahl As Long
        List_Anzahl = cFamilies_list.Count
       
        Do
            J = J + 1
            Set oFirst_family = cFamilies_list.Item(ifamily_no)
            Dim sFamilyName As String
            sFamilyName = oFirst_family.Name
           
            Dim cMaterials_list As Materials
            Set cMaterials_list = oFirst_family.Materials
           
            Dim iNb_materials As Integer
            iNb_materials = cMaterials_list.Count
           
            Dim Mat_Anzahl As Long
            Mat_Anzahl = cMaterials_list.Count
           
            imaterial_no = J
            Dim Material1 As Material
            Set Material1 = cMaterials_list.Item(imaterial_no)
            Dim Ausgabe As String
            Ausgabe = Material1.Name
           
            A = A + 1
            ReDim Preserve aMaterialArray(A)
            aMaterialArray(A) = Ausgabe & ";" & sFamilyName
           
  For X = UBound(aMaterialArray) - 1 To LBound(aMaterialArray) Step -1
    ' Alle links davon liegenden Zeichen auf richtige Sortierung
    ' der jeweiligen Nachfolger überprüfen:
    For Y = LBound(aMaterialArray) To X
      ' Ist das aktuelle Element seinem Nachfolger gegenüber korrekt sortiert?
      If aMaterialArray(Y) > aMaterialArray(Y + 1) Then
        ' Element und seinen Nachfolger vertauschen.
        vTemp = aMaterialArray(Y)
        aMaterialArray(Y) = aMaterialArray(Y + 1)
        aMaterialArray(Y + 1) = vTemp

      End If
    Next Y
  Next X
           
            Userform1.ComboBox1.AddItem (Ausgabe)
           
        Loop Until (imaterial_no = Mat_Anzahl)        '(IsMissing(imaterial_no + 1) = True)
   
    Loop Until (ifamily_no = List_Anzahl)
   
    'oMaterial_document.Close
   
    'part1.Update
   
    Userform1.Show
   
    Set oManager = part1.GetItem("CATMatManagerVBExt")
    Dim Eingabe As String
   
    Dim Return1 As Material
    Eingabe = Userform1.ComboBox1.Value
   
    Dim K As Integer
    Dim aList(1)
    Dim L As Integer
   
    For K = 1 To A
        For L = 0 To 1
            aList(L) = Split(aMaterialArray(K), ";")(L)
        Next
        If aList(0) = Eingabe Then
            Set Return1 = oMaterial_document.Families.Item(aList(1)).Materials.Item(aList(0))
            Exit For
        End If
    Next
   
    linkMode = 0
    oManager.ApplyMaterialOnPart part1, Return1, linkMode
    oMaterial_document.Close   

    part1.Update

End Sub


So hab ich den Bubblesort im Internet gefunden.
VBA bringt zwar keine Fehler sortiert aber auch nicht.
Hab schon damit rumprobiert aber bin noch nciht auf die Lösung gekommen.

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

zoltan.bekesi
Mitglied



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

Beiträge: 321
Registriert: 22.10.2006

Job:
CATIA V5R19 / XP 32bit
MS Office 2003
Microstation V8 2004 Edition
DELL Precision M6300

erstellt am: 06. Jul. 2010 18:41    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 weylin 10 Unities + Antwort hilfreich

Hallo,

deine Reihenfolge ist falsch.
Die Schritte müssen wie folgt ausgeführt sein:
1) Mit den Schleifen den Array füllen
2) Sortieralgorithmus auf Array laufen lassen
3) Mit einer weiteren Schleife Combobox füllen. (Ähnlich wie die äußere im Sortierer, nur nicht rückwärts durchlaufen)

Hoffe, es ist klarer.

Gruß,
Zoltan

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

weylin
Mitglied



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

Beiträge: 25
Registriert: 16.06.2010

Catia V5 R18
Win 7
Core 2 Quad 2,4 Ghz

erstellt am: 08. Jul. 2010 15:50    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

Hallo 
Danke zoltan für deinen Tipp das hat mich weitergebracht.
Allerdings bin ich immer noch nciht ganz bei der Lösung
2 Probleme hab ich noch:

1. Mir fällt keine Abbruchbedinung für die Combobox-befüllung ein
2. Bringt er nurn bei der Materialübergabe einen Fehler, warum weis ich leider nicht

Code:
Sub CATMain()
   
    Dim partDocument1 As PartDocument
    Set partDocument1 = CATIA.ActiveDocument
   
    Dim part1 As Part
    Set part1 = partDocument1.Part
   
    Dim parameters1 As Parameters
    Set parameters1 = part1.Parameters
    Dim sFilePath As String
    sFilePath = CATIA.SystemService.Environ("CATDocView")
   
    sFilePath = "C:\Temp\MeinCatalog.CATMaterial"
   
    Dim oMaterial_document As Document
    Set oMaterial_document = CATIA.Documents.Open(sFilePath)
    Set oMaterial_document = CATIA.ActiveDocument
   
    Dim cFamilies_list As MaterialFamilies
    Set cFamilies_list = oMaterial_document.Families
   
    Dim iNb_families As Integer
    iNb_families = cFamilies_list.Count
    Dim sFamiliesName As String
    sFamiliesName = cFamilies_list.Name
   
    Dim oFirst_family As MaterialFamily
    Dim ifamily_no As Variant
    Dim I As Integer
    Dim imaterial_no As Variant
   
    Dim J As Integer
    I = 0
   
    Dim aMaterialArray()
    Dim A As Integer
    A = 0
    ReDim aMaterialArray(A)
   
    Do
        I = I + 1
        J = 0
        ifamily_no = I
       
        Dim List_Anzahl As Long
        List_Anzahl = cFamilies_list.Count
       
        Do
            J = J + 1
            Set oFirst_family = cFamilies_list.Item(ifamily_no)
            Dim sFamilyName As String
            sFamilyName = oFirst_family.Name
           
            Dim cMaterials_list As Materials
            Set cMaterials_list = oFirst_family.Materials
           
            Dim iNb_materials As Integer
            iNb_materials = cMaterials_list.Count
           
            Dim Mat_Anzahl As Long
            Mat_Anzahl = cMaterials_list.Count
           
            imaterial_no = J
            Dim Material1 As Material
            Set Material1 = cMaterials_list.Item(imaterial_no)
            Dim Ausgabe As String
            Ausgabe = Material1.Name
           
            A = A + 1
            ReDim Preserve aMaterialArray(A)
            aMaterialArray(A) = Ausgabe '& ";" & sFamilyName
           
   
         
           
        Loop Until (imaterial_no = Mat_Anzahl)
   
    Loop Until (ifamily_no = List_Anzahl)
   
    For X = UBound(aMaterialArray) - 1 To LBound(aMaterialArray) Step -1
    ' Alle links davon liegenden Zeichen auf richtige Sortierung
    ' der jeweiligen Nachfolger überprüfen:
    For Y = LBound(aMaterialArray) To X
      ' Ist das aktuelle Element seinem Nachfolger gegenüber korrekt sortiert?
      If aMaterialArray(Y) > aMaterialArray(Y + 1) Then
        ' Element und seinen Nachfolger vertauschen.
        vTemp = aMaterialArray(Y)
        aMaterialArray(Y) = aMaterialArray(Y + 1)
        aMaterialArray(Y + 1) = vTemp
      End If
    Next Y
  Next X

Dim Ausgabe1 As String
Dim v As Integer
v = 0

Do
v = v + 1
Ausgabe1 = aMaterialArray(v)

userform1.ComboBox1.AddItem (Ausgabe1)

Loop Until v = 15                          'Abbruch bedingung ???

    userform1.Show
   
    Set oManager = part1.GetItem("CATMatManagerVBExt")
    Dim Eingabe As String
   
    Dim Return1 As Material
    Eingabe = userform1.ComboBox1.Value
   
    Dim K As Integer
    Dim aList(1)
    Dim L As Integer
   
    For K = 1 To A
        For L = 0 To 1
            aList(L) = Split(aMaterialArray(K), ";")(L)                'Fehler index außerhalb des gültogen Bereichs
     
        Next
        If aList(0) = Eingabe Then
            Set Return1 = oMaterial_document.Families.Item(aList(1)).Materials.Item(aList(0))
            Exit For
        End If
    Next
   
    LinkMode = 0
    oManager.ApplyMaterialOnPart part1, Return1, LinkMode
    oMaterial_document.Close

    part1.Update

End Sub


Wär super wenn jemand eine Idee zu den Problemen hätte
Dank euch schonmal im Vorraus

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

HoBLila
Mitglied
Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx


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

Beiträge: 1118
Registriert: 29.05.2008

DELL PRECISION T3500
Intel(R) Xeon(R) CPU W3540 @ 2.93GHz
12285 MB RAM
NVIDIA Quadro FX 1800
Microsoft Windows 7 Enterprise Service Pack 1
CATIA V5 R19 SP09 HF69
VB6.5
CAA RADE CDC

erstellt am: 08. Jul. 2010 16:55    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 weylin 10 Unities + Antwort hilfreich

Hallo,

ich habe die Diskussion nicht ganz verfolgt und mir den Code auch nicht angeschaut, aber die Fehlermeldung sagt aus, dass Du auf Element eines Arrays zugreifen möchtest, welches es nicht gibt, glaube ich. 

ich mute daher:

Code:

aList(L) = Split(aMaterialArray(K), ";")(L)


Entweder es gibt in aMaterialArray(K) kein ";" oder es gibt kein aMaterialArray(K), also K könnte zu groß sein.

Schau's Dir bitte im Debugger an, wenn der Fehler auftritt springste dann ja auch an die Stelle im Pause-Modus.
Dann einfach aMaterialArray(K) markieren und in die Watchlist ziehen via Drag & Drop. Die Watchlist unter Ansicht anschalten.

------------------
Mit freundlichen Grüßen,
Henry Schneider
alias Lila

Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren:
Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen,
die Natur versucht, immer bessere Idioten zu bauen

Xing

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

weylin
Mitglied



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

Beiträge: 25
Registriert: 16.06.2010

Catia V5 R18
Win 7
Core 2 Quad 2,4 Ghz

erstellt am: 09. Jul. 2010 10:29    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

Hab die Lösungen gefunden 
Bei der Materialübergabe hatte Hoblila recht ( Danke für deine Hilfe  )
Und ein weiterer Fehler war noch drin bei dem Befüllen der Combobox hab ich das Array nicht gesplittet
sodass der Material und familie übergeben hatte (wobei die familie im weiteren codeverlauf ja explizit weggelassen wurde  )
Danke euch allen nochmal für euere Hilfe

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

K.Siebert
Mitglied
Tech Zeichner


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

Beiträge: 415
Registriert: 19.05.2007

Win XP
Catia V5 R19
Catia V5 R24

erstellt am: 16. Mai. 2013 18:47    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 weylin 10 Unities + Antwort hilfreich


Fehler.jpg

 
Hallo Leute,
ich hole mal den Beitrag hervor, weil ich einfach nicht weiterkomme.
Da ich kein VB habe dachte ich mir, gut für ein CATScript ein paar Variablen und ein Auswahl Fester für das Material bekomme ich schon hin. Ja das habe ich auch Geschaft.
Aber jetzt komme ich einfach nicht mehr weiter, könnte mir da jemand helfen?
Ich weiß nicht wo der Fehler ist. Auch ein Versuch mit V5Automation.chm den Fehler zu lokalisieren ist gescheitert.
Na ja ich hoffe ihr könnt mir helfen.

Code:
'CATScript

Sub CATMain()
   
    Dim partDocument1 As PartDocument
    Set partDocument1 = CATIA.ActiveDocument
   
    Dim part1 As Part
    Set part1 = partDocument1.Part
   
    Dim parameters1 As Parameters
    Set parameters1 = part1.Parameters
    Dim sFilePath As String
    sFilePath = CATIA.SystemService.Environ("CATDocView")
   
    sFilePath = "\\SRVSBS2011\Catia_Produktion\Aufträge\_STANDARTS + VORLAGEN\Material\Werner.CATMaterial"
   
    Dim oMaterial_document As Document
    Set oMaterial_document = CATIA.Documents.Open(sFilePath)
    Set oMaterial_document = CATIA.ActiveDocument
   
    Dim cFamilies_list As MaterialFamilies
    Set cFamilies_list = oMaterial_document.Families
   
    Dim iNb_families As Integer
    iNb_families = cFamilies_list.Count
    Dim sFamiliesName As String
    sFamiliesName = cFamilies_list.Name
   
    Dim oFirst_family As MaterialFamily
    Dim ifamily_no As Variant
    Dim I As Integer
    Dim imaterial_no As Variant
   
    Dim J As Integer
    I = 0
   
    Dim aMaterialArray()
    Dim A As Integer
    A = 0
    ReDim aMaterialArray(A)

'************************************************************************************************************************
    Dim u As Integer
    u=0

    Dim s As String

'***********************************************************************************************************************   

    Do
        I = I + 1
        J = 0
        ifamily_no = I
       
        Dim List_Anzahl As Long
        List_Anzahl = cFamilies_list.Count
       
        Do
            J = J + 1
            Set oFirst_family = cFamilies_list.Item(ifamily_no)
            Dim sFamilyName As String
            sFamilyName = oFirst_family.Name
           
            Dim cMaterials_list As Materials
            Set cMaterials_list = oFirst_family.Materials
           
            Dim iNb_materials As Integer
            iNb_materials = cMaterials_list.Count
           
            Dim Mat_Anzahl As Long
            Mat_Anzahl = cMaterials_list.Count
           
            imaterial_no = J
            Dim Material1 As Material
            Set Material1 = cMaterials_list.Item(imaterial_no)
            Dim Ausgabe As String
            Ausgabe = Material1.Name
           
            A = A + 1
            ReDim Preserve aMaterialArray(A)
            aMaterialArray(A) = Ausgabe '& ";" & sFamilyName
           
   
         
           
        Loop Until (imaterial_no = Mat_Anzahl)
   
    Loop Until (ifamily_no = List_Anzahl)
   
    For X = UBound(aMaterialArray) - 1 To LBound(aMaterialArray) Step -1
    ' Alle links davon liegenden Zeichen auf richtige Sortierung
    ' der jeweiligen Nachfolger überprüfen:
    For Y = LBound(aMaterialArray) To X
      ' Ist das aktuelle Element seinem Nachfolger gegenüber korrekt sortiert?
      If aMaterialArray(Y) > aMaterialArray(Y + 1) Then
        ' Element und seinen Nachfolger vertauschen.
        vTemp = aMaterialArray(Y)
        aMaterialArray(Y) = aMaterialArray(Y + 1)
        aMaterialArray(Y + 1) = vTemp
      End If
    'Next Y
    Next
  'Next X
  Next
Dim Ausgabe1 As String
Dim v As Integer
v = 0

Do
v = v + 1
Ausgabe1 = aMaterialArray(v)

'************************************ Liste fuer das Menu ***************************************************
   'msgbox "Ausgabe: " & Ausgabe1

u = u + 1
s = s & u & ". " & Ausgabe1 & Chr(10) & Chr(10)

'************************************ Liste fuer das Menu ***************************************************


'userform1.ComboBox1.AddItem (Ausgabe1)


Loop Until v = 15                          'Abbruch bedingung ???

    'userform1.Show

'**************************************** InputBox mit auswahl (nur Nr.) ************************************
DasMenu = "Wähle ein Material aus:" +Chr(10)+_
" "+Chr(10)+_
s 'liste fuer die Auswahl (InputBox)

Antwort = InputBox(DasMenu,"Auswahl:")
If IsNumeric(Antwort) then

'msgbox  Antwort
 
End If
 
'**************************************** InputBox mit auswahl (nur Nr.) ************************************
   
    Set oManager = part1.GetItem("CATMatManagerVBExt")
    Dim Eingabe As String
    Dim LinkMode As Integer


   
    Dim Return1 As Material


    'Eingabe = userform1.ComboBox1.Value

'********* mit der Antwort von Inputbox das Material von ArrayList holen ************************************

Eingabe = aMaterialArray(Antwort)
'Msgbox "Eingabe: " &  Eingabe

'********* mit der Antwort von Inputbox das Material von ArrayList holen ************************************

    Dim K As Integer
    Dim aList(1)
    Dim L As Integer
   
    For K = 1 To A
        For L = 0 To 1
            'aList(L) = Split(aMaterialArray(K), ";")(L)                'Fehler index außerhalb des gültogen Bereichs
           aList(L) = Eingabe
'Msgbox "aList(L): " &  Eingabe
        Next
        If aList(0) = Eingabe Then
            Set Return1 = oMaterial_document.Families.Item(aList(1)).Materials.Item(aList(0))
            Exit For
        End If
    Next
   
    LinkMode = 0
    oManager.ApplyMaterialOnPart part1, Return1, LinkMode
    oMaterial_document.Close

    part1.Update

End Sub


------------------
Sei Schlau bleib Dumm !!?!!

[Diese Nachricht wurde von K.Siebert am 16. Mai. 2013 editiert.]

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 16. Mai. 2013 19:03    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 weylin 10 Unities + Antwort hilfreich

Servus
Welche Werte haben "aList(1)" und "aList(0)"? Gibt es diese Familie bzw Material?
ggf musst den String des Arrays casten (in einen iteger).

Gruß
Bernd

EDIT: Auf welche Familie willst du zugreifen? In der Auswahl hast du die Familien entfernt, trotzdem wird in der Zeile in der der Fehler kommt eine Familien über aList1 definiert

------------------
Warum einfach, wenn es auch kompliziert geht.

[Diese Nachricht wurde von bgrittmann am 16. Mai. 2013 editiert.]

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

K.Siebert
Mitglied
Tech Zeichner


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

Beiträge: 415
Registriert: 19.05.2007

Win XP
Catia V5 R19
Catia V5 R24

erstellt am: 16. Mai. 2013 22:49    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 weylin 10 Unities + Antwort hilfreich


neuer-Fehler.jpg

 
Hallo nochmal,
ich habe das noch mal überarbeitet die neuen Zeilen sind aus dem Script von der V5Automation.chm.
Jetzt aber was neues wo ich leider nicht weiter weiß.
Meine bescheide frage ist wo liegt den jetzt schon wieder mein Fehler?
Code:
'http://ww3.cad.de/foren/ubb/Forum137/HTML/004137.shtml
'http://ww3.cad.de/foren/ubb/Forum137/HTML/001194.shtml#000003

Sub CATMain()
   
    Dim partDocument1 As PartDocument
    Set partDocument1 = CATIA.ActiveDocument
   
    Dim part1 As Part
    Set part1 = partDocument1.Part

'******************************************************************************************
    Dim oPartDocument As Document
    Set oPartDocument = CATIA.ActiveDocument

Dim bodies1 As Bodies
Set bodies1 = part1.Bodies

    Dim oRootPart As Part
    'Set oRootPart = oPartDocument.Part

    Dim oMainBody As Body
    'Set oMainBody = oRootPart.MainBody


Set productDocument1 = CATIA.ActiveDocument
Set product1 = productDocument1.Product
Name_Part = product1.PartNumber
'msgbox Name_Part


'**************************************************************

'*****************************************************

   
    Dim parameters1 As Parameters
    'Set parameters1 = part1.Parameters
    Dim sFilePath As String
    sFilePath = CATIA.SystemService.Environ("CATDocView")
   
    sFilePath = "\\SRVSBS2011\Catia_Produktion\Aufträge\_STANDARTS + VORLAGEN\Material\Werner.CATMaterial"
   
    Dim oMaterial_document As Document
    Set oMaterial_document = CATIA.Documents.Open(sFilePath)
    Set oMaterial_document = CATIA.ActiveDocument
   
    Dim cFamilies_list As MaterialFamilies
    Set cFamilies_list = oMaterial_document.Families
   
    Dim iNb_families As Integer
    iNb_families = cFamilies_list.Count
    Dim sFamiliesName As String
    sFamiliesName = cFamilies_list.Name
   
    Dim oFirst_family As MaterialFamily
    Dim ifamily_no As Variant
    Dim I As Integer
    Dim imaterial_no As Variant
   
    Dim J As Integer
    I = 0
   
    Dim aMaterialArray()
    Dim A As Integer
    A = 0
    ReDim aMaterialArray(A)

'************************************************************************************************************************
    Dim u As Integer
    u=0

    Dim s As String

'***********************************************************************************************************************   

    Do
        I = I + 1
        J = 0
        ifamily_no = I
       
        Dim List_Anzahl As Long
        List_Anzahl = cFamilies_list.Count
       
        Do
            J = J + 1
            Set oFirst_family = cFamilies_list.Item(ifamily_no)
            Dim sFamilyName As String
            sFamilyName = oFirst_family.Name
           
            Dim cMaterials_list As Materials
            Set cMaterials_list = oFirst_family.Materials
           
            Dim iNb_materials As Integer
            iNb_materials = cMaterials_list.Count
           
            Dim Mat_Anzahl As Long
            Mat_Anzahl = cMaterials_list.Count
           
            imaterial_no = J
            Dim Material1 As Material
            Set Material1 = cMaterials_list.Item(imaterial_no)
            Dim Ausgabe As String
            Ausgabe = Material1.Name
           
            A = A + 1
            ReDim Preserve aMaterialArray(A)
            aMaterialArray(A) = Ausgabe '& ";" & sFamilyName
           
   
         
           
        Loop Until (imaterial_no = Mat_Anzahl)
   
    Loop Until (ifamily_no = List_Anzahl)
   
    For X = UBound(aMaterialArray) - 1 To LBound(aMaterialArray) Step -1
    ' Alle links davon liegenden Zeichen auf richtige Sortierung
    ' der jeweiligen Nachfolger überprüfen:
    For Y = LBound(aMaterialArray) To X
      ' Ist das aktuelle Element seinem Nachfolger gegenüber korrekt sortiert?
      If aMaterialArray(Y) > aMaterialArray(Y + 1) Then
        ' Element und seinen Nachfolger vertauschen.
        vTemp = aMaterialArray(Y)
        aMaterialArray(Y) = aMaterialArray(Y + 1)
        aMaterialArray(Y + 1) = vTemp
      End If
    'Next Y
    Next
  'Next X
  Next
Dim Ausgabe1 As String
Dim v As Integer
v = 0

Do
v = v + 1
Ausgabe1 = aMaterialArray(v)

'************************************ Liste fuer das Menu ***************************************************
   'msgbox "Ausgabe: " & Ausgabe1

u = u + 1
s = s & u & ". " & Ausgabe1 & Chr(10) & Chr(10)

'************************************ Liste fuer das Menu ***************************************************


'userform1.ComboBox1.AddItem (Ausgabe1)


Loop Until v = 15                          'Abbruch bedingung ???

    'userform1.Show

'**************************************** InputBox mit auswahl (nur Nr.) ************************************
DasMenu = "Wähle ein Material aus:" +Chr(10)+_
" "+Chr(10)+_
s 'liste fuer die Auswahl (InputBox)

Antwort = InputBox(DasMenu,"Auswahl:")
If IsNumeric(Antwort) then

'msgbox  Antwort
 
End If
 
'**************************************** InputBox mit auswahl (nur Nr.) ************************************
   
    Set oManager = part1.GetItem("CATMatManagerVBExt")
    'Set oManager = oRootPart.GetItem("CATMatManagerVBExt")

    Dim Eingabe As String
    Dim LinkMode As Integer


   
   ' Dim Eingabe As Material


    'Eingabe = userform1.ComboBox1.Value

'********* mit der Antwort von Inputbox das Material von ArrayList holen ************************************

Eingabe = aMaterialArray(Antwort)
Msgbox "Eingabe: " &  Eingabe

'********* mit der Antwort von Inputbox das Material von ArrayList holen ************************************

'*******************************************************************

Dim specsAndGeomWindow1 As Window
Set specsAndGeomWindow1 = CATIA.ActiveWindow
specsAndGeomWindow1.WindowState = catWindowStateMinimized
Dim windows1 As Windows
Set windows1 = CATIA.Windows

   
    LinkMode = 0
    'oManager.ApplyMaterialOnPart part1, Eingabe, LinkMode
    'oManager.ApplyMaterialOnBody oMainBody,oMaterial3,linkMode
    Set body1 = bodies1.Item("Hauptkörper")
   oManager.ApplyMaterialOnBody oMainBody,Eingabe,linkMode
   
    oMaterial_document.Close

    part1.Update

End Sub



------------------
Sei Schlau bleib Dumm !!?!!

[Diese Nachricht wurde von K.Siebert am 16. Mai. 2013 editiert.]

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 16. Mai. 2013 23:10    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 weylin 10 Unities + Antwort hilfreich

Servus
oMainBody ist nicht definiert. Du hast die Zeile "Set oMainBody = oRootPart.MainBody" auskommentiert. Muss linkMode nicht als Short deklariert sein? Liefert dir "Eingabe" ein Material zurück (bzw hat es bei ApplyMaterialOnPart funktoniert)?
Schreib doch das Makro im VBA-Editor, der Code läuft fast immer auch als CATScript (wenn du keine VBA spezifischen Objekte verwendest)

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 17. Mai. 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 weylin 10 Unities + Antwort hilfreich

Servus
Ich hab mal den Code komplett überarbeitet (ohne Sortierung), der vorherige ist sehr unübersichtlich:
Code:
Sub CATMain() 

    Dim sFilePath As String
    Dim oMaterial_document As Document
    Dim cFamilies_list As MaterialFamilies
    Dim oFamily As MaterialFamily
    Dim sFamilie As String
    Dim Inputtext As String
    Dim i As Integer
    Dim cMaterial_list As Materials
    Dim oMaterial As Material
    Dim sMaterial As String
    Dim Antwort As String
    Dim oDocument As Document
    Dim oMainBody As Body
    Dim oManager As MaterialManager
    Dim LinkMode As Integer
       
    sFilePath = "C:\temp\MatCatalog.CATMaterial"
    LinkMode = 0

   
    'Part geöffnet
    If CATIA.Windows.Count = 0 Then
        Exit Sub
    End If
   
    Set oDocument = CATIA.ActiveDocument
    If TypeName(oDocument) <> "PartDocument" Then
        Exit Sub
    End If
    'Mainbody auslesen
    Set oMainBody = oDocument.Part.MainBody
 
    'Materialdokument öffnen
    Set oMaterial_document = CATIA.Documents.Read(sFilePath)
    Set cFamilies_list = oMaterial_document.Families
   
    'Liste der Familien erstellen
    For i = 1 To cFamilies_list.Count
        Set oFamily = cFamilies_list.Item(i)
        sFamilie = sFamilie + Chr(13) + CStr(i) + " " + oFamily.Name
    Next
   
    'Familie abfragen
    Inputtext = "Bitte Materialfamilie auswählen:" + Chr(13) + sFamilie

    Antwort = InputBox(Inputtext, "Materialfamilie-Auswahl")
    If Not IsNumeric(Antwort) Then
          MsgBox "Keine Auswahl getroffen. Das Makro wird beendet"
    End If
   
    Set cMaterial_list = cFamilies_list.Item(CInt(Antwort))
   
    'Liste der Materialien erstellen
   
    For i = 1 To cMaterial_list.Count
        Set oMaterial = cMaterial_list.Item(i)
        sMaterial = sMaterial + Chr(13) + CStr(i) + " " + oMaterial.Name
    Next
   
    'Material abfragen
    Inputtext = "Bitte Materiale auswählen:" + Chr(13) + sMaterial

    Antwort = InputBox(Inputtext, "Material-Auswahl")
    If Not IsNumeric(Antwort) Then
          MsgBox "Keine Auswahl getroffen. Das Makro wird beendet"
    End If
   
    Set oMaterial = cMaterial_list.Item(CInt(Antwort))
   
    'Material dem MainBody zuweisen zuweisen
   
    Set oManager = oDocument.Part.GetItem("CATMatManagerVBExt")
    oManager.ApplyMaterialOnBody oMainBody, oMaterial, LinkMode
 
    oDocument.Part.Update

    'Aufräumen
    oMaterial_document.Close   
End Sub


Ich hoffe jetzt wird es etwas klarer.

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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

K.Siebert
Mitglied
Tech Zeichner


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

Beiträge: 415
Registriert: 19.05.2007

Win XP
Catia V5 R19
Catia V5 R24

erstellt am: 17. Mai. 2013 13:22    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 weylin 10 Unities + Antwort hilfreich


cMaterial_list-Fehler.jpg

 
Hallo,
Leider kommt ein Fehler bei cMaterial_list, aber ich danke dir Trotzdem für deine Hilfe!
Ich habe auch ein wenig weiter Geschieben und habe es geschafft das Teil zum Laufen zu bringen.
Bei mir ist allerdings die Family hardcodiert ich werde das von dir übernehmen und den Code aufräumen, Und nachreichen.

Unities unterwegs

------------------
Sei Schlau bleib Dumm !!?!!

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 17. Mai. 2013 14: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 weylin 10 Unities + Antwort hilfreich

Servus
Warum kannst du kein VBA verwenden, da läuft mein Code?

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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

K.Siebert
Mitglied
Tech Zeichner


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

Beiträge: 415
Registriert: 19.05.2007

Win XP
Catia V5 R19
Catia V5 R24

erstellt am: 17. Mai. 2013 17:45    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 weylin 10 Unities + Antwort hilfreich


Fehler_von_VBA.jpg

 
Hallo,
Wenn ich das könnte wäre ich echt Happy.
Hier mal die Fehlermeldung von VBA  und auch selbst aufgezeichnete Module laufen nicht.
Und wenn ich eine einfache UserForm erstellen will sagt mir der Rechner das ich keine Butten erstellen kann weil nicht genügend Speicher da ist.
Und wenn ich zum Admin gehe wird gesagt „wie Programme du sollst mit Catia Zeichnen und nicht Programmieren.

------------------
Sei Schlau bleib Dumm !!?!!

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 17. Mai. 2013 18:00    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 weylin 10 Unities + Antwort hilfreich

Servus
Ändere mal folgende Zeile
Code:
Set cMaterial_list = cFamilies_list.Item(CInt(Antwort)).Materials

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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

K.Siebert
Mitglied
Tech Zeichner


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

Beiträge: 415
Registriert: 19.05.2007

Win XP
Catia V5 R19
Catia V5 R24

erstellt am: 17. Mai. 2013 18: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 weylin 10 Unities + Antwort hilfreich

          Läuft

DANKE

hier noch einmal der Komplette Laufende code:

Code:
Sub CATMain() 

    Dim sFilePath As String
    Dim oMaterial_document As Document
    Dim cFamilies_list As MaterialFamilies
    Dim oFamily As MaterialFamily
    Dim sFamilie As String
    Dim Inputtext As String
    Dim i As Integer
    Dim cMaterial_list As Materials
    Dim oMaterial As Material
    Dim sMaterial As String
    Dim Antwort As String
    Dim oDocument As Document
    Dim oMainBody As Body
    Dim oManager As MaterialManager
    Dim LinkMode As Integer
       
    sFilePath = "\\SRVSBS2011\Catia_Produktion\Aufträge\_STANDARTS + VORLAGEN\Material\Werner.CATMaterial"
    LinkMode = 0

   
    'Part geöffnet
    If CATIA.Windows.Count = 0 Then
        Exit Sub
    End If
   
    Set oDocument = CATIA.ActiveDocument
    If TypeName(oDocument) <> "PartDocument" Then
        Exit Sub
    End If
    'Mainbody auslesen
    Set oMainBody = oDocument.Part.MainBody
 
    'Materialdokument öffnen
    Set oMaterial_document = CATIA.Documents.Read(sFilePath)
    Set cFamilies_list = oMaterial_document.Families
   
    'Liste der Familien erstellen
    For i = 1 To cFamilies_list.Count
        Set oFamily = cFamilies_list.Item(i)
        sFamilie = sFamilie + Chr(13) + CStr(i) + " " + oFamily.Name
    Next
   
    'Familie abfragen
    Inputtext = "Bitte Materialfamilie auswählen:" + Chr(13) + sFamilie

    Antwort = InputBox(Inputtext, "Materialfamilie-Auswahl")
    If Not IsNumeric(Antwort) Then
          MsgBox "Keine Auswahl getroffen. Das Makro wird beendet"
    End If

'msgbox Antwort   

    Set cMaterial_list = cFamilies_list.Item(CInt(Antwort)).Materials
   
    'Liste der Materialien erstellen
   
    For i = 1 To cMaterial_list.Count
        Set oMaterial = cMaterial_list.Item(i)
        sMaterial = sMaterial + Chr(13) + CStr(i) + " " + oMaterial.Name
    Next
   
    'Material abfragen
    Inputtext = "Bitte Materiale auswählen:" + Chr(13) + sMaterial

    Antwort = InputBox(Inputtext, "Material-Auswahl")
    If Not IsNumeric(Antwort) Then
          MsgBox "Keine Auswahl getroffen. Das Makro wird beendet"
    End If
   
    Set oMaterial = cMaterial_list.Item(CInt(Antwort))
   
    'Material dem MainBody zuweisen zuweisen
   
    Set oManager = oDocument.Part.GetItem("CATMatManagerVBExt")
    oManager.ApplyMaterialOnBody oMainBody, oMaterial, LinkMode
 
    oDocument.Part.Update

    'Aufräumen
    oMaterial_document.Close   
End Sub


------------------
Sei Schlau bleib Dumm !!?!!

[Diese Nachricht wurde von K.Siebert am 17. Mai. 2013 editiert.]

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