| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: INV 2015 VBA - Alle Zeichnungs Ansichten Updaten (1633 / mal gelesen)
|
IVDH808 Mitglied
Beiträge: 48 Registriert: 07.04.2014 Inventor 2015
|
erstellt am: 25. Mai. 2016 10:28 <-- editieren / zitieren --> Unities abgeben:
Hallo Ich Schreibe gerade an einem VBA makro das auf einer Zeichnung alle Ansichten Updaten soll mit dem Command "DrawingViewApplyDesignViewCtxCmd" (Rechtsklick auf die Ansicht: Benutzerdef.Ansicht anwenden) Das ist mein Code bis jetzt. Also alle Definitionen Machen. aber spätestens beim "For Each" Befehl komme ich nicht weiter. der Auskomentierete befehl unter dem "For each" der mit call Arbeitet hat nur funktionert wenn ich vorher in der Zeichnung eine Ansicht angeklickt habe. Meine Absicht ist es aber das ganze auf jede ansicht Anzuwenden und wenn möglich noch die Meldung die jedesmal kommt gleich mit "OK" zu bestätigen Wie komme ich mit dem "For Each" weiter? (VBA neuling) Gruß Daniel Code: Public Sub UpdateViews()'Dokument definieren Dim oDrawDoc As Document Set oDrawDoc = ThisApplication.ActiveDocument 'nur für Zeichnungen möglich, ansonsten Meldung If ThisApplication.ActiveDocument.DocumentType = kDrawingDocumentObject Then Set GetActiveDrawingDocument = ThisApplication.ActiveDocument Else MsgBox "nur bei Zeichnungen möglich", vbOKOnly + vbInformation Exit Sub End If ' den CommandManager vorbereiten Dim oCommandMgr As CommandManager Set oCommandMgr = ThisApplication.CommandManager 'Befehl definieren Dim oViewUpdateDef As ControlDefinition Set oViewUpdateDef = oCommandMgr.ControlDefinitions.Item("DrawingViewApplyDesignViewCtxCmd") Dim DrwSheet As sheet Dim DrwView As DrawingView For Each DrwView In DrwSheet.DrawingViews ActiveSheet.DrawingViews (DrwView.Name)
Next ' ausführen wenn es eine Zeichnung ist 'If ThisApplication.ActiveDocument.DocumentType = kDrawingDocumentObject Then ' Call oSViewUpdateDef.Execute ' Else ' Exit Sub 'End If
End Sub
[Diese Nachricht wurde von IVDH808 am 25. Mai. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 25. Mai. 2016 20:22 <-- editieren / zitieren --> Unities abgeben: Nur für IVDH808
Hallo Vermutlich erwartet der Befehl eine Auswahl. Dann erstmal den jeweiligen DrawingView ins SelectSet einfügen und dann mal versuchen. Code:
Dim oSelSet as SelectSet Set oSelSet = ThisApplication.ActiveDocument.SelectSetFor Each DrwView In DrwSheet.DrawingViews If oSelSet.Count > 0 Then oSelSet.Clear Call oSelSet.Add(DrwView) Call oSViewUpdateDef.Execute Next
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
IVDH808 Mitglied
Beiträge: 48 Registriert: 07.04.2014 Inventor 2015
|
erstellt am: 27. Mai. 2016 08:08 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von rkauskh: HalloVermutlich erwartet der Befehl eine Auswahl. Dann erstmal den jeweiligen DrawingView ins SelectSet einfügen und dann mal versuchen. Code:
Dim oSelSet as SelectSet Set oSelSet = ThisApplication.ActiveDocument.SelectSetFor Each DrwView In DrwSheet.DrawingViews If oSelSet.Count > 0 Then oSelSet.Clear Call oSelSet.Add(DrwView) Call oSViewUpdateDef.Execute Next
Hi Ralf, danke für deine idee! klingt logisch hab das ganze gleich mal ausprobiert. aber festgestellt das man das "Call" garnicht in dem "For Each" verwenden kann. das hätte mir auch schon früher auffallen müssen. Bekomme den Laufzeitfehler '438' (Objekt unterstützt diese Eig oder Methode nicht) aber die Richtung Stimmt denke ich. Gruß Daniel
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
IVDH808 Mitglied
Beiträge: 48 Registriert: 07.04.2014 Inventor 2015
|
erstellt am: 27. Jun. 2016 15:54 <-- editieren / zitieren --> Unities abgeben:
Hi ich nochmal zu diesem Thema. ich habe das ganze jetzt hinbekommen bis auf ein problem. Inventor updated jetzt jeden Ansicht auf der Zeichnung nach der Reihe. Allerdings muss ich jedesmal den Dialog mit Ok bestätigen. gibt es die möglichkeit diesen dialog irgendwie zu unterdrücken/auszublenden oder ein "OK" an inventor zu schicken ? Gruß Daniel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2013/2015 Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 28. Jun. 2016 10:40 <-- editieren / zitieren --> Unities abgeben: Nur für IVDH808
|
IVDH808 Mitglied
Beiträge: 48 Registriert: 07.04.2014 Inventor 2015
|
erstellt am: 28. Jun. 2016 10:52 <-- editieren / zitieren --> Unities abgeben:
hi chris, das hab ich bereits versucht, ohne erfolg :/ hier mal mein makro Code: Public Sub ViewUpdate()ThisApplication.SilentOperation = True Dim oApp As Inventor.Application Set oApp = ThisApplication If oApp.ActiveDocument.DocumentType <> kDrawingDocumentObject Then MsgBox "Funktion ist nur in Zeichnungen zulässig" Exit Sub End If
Dim oDoc As Inventor.DrawingDocument Set oDoc = ThisApplication.ActiveDocument Dim oView As DrawingView Dim oViews As DrawingViews Dim oSheets As Sheets Set oSheets = oDoc.Sheets Dim oSheet As sheet Set oSheet = oDoc.ActiveSheet Dim oSelect As SelectSet Set oSelect = oDoc.SelectSet 'für alle Ansichten anwenden For Each oView In oSheet.DrawingViews If oSelect.Count > 0 Then oSelect.Clear Call oSelect.Select(oView) ThisApplication.CommandManager.ControlDefinitions.Item("DrawingViewApplyDesignViewCtxCmd").Execute Next ThisApplication.SilentOperation = False End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2013/2015 Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 28. Jun. 2016 12:12 <-- editieren / zitieren --> Unities abgeben: Nur für IVDH808
Versuchs mal so. Ansonsten kannst du auch die Meldungen in den Optionen deaktivieren. Aber dann kommt sie eben nie. Code: Public Sub ViewUpdate() Dim oApp As Inventor.Application Set oApp = ThisApplication
If oApp.ActiveDocument.DocumentType <> kDrawingDocumentObject Then MsgBox "Funktion ist nur in Zeichnungen zulässig" Exit Sub End If
Dim oDoc As Inventor.DrawingDocument Set oDoc = ThisApplication.ActiveDocument Dim oView As DrawingView Dim oViews As DrawingViews Dim oSheets As Sheets Set oSheets = oDoc.Sheets Dim oSheet As sheet Set oSheet = oDoc.ActiveSheet Dim oSelect As SelectSet Set oSelect = oDoc.SelectSet ThisApplication.SilentOperation = True 'für alle Ansichten anwenden For Each oView In oSheet.DrawingViews If oSelect.Count > 0 Then oSelect.Clear Call oSelect.Select(oView) ThisApplication.CommandManager.ControlDefinitions.Item("DrawingViewApplyDesignViewCtxCmd").Execute Next ThisApplication.SilentOperation = False End Sub
------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2013/2015 Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 28. Jun. 2016 12:51 <-- editieren / zitieren --> Unities abgeben: Nur für IVDH808
Ich hätte auch noch einen alternativen Weg für dich: Code: Public Sub ViewUpdate()Dim oApp As Inventor.Application Set oApp = ThisApplication If oApp.ActiveDocument.DocumentType <> kDrawingDocumentObject Then MsgBox "Funktion ist nur in Zeichnungen zulässig" Exit Sub End If
Dim oDoc As Inventor.DrawingDocument Set oDoc = ThisApplication.ActiveDocument Dim oView As DrawingView Dim oViews As DrawingViews Dim oSheets As Sheets Set oSheets = oDoc.Sheets Dim oSheet As Sheet Set oSheet = oDoc.ActiveSheet oSheet.update End Sub
Das sollte eigentlich auch genauso funktionieren. Zumindest macht es bei mir das was es soll.
------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
IVDH808 Mitglied
Beiträge: 48 Registriert: 07.04.2014 Inventor 2015
|
erstellt am: 28. Jun. 2016 13:07 <-- editieren / zitieren --> Unities abgeben:
hi, also hat leider alles beide nicht geklappt. die position des "silent operation" hab ich schon an allen möglichen stellen getested. und bei osheet.update passiert nichts danke trozdem für deine hilfe gruß daniel
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2013/2015 Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 28. Jun. 2016 14:25 <-- editieren / zitieren --> Unities abgeben: Nur für IVDH808
SilentOperation kann in deinem Fall auch gar nicht funktionieren, weil du das Fenster ja absichtlich aufrufst. Code: ThisApplication.CommandManager.ControlDefinitions.Item("DrawingViewApplyDesignViewCtxCmd").Execute
Die einzige Möglichkeit, die ich noch sehe, ist das Fenster abzufangen und ihm dann das OK geben. Ich wüsste aber nicht, wie man an dieses Fenster ran kommt. ------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
IVDH808 Mitglied
Beiträge: 48 Registriert: 07.04.2014 Inventor 2015
|
erstellt am: 28. Jun. 2016 14:37 <-- editieren / zitieren --> Unities abgeben:
ja das dachte ich mir auch scho, das ich da irgendwie an den dialog rankommen müsste. aber jetzt mal unabhängig von diesem makro. ich glaube ich habe rausgefunden warum es meine ansichten auf den zeichnungen immer zerstört. in den Ansichts Eigenschaften ist bei Ansicht das "Assoziativ" häkchen draußen. das kommt daher weil ich in meiner baugruppe verschiedene bauteile ausgeblendet hab. jetzt suche ich schon fieberhaft nach dem befehl die ansicht assoziativ zu machen, aber kann nichts finden ich glaube das würde meine andere idee mit den updates überflüssig machen
Gruß Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2013/2015 Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 28. Jun. 2016 16:33 <-- editieren / zitieren --> Unities abgeben: Nur für IVDH808
Die Aktive Ansicht abfragen: Code: DrawingView.ActiveLevelOfDetailRepresentation() As String
dann mit: Code: DrawingView.SetDesignViewRepresentation( Representation As String, [Associative] As Boolean )
wieder zuweisen und Assoziativ machen. ------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
IVDH808 Mitglied
Beiträge: 48 Registriert: 07.04.2014 Inventor 2015
|
erstellt am: 29. Jun. 2016 09:28 <-- editieren / zitieren --> Unities abgeben:
vielen dank für die tips! ich hatte es gerade schon zum laufen gebracht. hat alles wunderbar geklappt. dann ist mein IV abgestürzt und ich hatte mein vba projekt nicht gespeichert. hab den code wieder aus der erinnerung neu geschrieben. seitdem klapp es nicht mehr. das oRep = ActiveDesignViewRepresentation hat mir davor immer den namen der aktuellen ansicht zurück gegeben. jetzt ist oRep immer leer und deshalb kann er natürlich auch nicht auf Assoziativ stellen, weil er nicht weis welche Ansicht gemeint ist. :/ Code: Public Sub ViewUpdate() Dim oApp As Inventor.Application Set oApp = ThisApplication
If oApp.ActiveDocument.DocumentType <> kDrawingDocumentObject Then MsgBox "Funktion ist nur in Zeichnungen zulässig" Exit Sub End If
Dim oDoc As Inventor.DrawingDocument Set oDoc = ThisApplication.ActiveDocument Dim oView As DrawingView Dim oViews As DrawingViews Dim oSheets As Sheets Set oSheets = oDoc.Sheets Dim oSheet As sheet Set oSheet = oDoc.ActiveSheet Dim oSelect As SelectSet Set oSelect = oDoc.SelectSet Dim oRep As String 'für alle Ansichten anwenden For Each oView In oSheet.DrawingViews If oSelect.Count > 0 Then oSelect.Clear Call oSelect.Select(oView) oRep = oView.ActiveDesignViewRepresentation oView.SetDesignViewRepresentation oRep, False Next End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
IVDH808 Mitglied
Beiträge: 48 Registriert: 07.04.2014 Inventor 2015
|
erstellt am: 29. Jun. 2016 11:48 <-- editieren / zitieren --> Unities abgeben:
|
BernoAn Mitglied
Beiträge: 164 Registriert: 16.01.2014
|
erstellt am: 29. Jun. 2016 14:22 <-- editieren / zitieren --> Unities abgeben: Nur für IVDH808
Hallo Daniel Mit etwas suchen kommt man doch zum Ziel, so funktioniert es! Code:
Public Sub ViewUpdate() Dim oApp As Inventor.Application Set oApp = ThisApplication
If oApp.ActiveDocument.DocumentType <> kDrawingDocumentObject Then MsgBox "Funktion ist nur in Zeichnungen zulässig" Exit Sub End If
Dim oDoc As Inventor.DrawingDocument Set oDoc = ThisApplication.ActiveDocument Dim oView As DrawingView Dim oViews As DrawingViews Dim oSheets As Sheets Set oSheets = oDoc.Sheets Dim oSheet As Sheet Set oSheet = oDoc.ActiveSheet Dim oSelect As SelectSet Set oSelect = oDoc.SelectSet Dim oRep As String 'für alle Ansichten anwenden For Each oView In oSheet.DrawingViews If oSelect.Count > 0 Then oSelect.Clear Call oSelect.Select(oView) Set Pfad = oView.ReferencedDocumentDescriptor.ReferencedDocument.ComponentDefinition.RepresentationsManager.DesignViewRepresentations oRep = Pfad.Item(2).name ' hier die gewünschte Ansicht auswählen oView.SetDesignViewRepresentation oRep, True
Next End Sub
Gruß Berno Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
IVDH808 Mitglied
Beiträge: 48 Registriert: 07.04.2014 Inventor 2015
|
erstellt am: 29. Jun. 2016 14:54 <-- editieren / zitieren --> Unities abgeben:
Hi Berno, das hilft mir leider nur bedingt. da die Ansichtsnahmen immer unterschiedlich sind und ich ja der Ansicht die gleiche wieder zuordnen will (ohne zu wissen wie die ansicht heist). Mit deiner Methode muss ich zum schluss den Namen der Ansicht angeben den ich Assoziativ machen will. Danke trozdem für deine Hilfe Gruß Daniel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |