Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Inventor
  VBA: Event beim Drucken anstoßen

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: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  VBA: Event beim Drucken anstoßen (245 mal gelesen)
Darkrondo
Mitglied
Maschinenbautechniker


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

Beiträge: 96
Registriert: 02.06.2009

Inventor 2019

erstellt am: 22. Nov. 2021 16:05    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


VBADrucken.png

 
Hallo zusammen,

ich habe das Problem, dass ich ein Schriftfeld erstellt habe und sich die entsprechenden iProperties über iLogic aktualisieren: Allerdings nur beim Speichern, einen besseren Trigger finde ich dort nicht. Es wäre allerdings wichtig, dass die Aktualisierung schon beim Befehl "Drucken" angestoßen wird.

Eine mögliche Lösung die ich gefunden habe seht ihr unten (VBA wäre auch ok, damit kann ich ja dann meine iLogic-Regeln auch noch einbinden). Wollte zum Testen einfach mal eine MessageBox sehen wenn das Drucken angestoßen wird, diese erscheint aber nicht.

Der Code steht in einem Klassenmodul, Bild siehe Anlage.

Hat jemand eine Ahnung an was es liegen könnte?

Danke und Grüße,
Georg

__________________________________________________________________________
Private WithEvents m_InputEvents As UserInputEvents

Private Sub CommandButton1_Click()
    Set m_InputEvents = ThisApplication.CommandManager.UserInputEvents
End Sub

Private Sub m_InputEvents_OnActivateCommand(ByVal CommandName As String, ByVal Context As NameValueMap)
    If ThisApplication.ActiveDocumentType = kDrawingDocumentObject Then
        If CommandName = "AppFilePrintCmd" Then
            Dim oDrawDoc As DrawingDocument
            Set oDrawDoc = ThisApplication.ActiveDocument
            MsgBox ("Hey Ho")
            'oDrawDoc.PropertySets.Item("Inventor User Defined Properties").Item("PrintDate").Value = Format(Now, "H:M:S")
            oDrawDoc.Update
        End If
    End If
End Sub
____________________________________________________________

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

KraBBy
Mitglied
Maschinenbau-Ingenieur


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

Beiträge: 465
Registriert: 19.09.2007

Inventor Professional 2020
WinX

erstellt am: 22. Nov. 2021 16: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 Nur für Darkrondo 10 Unities + Antwort hilfreich

Das Problem könnte sein, dass Du einen aktiven "VBA-Prozess" brauchst, der auf das Event lauscht (z.B. eine modeless UserForm, die geöffnet ist). Wie hast Du das in Deinem Test gemacht?

Der Wunsch erscheint mir auch etwas aufwändig. Ist es denkbar, die Aktualisierung auch (zusätzlich) beim Öffnen der Zg. zu machen? (oder ist die iLogic-Regel zeitintensiv?)

Alternativ könnte man sich einen eigenen Druck-Befehl bauen (mit VBA) und auf die Benutzeroberfläche legen. Darin nur speichern (evtl. nach einer Abfrage), damit der Trigger für die iLogic anspringt, und anschließend den Drucken-Befehl aufrufen.

------------------
Gruß KraBBy

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

KraBBy
Mitglied
Maschinenbau-Ingenieur


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

Beiträge: 465
Registriert: 19.09.2007

Inventor Professional 2020
WinX

erstellt am: 22. Nov. 2021 16:52    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 Darkrondo 10 Unities + Antwort hilfreich

Hab vergessen zu erwähnen, dass es mit einem AddIn möglich sein sollte, auf Events zu lauschen.
Die laufen wohl "dauernd" mit IV mit.

Damit kenne ich mich aber nicht aus, ist im Grunde nur "Höhrensagen".
(ich vermute, dass die AddIns von Vault o.ä. so funktionieren und z.B. den IV-Speichern-Befehl kapern/entführen, um ihrer eigenen Logik zu folgen)

------------------
Gruß KraBBy

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: 119
Registriert: 21.02.2007

Win7 64-bit NVIDIA Quadro K4000
Inventor 2015

erstellt am: 23. Nov. 2021 08:57    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 Darkrondo 10 Unities + Antwort hilfreich

Hallo Georg,
Die Sache mit Events und VBA ist nicht besonders komfortabel.
Wurde erst kürzlich hier diskutiert.

------------------
Grüße
Andreas
etaCAD

[Diese Nachricht wurde von bwr am 23. Nov. 2021 editiert.]

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

Darkrondo
Mitglied
Maschinenbautechniker


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

Beiträge: 96
Registriert: 02.06.2009

Inventor 2019

erstellt am: 23. Nov. 2021 11:57    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 für eure Antworten. Ja, ich hätte wirklich gerne "Drucken" und am besten auch noch "Exportieren" als Auslöser. "Öffnen" ist mir da zu wenig und auch die wenigen Trigger,die iLogic bietet.

Ich bin bei meiner Recherche auch auf Addins gestoßen. Dort wurde aber auch erwähnt, dass die Sache "Drucken"-Event nicht mit Addins zu lösen wäre.  Vielleicht ist das auch veraltet gewesen.. Ich kenn mich mit AddIns noch nicht aus - aber wenn ihr mir jetzt sagt dass mein Fall damit zu lösen wäre, dann arbeite ich mich darin ein..

Viele Grüße,
Georg

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

KraBBy
Mitglied
Maschinenbau-Ingenieur


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

Beiträge: 465
Registriert: 19.09.2007

Inventor Professional 2020
WinX

erstellt am: 24. Nov. 2021 17: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 Nur für Darkrondo 10 Unities + Antwort hilfreich

Zur letzten Frage bzgl. AddIn kann ich nichts sagen. Ich bin skeptisch, ob das Vorhaben sinnvoll ist. Das kann liegt aber wohl an meiner Unkenntnis von AddIns und könnte durchaus unbegründet sein.
Mein Ansatz wäre es, möglichst nahe bei vorhandenen Möglichkeiten zu bleiben, bevor der Programmieraufwand zu sehr ausartet. Solche Sonderlösungen wollen ja am Ende auch gewartet werden, etc.

Das Problem ist doch, dass die iProperties (iP) geändert werden könnten, während die zugehörige Zg. bereits geöffnet ist. Dann wären die iP der Zg. nicht aktuell. (Sollte die Zg. nicht geöffnet sein, greift mein Vorschlag mit "nach Öffnen von Dokument" um die iP zu sync. bevor die Zg. gedruckt wird o.ä.)

Es gibt den Ereignisauslöser "iProperty-Änderung". Dazu könnte ich mir eine Regel vorstellen, die in den geöffneten Dokumenten nach Zg. sucht, die das aktuelle Modell referenzieren. Wird so eine Zg. gefunden, kann man darin die "Sync.-Regel" starten.

------------------
Gruß KraBBy

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik


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

Beiträge: 1911
Registriert: 15.11.2006

Windows 10 x64, AIP 2021

erstellt am: 24. Nov. 2021 23: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 Darkrondo 10 Unities + Antwort hilfreich

Hallo

@KraBBy
Er will das Druckdatum einfügen. Das geht nunmal nur direkt beim Drucken. Außer man schreibt das bei jedem Öffnen neu und definiert, das es nur in der gedruckten Variante gültig ist, aber nicht in der IDW. Es bleibt immer noch das Problem, das Inventor dann jedes Mal speichern will.

@Darkrondo
Ein OnPrint Event gibt es nicht. Man muss das OnActivateCommand Event belauschen und schauen ob der CommandName für's Drucken "AppFilePrintCmd" ist. Näher kommt man nicht ran. Sollte aber eigentlich reichen.
Ob einem der Aufwand für ein Addin zu groß ist, muss jeder selbst entscheiden. Ein Event abfangen und ein iProp schreiben ist recht überschaubar.

------------------
MfG
Ralf

RKW Solutions GmbH
www.RKW-Solutions.com

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: 119
Registriert: 21.02.2007

Win7 64-bit NVIDIA Quadro K4000
Inventor 2015

erstellt am: 25. Nov. 2021 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 Darkrondo 10 Unities + Antwort hilfreich

Hallo,

ich kann rkauskh nur bestätigen. Ein entsrechends onPrintEvent gibt es nicht. Man kann nur den entsrechenden Command abfangen und darauf entsprechend reagieren. Solch ein Addin ist nicht besonders komplex und ich würde mich nicht davor fürchten. Ich habe aber vermutlich auch andere Voraussetungen.
Eine Alternative wäre evt. ein Druck-Makro mit dem deine Kollegen die Zeichnungen ausdrucken. Darin kann man dann noch ein paar Zeilen Code einbauen, die sich um das Druckdatum kümmern. Hier ist ein Ansatz, der bei mir verwendet wird. Da habe ich ein paar Schalter in die Benutzerbefehle gemacht und seitdem druckt keiner mehr über den Inventor-Druck-Dialog.

Code:

Public Sub DruckenHP_A3()
    ' hier Druckername wie iin Windows bei den Geräten angeben
    Call Drucken("HP LaserJet 5200 PCL 6", kPaperSizeA3, kPaperSizeA3)
End Sub

Public Sub DruckenHP_A4()
    Call Drucken("HP LaserJet 5200 PCL 6", kPaperSizeA3, kPaperSizeA4)
End Sub

Private Sub Drucken(sPrinterName As String, maxPaperSize As PaperSizeEnum, PaperSize As PaperSizeEnum)
    'Print all sheets in drawing document
    'Get the active document and check whether it's drawing document
    If ThisApplication.ActiveDocument.DocumentType = kDrawingDocumentObject Then
   
        Dim oDrgDoc As DrawingDocument
        Set oDrgDoc = ThisApplication.ActiveDocument
   
        ' Set reference to drawing print manager
        ' DrawingPrintManager has more options than PrintManager
        ' as it's specific to drawing document
        Dim oDrgPrintMgr As DrawingPrintManager
        Set oDrgPrintMgr = oDrgDoc.PrintManager
        ' Set the printer name
        ' comment this line to use default printer or assign another one
        oDrgPrintMgr.Printer = sPrinterName
   
        oDrgPrintMgr.PrintRange = kPrintCurrentSheet
        'Set the paper size
        'PaperSizeEnum  A0 9993
        '              A1 9994
        '              A2 9995
        '              A3 9996
        '              A4 9997
       
        On Error Resume Next
       
        If PaperSize > maxPaperSize Then
            oDrgPrintMgr.PaperSize = PaperSize
        Else
            oDrgPrintMgr.PaperSize = maxPaperSize
        End If
       
        'ist Zeichnungsformat größer als gew. Blattformat
        If oDrgDoc.ActiveSheet.Size < oDrgPrintMgr.PaperSize Then
            oDrgPrintMgr.ScaleMode = kPrintBestFitScale
        ElseIf oDrgDoc.ActiveSheet.Size = oDrgPrintMgr.PaperSize Then
            oDrgPrintMgr.ScaleMode = kPrintCustomScale
            oDrgPrintMgr.[Scale] = 1
        Else: Debug.Print "ungültiges Papierformat"
        End If
       
        oDrgPrintMgr.AllColorsAsBlack = True
        oDrgPrintMgr.Rotate90Degrees = False
        oDrgPrintMgr.RemoveLineWeights = False
       
        'Set the paper orientation
        On Error Resume Next
        Select Case oDrgDoc.ActiveSheet.Orientation
            Case kLandscapePageOrientation
                oDrgPrintMgr.Orientation = kLandscapeOrientation
            Case kPortraitPageOrientation
                oDrgPrintMgr.Orientation = kPortraitOrientation
            Case Else    ' Andere Werte.
                Debug.Print "ungültige Orientierung"
        End Select
        oDrgPrintMgr.SubmitPrint
    End If
End Sub


------------------
Grüße
Andreas
etaCAD

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

Darkrondo
Mitglied
Maschinenbautechniker


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

Beiträge: 96
Registriert: 02.06.2009

Inventor 2019

erstellt am: 26. Nov. 2021 11: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

Hallo Andreas,

an die Möglichkeit, einen eigenen Button zu erstellen hatte ich auch schon gedacht. Aber anders wäre es mir lieber, denn ich habe die Erfahrung gemacht dass Benutzeroberflächen sehr gerne mal verloren gehen :-( Aber ich merke mir das trotzdem vor, falls ich es anders nicht hinbekomme.

Was das "Event lauschen" betrifft:

Sollte nicht eigentlich nicht dieser VBA-Code, den ich anfangs gepostet habe, schon funktionsfähig sein? Was fehlt mir hier noch? Könnte das evtl jemand ausprobieren?

__________________________________________________________________________
Private WithEvents m_InputEvents As UserInputEvents

Private Sub CommandButton1_Click()
    Set m_InputEvents = ThisApplication.CommandManager.UserInputEvents
End Sub

Private Sub m_InputEvents_OnActivateCommand(ByVal CommandName As String, ByVal Context As NameValueMap)
    If ThisApplication.ActiveDocumentType = kDrawingDocumentObject Then
        If CommandName = "AppFilePrintCmd" Then
            Dim oDrawDoc As DrawingDocument
            Set oDrawDoc = ThisApplication.ActiveDocument
            MsgBox ("Hey Ho")
            'oDrawDoc.PropertySets.Item("Inventor User Defined Properties").Item("PrintDate").Value = Format(Now, "H:M:S")
            oDrawDoc.Update
        End If
    End If
End Sub
____________________________________________________________

Danke, Georg

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