Office: Selbstmord einer Klassen-Instanz auslösen

Helfe beim Thema Selbstmord einer Klassen-Instanz auslösen in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo, ich hab eine Klasse, die auf einen SelectionChange Event eines Arbeitsblatts reagiert. Die Klasseninstanz soll sich nun bei Eintreten einer... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von myLord, 8. Januar 2012.

  1. Selbstmord einer Klassen-Instanz auslösen


    Hallo,

    ich hab eine Klasse, die auf einen SelectionChange Event eines Arbeitsblatts reagiert.

    Die Klasseninstanz soll sich nun bei Eintreten einer speziellen Situation selbst terminieren.

    Ich weiß nur nicht, wie sowas geht.

    bei einer Form geht es mit
    unload me

    Ausserhalb der Klasse würde ich die Klassen-Variable einfach auf nothing setzten

    set myClass = nothing

    aber wie geht sowas innerhalb der Instanz

    set me = nothing
    gibt ne Fehlermeldung
    auch unload me will nicht klappen

    ich verwende Excel 97

    danke und Gruß
    Thomas

    :)
     
    myLord, 8. Januar 2012
    #1
  2. Beverly
    Beverly Erfahrener User
    Hi Thomas,

    als was ist bei dir myClass definiert - als Klasse selbst? Ich würde denken, du musst nicht die Klasse sondern das Array leeren, in welches du die Objekte aufgenommen hast.


    Selbstmord einer Klassen-Instanz auslösen grusz.gif
     
    Beverly, 9. Januar 2012
    #2
  3. ich hab ein Klassenmodul.
    dieses instanziere ich in einem "normalen" (VBA-)Modul als zB:

    VBA Modul Code:
    Code:
    Klassenmodul Code (Klasse "clMyClass")
    Code:
    Der Aufrufende Code bekommt nicht mit, dass das Abbruchkriterium der Klasse erreicht ist. Somit kann der die KlassenVariable nicht auf Nothing setzten
     
    myLord, 9. Januar 2012
    #3
  4. Selbstmord einer Klassen-Instanz auslösen

    Hallo Thomas,

    wie man eine Klasse sich selbst von "innen heraus" zerstören lassen kann, weiß ich auch nicht. Aber Du kannst zumindest die Verbindung zu den Events "kappen", indem Du vorgibst:
    Code:
    Dann läge sie allerdings noch als inaktive "Leiche" (welch morbides Vokabular...) im Speicherkeller.


    Ist Dein Codebeispiel repräsentativ? Dann könntest Du ggf. auch die Klasse "DieseArbeitsmappe" nutzen und folgenden Code verwenden:
    Code:
    Eine "normale" Variable kann sich selbt "terminieren" - auch wenn das hier unsauber formuliert sein mag.

    Grüße
    EarlFred
     
    EarlFred, 9. Januar 2012
    #4
  5. Diese Leiche im Keller stört mich an anderer Stelle.

    ich hab einen CommandButton, der die ganze routine Startet. Der dient allerdings auch dazu, sie manuell zu stoppen

    Also der aufrufende Code lautet dann eher so:

    Code:
    Sorry, dass ich das nicht gleich erwähnt hatte. Somit würde die Leiche natürlich zu kuddelmuddel führen.
     
    myLord, 9. Januar 2012
    #5
  6. ..mmmhh Hi EarlFred, ich kann' mir nicht verkneifen:

    Inaktive Leiche?.. was ist dann eine Aktive Leiche -Zombie? *eek.gif*

    schönen Tag noch! *Smilie
     
    CitizenX, 9. Januar 2012
    #6
  7. Ich hab einen Workaround, der aus der Instanz eine Prozedur im Modul aufruft, die dann die Instanz terminiert.

    Nur finde ich das nicht so schön, da ja dann die Klasse immer von dem Modul abhängt.

    In dem eine Fall hilft es, aber rein Prinzipiell würde mich schon interessieren, ob es auch aus der Instanz heraus geht (so wie aus einem Form ja auch)
     
    myLord, 9. Januar 2012
    #7
  8. Selbstmord einer Klassen-Instanz auslösen

    Hallo Thomas,

    Code:
    Wie sieht das konkret aus?

    Nochmal die Frage: Ist Dein Codebeispiel repräsentativ? Wenn ja, wäre in meinen Augen eine Klasse mit Tauben auf Spatzen geschossen (Futter für Steffen *wink.gif*) - siehe letzter Post. *wink.gif*
    Wenn die Klasse nicht dynamisch verwendet wird und es eine 1:1 Beziehung wie im Beispiel gibt, reicht allein:
    Code:
    ...sofern myClass als Public deklariert ist.

    @Steffen:
    Code:
    Grüße
    EarlFred
     
    EarlFred, 10. Januar 2012
    #8
  9. nunja, ich benötige eine Klasse um die Worksheet-Events abzufangen. Das kann ich auf Modulebene nicht.

    Und ja, im meinem Beispiel gibt es glücklicherweise diesen 1:1 Beziehung, deswegen funktioniert auch mein Workaround (den ich jetzt gegen die andere Variante tauschen werde, da die doch schöner ist)

    nur rein zum Verstehen, also hypothetisch, wenn ich in Zukunft eine Klasse habe, die diese 1:1 verbindung Modul:Klasse nicht erfüllt, gäbe es dafür auch eine Lösung?
     
  10. Hi

    kann es sein das Du versuchst

    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

    End Sub


    nachzubauen?
    oder was ist der Sinn dahinter
     
    chris-kaiser, 10. Januar 2012
    #10
  11. Ich erstelle ein Makro, dass mir die Zellen in der Reihenfolge des selektierens in eine zu ausgewählte Zielzelle (und alle darunter folgenden Zellen) einfügt.

    Ich muß immer mal wieder Daten aus einer Tabelle in einer sich ändernden Reihenfolge in eine Zieltabelle kopieren.
    mit dem ewigen [STR-C; Blattwechseln; Inhalte (Werte) Einfügen; Blatt zurück, nächsten Block auswählen ...] wird man blöd im Kopp und bekommt Krämpfe in der Hand (bis man selbst zum Zombie wird *wink.gif* ).
    Nun wollt ich mir ein Makro schreiben, mit dem ich eine Kopierserie starten kann und ab dem Zeitpunkt alle selektierten Zellen in der entsprechenden Reihenfolge in mein zuvor selektiertes Ziel-Blatt schreiben lassen.

    Das hab ich auch soweit zu meiner Zufriedenheit fertiggestellt.

    Sheetselectionchange wollte ich nicht nachbauen, ich benötige den SelectionChange Event eines frei wählbaren Blattes.

    Nur um das Event abzufangen, muß ich in meinem Makro auf Klassen zurückgreifen. Nun gibt es aber verschiedene Vorfälle, die zu einem Abbruch der Kopierprozedur führen sollen.
    Das ist einmal das Betätigen des Start/Stop-Buttons, aber auch das erreichen der Maximalen Zeilenzahl in einem Excelblatt.
    Ersteres wird vom Modul erkannt letzteres von der Klasse.

    Wie schon geschrieben läuft es so, wie es jetzt ist, wie gewünscht. Nun bin ich zwischenzeitlich auf das Problem gestoßen, dass sich die Klasse selbst eliminieren müßte, was sie bisher aus meiner Sicht, nicht ohne externe Hilfe schafft.

    Nur um etwas gelehrnt zu haben würde mich weiterhin interessieren, ob es doch geht. (Also ein Terminate Me, oder Set Me = nothing - das Object 'Me' steht mir aber leider nicht zur Verfügung)
     
  12. Hi

    aha *wink.gif*

    ist das dann sowas in der Art

    Code:
     
    chris-kaiser, 10. Januar 2012
    #12
  13. Selbstmord einer Klassen-Instanz auslösen

    Interessante Kombination: Klassenunterstütztes Copy&Paste

    Manchmal hilft es auch, über die verwendeten Strukturen nachzudenken, um Kopieren zu vereinfachen (zu automatisieren) oder gar ganz verzichtbar zu machen.
     
  14. Hallo Thomas,

    das ist vermutlich ein Beispiel dafür, dass nicht die letzten Details einer angewandten Methode interessant sind, sondern die zugrundeliegende Aufgabe und Herangehensweise grundlegend hinterfragt werden sollte.

    Also wohl doch: Mit Spatzen auf Kanonen geschossen...? *wink.gif*

    Grüße
    EarlFred
     
    EarlFred, 10. Januar 2012
    #14
  15. nein *cool.gif*

    Dein Makro fängt alle Zelle-Wechsel-Events der Makro-Mappe ab.

    Mein Makro fängt die Zelle-Wechsel-Events eines Sheets einer fremden Mappe ab.
     
Thema:

Selbstmord einer Klassen-Instanz auslösen

Die Seite wird geladen...
  1. Selbstmord einer Klassen-Instanz auslösen - Similar Threads - Selbstmord Klassen Instanz

  2. "Klasse nicht registriert" nach Umstieg auf 64 Bit

    in Microsoft Word Hilfe
    "Klasse nicht registriert" nach Umstieg auf 64 Bit: Hallo zusammen, ich nutze ein selbst geschriebenes VBA-Makro seit Word 97. Es lief unter allen 32-Bit-Versionen von Office, einschließlich Office 2019. Jetzt bin ich auf einem neuen PC umgestiegen...
  3. Erste Schritte mit Ihrem Klassen- oder Kursteam

    in Microsoft Teams Tutorials
    Erste Schritte mit Ihrem Klassen- oder Kursteam: Erste Schritte mit Ihrem Kursteam Microsoft Teams for Education Mehr... Weniger Greifen Sie in Office 365 Education...
  4. Excel 2016 diagramm unterschiedliche intervalle und Klassen

    in Microsoft Excel Hilfe
    Excel 2016 diagramm unterschiedliche intervalle und Klassen: Hallo, ich möchte gern folgendes Diagramm nachbauen mit meinen eigenen Daten zu Datum und Water discharge. Das angeführte Diagramm wurde aus zwei diagrammen zusammengeschnitten. Die Datumsachse...
  5. Klasse nicht registriert

    in Microsoft Access Hilfe
    Klasse nicht registriert: Bitte um Hilfe. Folgender Code hat immer funktioniert (funktioniert auch auf drei anderen Rechnern). Seit neuestem auf meinem PC nicht mehr. Es kommt die Fehlermeldung Klasse nicht registriert....
  6. Klasse eines Controls per VBA ermitteln

    in Microsoft Access Hilfe
    Klasse eines Controls per VBA ermitteln: Hallo zusammen... gibt es eine Möglichkeit, die Klasse eines Controls per Code auszulesen? Im Eigenschaftsfenster eines Controls im Formular steht ja z.B. im Register unter...
  7. Teams-Besprechung mit Klasse planen

    in Microsoft Teams Hilfe
    Teams-Besprechung mit Klasse planen: Nach dem ersten Lockdown bin ich wieder Anfänger. Wenn ich mit meiner Klasse, welche ein Team ist, eine Besprechung abhalten will, muss ich jeden Teilnehmer einzeln eingeben? Wie kann ich das...
  8. ich kann nicht mit meiner klasse verbunden werden - warum?

    in Microsoft Teams Hilfe
    ich kann nicht mit meiner klasse verbunden werden - warum?: grüße euch wer kann mir bitte helfen? ich kann nicht mit meiner klasse verbunden werden - mit anderen schon habe macbookPro wer kann mir bitte helfen 1477301f-9dd5-4ab3-b850-0d4c7275d73e
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden