Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Inventor
  Komponente ersetzen mit VBA

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: Inventor besser verstehen - Fläche löschen
Autor Thema:   Komponente ersetzen mit VBA (2786 mal gelesen)
SEHER
Mitglied
Systemanalytiker


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

Beiträge: 1199
Registriert: 13.03.2001

Inventor4 - 2020

erstellt am: 10. Jul. 2003 17:59    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 Forum,
ich möchte mehrere Komponenten in einer iam mit VBA austauschen

Habe dieses zwar im Objektkatalog gefunden

Sub Replace(FileName As String, ReplaceAll As Boolean)
    Element von Inventor.ComponentOccurrence
    Replaces this component occurrence with another component.

aber wie handhabe ich es wenn ich Bauteil123.ipt durch Bauteilxyz.ipt ersetzen möchte?

Bin für jeden Tipp dankbar
Gruß
SEHER

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

daywa1k3r
Moderator
Softwareentwickler




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

Beiträge: 3497
Registriert: 01.08.2002

Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570
Laptop: Alienware m17x
Win7, Inventor2012 64Bi

erstellt am: 10. Jul. 2003 19:09    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 SEHER 10 Unities + Antwort hilfreich

Code:

Private Sub Replace_files()
  Dim Teile As ComponentOccurrences
  Dim oAsm As AssemblyDocument
  On Error Resume Next
  Set oAsm = ThisApplication.ActiveDocument
  If Err.Number <> 0 Then
    MsgBox "Keine Baugruppe :/", vbCritical, "Dein Makro ;-)"
    End
  End If
  Set Teile = oAsm.ComponentDefinition.Occurrences
  Suche_die_Dateien Teile
End Sub
Private Sub Suche_die_Dateien(Teile As ComponentOccurrences)
    Dim oOcc As ComponentOccurrence
    Dim oPart As PartDocument
    For Each oOcc In Teile
        On Error Resume Next
        Set oPart = oOcc.Definition.Document
        If oPart.FullFileName = "C:\Temp\Bauteil123.ipt" Then
          Call oOcc.Replace("C:\Temp\Bauteilxyz.ipt", True)
        End If
        Call Suche_die_Dateien(oOcc.SubOccurrences)
    Next
End Sub

Die Methode auf FullFileName zuzugreifen schien mir am Anfang zu langsam, aber die ist sicherer, da es viele Teile gibt die einen anderen Namen im Browser haben als den Pfad-Namen. Daher ist das hier viel sicherer, da es eindeutiger ist.

PS: Um es testen zu können brauchst du eine Baugruppe die als Element "C:\Bauteil123.ipt" enthält, und natürlich sollte das Teil "C:\Temp\Bauteilxyz.ipt" auch vorhanden sein.

------------------
Grüße daywa1k3r

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

SEHER
Mitglied
Systemanalytiker


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

Beiträge: 1199
Registriert: 13.03.2001

Inventor4 - 2020

erstellt am: 11. Jul. 2003 08:53    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

Thanx daywa1k3r,
werde es die nächsten Tage ausprobieren.
Schönes Wochenende

Gruß
Seher

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

SEHER
Mitglied
Systemanalytiker


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

Beiträge: 1199
Registriert: 13.03.2001

Inventor4 - 2020

erstellt am: 15. Jul. 2003 12:14    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

Spitzenmäßig daywa1k3r!!!
Einfach klasse!


SEHER

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

DerBrain87
Mitglied
Mathematiker


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

Beiträge: 73
Registriert: 29.04.2015

Inventor 2014

erstellt am: 20. Jul. 2015 16: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 SEHER 10 Unities + Antwort hilfreich

Hallo,
erstmal vielen Dank für 95% der Lösung meines Problems:-)
Dieses replace und wie man es verwendet löst schon einen großen Teils meines Problems.
Ich hätte nun gern nicht Bauteil123.ipt ersetzt sondern eines, welches ich vorher mit der Pick-Funktion auswähle.
Hierfür habe ich bereits:
ThisApplication.CommandManager.Pick(kAssemblyOccurrenceFilter,"Komponente auswählen.")
Leider scheint der gewählte Filter noch nicht 100% dies zu machen was ich möchte. Ich hätte gern den Auswahlfilter, welcher auch aktiv ist, wenn ich die Inventor-Funktion
"Komponente Speichern und Ersetzen" verwende. Welchen Filter muss ich hierfür auswählen?

Vielen Dank im Vorraus.

Gruß DerBrain87

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

mb-ing
Mitglied
F&E-Mangement, MB-Ing. (u)


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

Beiträge: 605
Registriert: 06.09.2012

Inventor 2013, WIN10 (64bit), Dell Precision T1650, 16GB (PSP 2011)

erstellt am: 21. Jul. 2015 08: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 Nur für SEHER 10 Unities + Antwort hilfreich

Hi,

der Filter sollte eigentlich schon passen.

Anbei eine Funktion, dich ich für einen ähnlichen Fall nutze....
(Die Funktion PickPartCheck prüft dabei noch einige Sachen...)

Grüße
MB-Ing.
-----------------------------------

' Funktion wählt Bauteil aus und prüft ob es für die Platzierung geeignet ist

Private Function PickPart(oAssyDoc As AssemblyDocument) As ComponentOccurrence
  On Error Resume Next
  Dim oOcc As ComponentOccurrence
  Dim iCheck As Integer
 
  'Komponente auswählen durch Benutzer
  Set oOcc = ThisApplication.CommandManager.Pick(kAssemblyOccurrenceFilter, "Einfügeteil auswählen")
  If oOcc Is Nothing Then
      Set PickPart = Nothing
      Exit Function
  End If
  'Eignung der Komponente prüfen
  iCheck = PickPartCheck(oOcc)
  Select Case iCheck
  Case vbRetry
      Set oOcc = PickPart(oAssyDoc)
  Case vbCancel
      Set PickPart = Nothing
      Exit Function
  End Select
 
  'Zuweisung Komponente an die Funktion
  Set PickPart = oOcc
End Function

------------------
Wissen ist Macht. Nichts wissen macht auch nichts 

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

DerBrain87
Mitglied
Mathematiker


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

Beiträge: 73
Registriert: 29.04.2015

Inventor 2014

erstellt am: 21. Jul. 2015 13:09    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 SEHER 10 Unities + Antwort hilfreich

Meine Hoffnung war, dass ich auf den kAssemblyOccurrenceFilter noch einen anderen Filter addieren kann/muss.
Mein Problem ist nämlich, dass wenn ich die Inventor-Funktion verwende, Bauteile (ohne Ausnahme) direkt in der Baugruppe auswählen kann, über meine Pick jedoch nicht. Nutze ich meine Pick, kann ich zwar alle Bauteile über den Browser auswählen in der Baugruppe werden aber nur Baugruppen und direkt in der 'Main-Baugruppe' verbaute Bauteile gehighlightet nicht jedoch Baueile einer verbauten Baugruppe.
Hoffe meine Schilderung war halbwegs verständlich:-)

gruß derBrain87

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

mb-ing
Mitglied
F&E-Mangement, MB-Ing. (u)


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

Beiträge: 605
Registriert: 06.09.2012

Inventor 2013, WIN10 (64bit), Dell Precision T1650, 16GB (PSP 2011)

erstellt am: 21. Jul. 2015 14:53    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 SEHER 10 Unities + Antwort hilfreich

Hi,

ich verstehe jetzt schon, was Du meinst...
Denke ich 

Also willst Du auch ein Bauteil einer Unterbaugruppe auswählen können?
Die Funktion PickPartCheck (siehe Code oben) könntest Du entsprechend modifizieren, so dass diese eine Unterbaugruppe erkennt....

Notfalls den Inventor-Befehl mit dem Command-Manager aufrufen?
(Ausgabe der Befehle siehe unten)

Grüße

MB-Ing.

--------------------------------------
'Ausgabe aller Befehle des CommandManagers
Private Sub AusgabeKommandos()
   
    ' Command Manager Objekt öffnen
    Dim oCommandMgr As CommandManager
    Set oCommandMgr = ThisApplication.CommandManager
   
    ' Auslesen der Befehle
    Dim oControlDefs As ControlDefinitions
    Set oControlDefs = oCommandMgr.ControlDefinitions

    ' Datei öffnen und ausgeben in C:\temp
    Dim oControlDef As ControlDefinition
    Open "C:\temp\CommandNames.txt" For Output As #1
    Print #1, Tab(10); "Command Name"; Tab(75); _
              "Description"; vbNewLine

    ' Iterationen
    For Each oControlDef In oControlDefs
        Print #1, oControlDef.InternalName; Tab(55); _
                  oControlDef.DescriptionText
    Next

    ' Schließen der Datei
    Close #1
End Sub

------------------
Wissen ist Macht. Nichts wissen macht auch nichts 

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

DerBrain87
Mitglied
Mathematiker


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

Beiträge: 73
Registriert: 29.04.2015

Inventor 2014

erstellt am: 23. Jul. 2015 08:53    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 SEHER 10 Unities + Antwort hilfreich

ich kam leider mit deinem letzten Post nicht ganz zurecht.
Daher versuche ich es einfach mal anders:
wie müsste der Filter von CommandManger.Pick heißen, damit ich nur Bauteile auswählen kann?
Meine Idee: wenn ich die Pick wie folgt aufrufe bekomme ich genau das was ich möchte:-)
oCM.Pick(kAssemblyOccurrenceFilter + kIrgendEinFilterDerNurBauteileAlsEingabeErlaubt,text)
Mein Problem dabei: Inventor kennt die Konstante kIrgendEinFilterDerNurBauteileAlsEingabeErlaubt natürlich nicht^^

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

mb-ing
Mitglied
F&E-Mangement, MB-Ing. (u)


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

Beiträge: 605
Registriert: 06.09.2012

Inventor 2013, WIN10 (64bit), Dell Precision T1650, 16GB (PSP 2011)

erstellt am: 23. Jul. 2015 09:14    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 SEHER 10 Unities + Antwort hilfreich

Hi,

notfalls implementiere einfach eine IF-Schleife, ob das gewählte Teil ein Bauteil ist.

Ich versteh schon irgendwie, was Du willst.

Aber wieso sollte man ein Bauteil einer Unterbaugruppe auswählen können?
Ergibt für mich gerade keinen Sinn...

Wenn Du das realisieren willst, musst du zig Sachen in Deinem Makro prüfen!!!
(Habe ich die Rechte auf die Baugruppe und das ausgewählte Bauteil, Ist das Dokument im Speicher aktuell oder veraltet, Teileverwendung, Ersetze ich ein BT einer Unter-BG muss ich überprüfen, ob die Unter-BG veraltete Komponenten enthält, diese dann aktualisieren und austauschen, fehlerhafte Abhängigkeiten, und noch vieles mehr...)

Oder verstehe ich Dich einfach verkehrt? ^^

Du hast von einer "Inventor-Funktion "Komponente Speichern und Ersetzen"" geschrieben, die das gewünschte kann.
Kannst Du die auch über VBA ansprechen?

Grüße
MB-Ing

------------------
Wissen ist Macht. Nichts wissen macht auch nichts  

[Diese Nachricht wurde von mb-ing am 23. Jul. 2015 editiert.]

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

DerBrain87
Mitglied
Mathematiker


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

Beiträge: 73
Registriert: 29.04.2015

Inventor 2014

erstellt am: 23. Jul. 2015 09:19    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 SEHER 10 Unities + Antwort hilfreich

ne, hast du schon richtig verstanden:-)
Nur habe ich evtl. was falsch verstanden. Habe leider nicht zu viel Ahnung vom technischen Zeichnen, bin nur der Mathematiker der alles programmieren darf^^
Ich werde sobald mein Auftragssteller vom Urlaub zurück ist mal nachhacken was er gerne auswählen können will.
Mein aktuelles vorgehen wäre ähnlich dem deinem gewesen:
Ohne großen Filter auswählen und solange wiederholen bis nothing oder ein gewünschter Dateityp zurück kommt.

gruß DerBrain87

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

Dilpschi
Mitglied
Ing. Verfahrenstechnik


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

Beiträge: 18
Registriert: 29.04.2013

erstellt am: 03. Nov. 2016 11: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 SEHER 10 Unities + Antwort hilfreich

Hallo liebe Gemeinde,
konnte aus diesem älteren thread und anderen schon einiges ableiten, komme aber irgendwie mit meinem Ansinnen nicht weiter     
Situation: Wir möchten, um Projekte schlanker zu machen, alle Unterbaugruppen als SAT speichern und diese Unterbaugruppen dann mit den erzeugten SAT Dateien ersetzen (SAT --> umgewandelte IPT's).
Das mit dem Abspeichern klappt schon ganz gut, nur beim Ersetzen erzeugt er mir wieder eine Baugruppe aus der SAT, kein Bauteil IPT.

Wenn ich im Inventor direkt per Hand die SAT importiere, wird es in eine einzelne IPT umgewandelt.
Was mache ich falsch? Ich weiss nicht recht auf welches Object ich zugreifen muss.

Anbei mal der Code

Sub sat_ex_import()
Dim strFile             As String
Dim strInputFolder      As String
Dim strOutputFolder     As String
Dim strOutputFile       As String
Dim oDoc                As Inventor.Document
Dim oDocPart            As AssemblyDocument
Dim oDataIO             As DataIO
  
Set oDoc = ThisApplication.ActiveDocument
Set fs = CreateObject("Scripting.FileSystemObject")

    If oDoc.ReferencedFiles.Count > 0 Then
        strFile = oDoc.ReferencedFiles(1).FullDocumentName
        strInputFolder = Left(strFile, InStrRev(strFile, "\"))
        strOutputFolder = strInputFolder & "SAT\"
        If Not fs.FolderExists(strOutputFolder) Then MkDir strOutputFolder
       
        For i = 1 To oDoc.ReferencedFiles.Count
              If oDoc.ReferencedFiles(i).DocumentType = kAssemblyDocumentObject Then
                    Set oDocPart = oDoc.ReferencedFiles(i)
                   
                    'Abspeichern als SAT im Unterordner \SAT
                    Set oDataIO = oDocPart.ComponentDefinition.DataIO
                    strFile = oDoc.ReferencedFiles(i).FullDocumentName
                    strFile = Right(strFile, Len(strFile) - InStrRev(strFile, "\"))
                    strOutputFile = Left(strFile, InStrRev(strFile, ".") - 1) & ".SAT"
                    oDataIO.WriteDataToFile "ACIS SAT", strOutputFolder & strOutputFile
                   
                    'Ersetzen der Unter-IAM durch die SAT
                    Set oDocPartOcc = oDoc.ComponentDefinition.Occurrences(i)
                    Call oDocPartOcc.Replace(strOutputFolder & strOutputFile, True)
                   
                    'Speichern der SAT-IPT
                   
                   
               End If
        Next
       
    End If
End Sub


Vielleicht geht das Ganze (die Vereinfachung zum "leichteren" Projekt) generell auch viel einfacher zu bewerkstelligen.....


------------------
Einfach mal rechts fahren....

[Diese Nachricht wurde von Dilpschi am 04. Nov. 2016 editiert.]

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

bwr
Mitglied
Konstrukteur


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

Beiträge: 97
Registriert: 21.02.2007

Win7 64-bit NVIDIA Quadro K4000
Inventor 2015

erstellt am: 07. Nov. 2016 08:33    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 SEHER 10 Unities + Antwort hilfreich

Hallo Dilpschi,
das Vorhaben klingt ganz schön abenteuerlich.
Um Projekte schlanker zu machen würde ich mich mit dem Thema Detailgenauigkeit und Ersatzobjekt befassen.
Gruß
Andi

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)2020 CAD.de | Impressum | Datenschutz