Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  VBA Makro auf Dokumentwechsel reagieren

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 Makro auf Dokumentwechsel reagieren (1967 mal gelesen)
axi92
Mitglied
Konstrukteur


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

Beiträge: 685
Registriert: 20.02.2010

Inventor 2014 64bit SP2
Vault Basic 2014 64bit SP1
HP Z200
Win 7 64bit
16GB RAM
CPU: i5 3,2GHz
GPU: Nvidia Quadro K600

erstellt am: 14. Nov. 2013 07:16    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


document_onchange.png

 
Gibt es irgendeine Funktion oder Callback das aufgerufen wird wenn man ein Dokument wechselt?
Denn ich möchte in einer Form immer die aktuellen iPropertie Werte vom derzeitig ausgewählten Dokument anzeigen.
Mir fällt derzeit nur ein Button ein wo man dann aktualisieren kann, das müsste man allerdings händisch machen.
Wenns automatisch geht wäre das schon besser.
Zur Info: Habe mit iLogic noch nicht gearbeitet bzw noch keine ahnung wie das geht.

Edit:
Habe etwas gefunden jedoch weiß ich nicht wie ich es anwenden soll.
Bild -->

Finde in der Hilfe auch nirgends Beispielcodes
------------------
Grüße aus Wien
Philipp

[Diese Nachricht wurde von axi92 am 14. Nov. 2013 editiert.]

[Diese Nachricht wurde von axi92 am 14. Nov. 2013 editiert.]

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: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 14. Nov. 2013 11: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 axi92 10 Unities + Antwort hilfreich

Hallo

Das Stichwort heißt Klassenmodul. Damit kann man auch in VBA auf Events reagieren. Das OnChange-Event hat nichts mit einem Dokumentwechsel zu tun, sondern wird bei jeder Änderung im Dokument abgefeuert. Mach lieber einen Bogen um dieses Event. Damit kann man Inventor schnell nahezu unbenutzbar machen. OnEnvironmentChange wäre wahrscheinlich besser geeignet.

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

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

axi92
Mitglied
Konstrukteur


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

Beiträge: 685
Registriert: 20.02.2010

Inventor 2014 64bit SP2
Vault Basic 2014 64bit SP1
HP Z200
Win 7 64bit
16GB RAM
CPU: i5 3,2GHz
GPU: Nvidia Quadro K600

erstellt am: 14. Nov. 2013 13:16    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

Ok danke leider weiß ich noch immer nicht wie ich so etwas anwende.
Bis jetzt habe ich noch nie mit Klassen gearbeitet oder war mir dessen nicht bewust.
Ich habe so etwas hier gefunden:
http://ww3.cad.de/foren/ubb/Forum465/HTML/000107.shtml#000014
Aber das ist .NET

------------------
Grüße aus Wien
Philipp

[Diese Nachricht wurde von axi92 am 14. Nov. 2013 editiert.]

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: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 14. Nov. 2013 13:42    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 axi92 10 Unities + Antwort hilfreich

Hallo

1. Beitrag

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

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

axi92
Mitglied
Konstrukteur


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

Beiträge: 685
Registriert: 20.02.2010

Inventor 2014 64bit SP2
Vault Basic 2014 64bit SP1
HP Z200
Win 7 64bit
16GB RAM
CPU: i5 3,2GHz
GPU: Nvidia Quadro K600

erstellt am: 14. Nov. 2013 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

Es tut mir ja leid aber ich werde aus dem Thread auch nicht schlau?
Habe mit so etwas noch nicht gearbeitet daher bringt mir das nicht viel, denke ich zu mindest.
Ich kenne es nur von einer anderen Sprache als Callback:
public OnEnvironmentChange()
{
   'Was geschehen soll
}
Und das wird halt immer aufgerufen laut Definition:
"Fires when the active environment changes"
------------------
Grüße aus Wien
Philipp

[Diese Nachricht wurde von axi92 am 14. Nov. 2013 editiert.]

[Diese Nachricht wurde von axi92 am 14. Nov. 2013 editiert.]

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: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

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

Hallo

Eigentlich erklärt und zeigt dir der Beispielcode wie man in einem Klassenmodul einen Eventhandler erzeugt und wie man diesen in seiner Sub nutzt. Setze in deine Form folgendes:

Code:
Private Sub UserForm_Activate()
    ' Create a new clsEvents object.
    Dim oEvent As New clsEvents
   
    oEvent.LoopMe
End Sub


Jetzt erzeugst du ein neues Klassenmodul und nennst es clsEvents. Da fügst du dann das ein:

Code:
Option Explicit

' Declare the event objects
Private WithEvents oUIEvents As Inventor.UserInterfaceEvents

Public Sub LoopMe()
    Set oUIEvents = ThisApplication.UserInterfaceManager.UserInterfaceEvents
   
    ' Loop
    Do While UserForm1.Visible
        DoEvents
    Loop
End Sub

Public Sub oUIEvents_OnEnvironmentChange(ByVal Environment As Inventor.Environment, ByVal EnvironmentState As Inventor.EnvironmentStateEnum, ByVal BeforeOrAfter As Inventor.EventTimingEnum, ByVal Context As Inventor.NameValueMap, ByRef HandlingCode As Inventor.HandlingCodeEnum)

' AFTER
If BeforeOrAfter = EventTimingEnum.kAfter Then
    'Update deiner Form mit aktuellen iProps
    'als Beispiel hier der aktuelle Dokumentname
    UserForm1.TextBox1.Text = ThisApplication.ActiveDocument.FullDocumentName
End If

End Sub


Das Problem an der Stelle ist das der Loop manchmal deine CPU auf Vollast laufen läßt. Mach dir mal ernsthaft Gedanken darüber auf .Net zu wechseln. Mit VBA kommst du schnell an Grenzen, wenn das Projekt wächst.

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

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

axi92
Mitglied
Konstrukteur


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

Beiträge: 685
Registriert: 20.02.2010

Inventor 2014 64bit SP2
Vault Basic 2014 64bit SP1
HP Z200
Win 7 64bit
16GB RAM
CPU: i5 3,2GHz
GPU: Nvidia Quadro K600

erstellt am: 18. Nov. 2013 06:43    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

Kann auf kein .NET wechseln da es in der Arbeit nicht installiert ist und auch nicht installiert werden darf.
Und zu hause habe ich kein IV.
Und am Tag nur 1 mal testen zu können ist unmöglich xD

------------------
Grüße aus Wien
Philipp

[Diese Nachricht wurde von axi92 am 18. Nov. 2013 editiert.]

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

axi92
Mitglied
Konstrukteur


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

Beiträge: 685
Registriert: 20.02.2010

Inventor 2014 64bit SP2
Vault Basic 2014 64bit SP1
HP Z200
Win 7 64bit
16GB RAM
CPU: i5 3,2GHz
GPU: Nvidia Quadro K600

erstellt am: 18. Nov. 2013 10: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

Danke nochmal habe es jetzt eingebaut so wie ich es benötige.
Jedoch wenn ich die App (das Makro) das erste mal starte läuft die Klasse.
Wenn ich dann auf das "X" drücke zum Schließen und dann erneut die App aufrufe bekomme ich:
Run-time error: '429':
ActiveX component can't create object

Und es zeigt mir den Fehler in dem Modul wo ich die "UserForm1.Show" aufrufe.


Wenn ich aber!
Nachdem ich das Makro über "x" beendet habe auch im VBA Editor auf "Reset" drücke dann kann ich es sehrwohl ohne Probleme wieder aufrufen.
Kann es sein das ich die Klasse irgendwie separat beenden muss?

Beendet wird es mit:

Code:

Private Sub UserForm_Terminate()
    End
End Sub


------------------
Grüße aus Wien
Philipp

[Diese Nachricht wurde von axi92 am 18. Nov. 2013 editiert.]

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

axi92
Mitglied
Konstrukteur


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

Beiträge: 685
Registriert: 20.02.2010

Inventor 2014 64bit SP2
Vault Basic 2014 64bit SP1
HP Z200
Win 7 64bit
16GB RAM
CPU: i5 3,2GHz
GPU: Nvidia Quadro K600

erstellt am: 29. Nov. 2013 10:37    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

Ralf kein Idee? 

------------------
Grüße aus Wien
Philipp

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: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 02. Dez. 2013 16: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 axi92 10 Unities + Antwort hilfreich

Hallo

das Phänomen hatte ich auch, aber keine Lösung gefunden. Wenn du kein VisualStudio installieren und auf .Net wechseln darfst, kannst du dein Glück nur noch mit iLogic und dessen Eventtriggern versuchen.

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

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

axi92
Mitglied
Konstrukteur


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

Beiträge: 685
Registriert: 20.02.2010

Inventor 2014 64bit SP2
Vault Basic 2014 64bit SP1
HP Z200
Win 7 64bit
16GB RAM
CPU: i5 3,2GHz
GPU: Nvidia Quadro K600

erstellt am: 03. Dez. 2013 13:18    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

Ok danke, kann man iLogic und VBA kombinieren? Also vom Einen das Andere aufrufen?

------------------
Grüße aus Wien
Philipp

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