Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Abfrage ob Object-Variable einem Objekt zugewiesen

Abfrage ob Object-Variable einem Objekt zugewiesen
Martin
Hallo liebe Excelfreunde,
ich möchte gerne die Werte zahlreicher Steuerelemte einer UserForm (also von TextBoxen, ComboBoxen, CheckBoxen und OptionButtons) beim Schließen der UserForm in einem Dictionary Object ablegen, damit die UserForm-Steuerelemente nach dem erneuten Aufruf der UserForm wieder mit ihren "alten Werten" gefüllt werden können.
Dazu habe ich in Modul1 eine öffentliche Object-Variable für das Dictionary Object festgelegt:
Public MeldedatenDic As Object

Beim Schließen der UserForm werden alle Werte in das Dictionary Object übertragen:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Set MeldedatenDic = CreateObject("Scripting.Dictionary")
Dim cnt As Control
For Each cnt In Me.Frame1.Controls
Select Case TypeName(cnt)
Case "OptionButton", "CheckBox", "TextBox", "ComboBox"
'MsgBox cnt.Name & ": " & cnt.Value
MeldedatenDic(cnt.Name) = cnt.Value
End Select
Next
End Sub

Beim Aufruf der UserForm werden die Werte vom Dictionary Object zurück in die Steuerelemente der UserForm übertragen:

Private Sub UserForm_Initialize()
Dim myKey As Variant
For Each myKey In MeldedatenDic.Keys
Controls(myKey).Value = MeldedatenDic(myKey)
Next
End Sub
Das Problem: Beim ersten Aufruf der UserForm (also wenn das Dictionary Object noch nicht gefüllt ist), erscheint die Fehlermeldung "Laufzeitfehler '91': Objektvariable oder With-Blockvariable nicht festgelegt".
Wie kann ich abfragen, ob mein Object (also das in Modul1 definierte "MeldedatenDic") bereits zugewiesen wurde?
Viele Grüße
Martin
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
If Not MeldedatenDic Is Nothing Then... o.T.
28.02.2011 15:23:56
Josef
Gruß Sepp

Super, klappt! Trotzdem noch eine Frage dazu...
28.02.2011 15:33:44
Martin
Vielen lieben Dank Josef,
jetzt klappt alles wie gewünscht. Etwas in dieser Art hatte ich vorher selbstverständlich auch schon probiert, aber das ging nicht:
Private Sub UserForm_Initialize()
'Warum geht folgende Zeile nicht?
If MeldedatenDic = Nothing Then Exit Sub
Dim myKey As Variant
For Each myKey In MeldedatenDic.Keys
Controls(myKey).Value = MeldedatenDic(myKey)
Next
End Sub
Ich verstehe nicht, warum es mit If MeldedatenDic = Nothing Then Exit Sub nicht geklappt hat. Da kommt die Fehlermeldung "Fehler beim Kompilieren - Unzulässige Verwendung eines Objekts". Würdest du mir das bitte erklären?
Viele Grüße
Martin
Anzeige
anstatt dem "=" muss "is" stehen,
28.02.2011 15:43:26
Holger,
, glaube ich zumindest ;)
okay, darauf hätte ich selbst kommen können...
28.02.2011 15:52:54
Martin
Vielen Dank auch dir Holger. Nun ist alles klar.
Schöne Grüße
Martin
AW: okay, darauf hätte ich selbst kommen können...
28.02.2011 15:58:53
Holger,
Darauf bin ich auch sehr oft reingefallen und manchmal unterscheidet sich die Syntax auch je nach Object.
Ich lese gerade ein Buch über Windows Objektprogrammierung und da wird dann einiges klarer.
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Abfrage von Object-Variablen in Excel VBA


Schritt-für-Schritt-Anleitung

Um in Excel VBA zu überprüfen, ob eine Object-Variable, wie in diesem Fall MeldedatenDic, zugewiesen wurde, kannst du die folgende Vorgehensweise nutzen:

  1. Deklariere die Object-Variable in einem Modul:

    Public MeldedatenDic As Object
  2. Setze die Variable beim Schließen der UserForm:

    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
       Set MeldedatenDic = CreateObject("Scripting.Dictionary")
       Dim cnt As Control
       For Each cnt In Me.Frame1.Controls
           Select Case TypeName(cnt)
               Case "OptionButton", "CheckBox", "TextBox", "ComboBox"
                   MeldedatenDic(cnt.Name) = cnt.Value
           End Select
       Next
    End Sub
  3. Überprüfe beim Initialisieren der UserForm, ob die Variable bereits gesetzt wurde:

    Private Sub UserForm_Initialize()
       If MeldedatenDic Is Nothing Then Exit Sub
       Dim myKey As Variant
       For Each myKey In MeldedatenDic.Keys
           Controls(myKey).Value = MeldedatenDic(myKey)
       Next
    End Sub
  4. Verwende die korrekte Syntax: Achte darauf, dass du Is anstelle von = verwendest, um die Abfrage durchzuführen.


Häufige Fehler und Lösungen

  • Fehlermeldung "Laufzeitfehler '91'": Diese tritt auf, wenn du versuchst, auf MeldedatenDic zuzugreifen, bevor es gesetzt wurde. Stelle sicher, dass du If MeldedatenDic Is Nothing Then Exit Sub korrekt verwendest.

  • Kompilierungsfehler bei If MeldedatenDic = Nothing Then: Die Verwendung von = anstelle von Is führt zu einem Fehler. Korrigiere dies in If MeldedatenDic Is Nothing Then.


Alternative Methoden

Falls du die Abfrage nicht mit If ... Is Nothing durchführen möchtest, kannst du auch eine Fehlerbehandlung verwenden:

Private Sub UserForm_Initialize()
   On Error Resume Next
   Dim myKey As Variant
   Dim testValue As Variant
   testValue = MeldedatenDic("TestKey")
   If Err.Number <> 0 Then
       ' Fehler behandeln
       Exit Sub
   End If
   On Error GoTo 0

   For Each myKey In MeldedatenDic.Keys
       Controls(myKey).Value = MeldedatenDic(myKey)
   Next
End Sub

Praktische Beispiele

Hier sind einige Beispiele zur Verwendung der Abfrage:

  1. Abfrage einer nicht initialisierten Variable:

    If MeldedatenDic Is Nothing Then
       MsgBox "Das Dictionary ist noch nicht gesetzt."
    End If
  2. Sichere Zuweisung von Werten:

    If Not MeldedatenDic Is Nothing Then
       ' Werte aus dem Dictionary verwenden
    End If

Tipps für Profis

  • Verwende Option Explicit am Anfang deiner Module, um sicherzustellen, dass alle Variablen deklariert sind. Das hilft, Fehler bei der Verwendung von Object-Variablen zu vermeiden.

  • Nutze die Dictionary-Funktionalität, um komplexere Datenstrukturen zu verwalten. Dies kann die Leistung deiner VBA-Anwendungen erheblich steigern.

  • Teste deine Abfragen regelmäßig in der Entwicklungsumgebung, um sicherzustellen, dass sie in allen Szenarien robust sind.


FAQ: Häufige Fragen

1. Wie kann ich prüfen, ob eine Variable in VBA zugewiesen ist?
Du kannst dies mit If myVariable Is Nothing Then tun, um zu überprüfen, ob die Variable bereits einen Wert hat.

2. Was bedeutet der Fehler "Objektvariable oder With-Blockvariable nicht festgelegt"?
Dieser Fehler tritt auf, wenn du versuchst, auf eine Object-Variable zuzugreifen, die noch nicht initialisiert wurde. Stelle sicher, dass du die Variable korrekt zuweist, bevor du darauf zugreifst.

3. Wie kann ich eine Object-Variable zurücksetzen?
Du kannst eine Object-Variable zurücksetzen, indem du sie auf Nothing setzt, z.B. Set myObject = Nothing.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige