Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1392to1396
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Reihenfolge der Variablendeklaration wichtig?

Reihenfolge der Variablendeklaration wichtig?
19.11.2014 11:54:41
Stefan
Hallo zusammen,
bei der Erstellung eines kleinen VBA Codes bin ich auf ein Problem gestoßen, dass mir so bislang noch nicht passiert ist und ich mir nicht erklären kann.
Wenn ich per F8 schrittweise durch untenstehen Code gehe, kommt nach der letzen Zeile im Code folgende Fehlermeldung: "Laufzeitfehler 91:Objektvariable oder With-Blockvariable nicht festgelegt."
Und jetzt das Seltsame: Wenn ich die Reihenfolge in der Dim Zeile verändere und Lzelle an den Anfang stelle (Dim LZelle, Kopfzeile, Zelle, Startintervall, Endintervall As Range), wird keine Fehlermeldung angezeigt und der code läuft korrekt durch.
Hat irgendjemand eine Idee warum das so ist?
Vielen Dank und Grüße
Sub Glättung_automatisieren()
Dim Kopfzeile, Zelle, Startintervall, Endintervall, LZelle As Range
Dim i, LängeAuswahl As Integer
Sheets("Tabelle1").Select
Set Kopfzeile = Range("A1:Z1")
LZelle = Sheets("Tabelle1").Cells(1048576, 1).End(xlUp).Address

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Nein, aber..
19.11.2014 12:07:16
robert
Hi,
bei Dir ist nur LZelle als Range definiert.
LZelle als Ergebnis ist aber kein Range.
Daher jede Variable definieren, wie Du sie brauchst.
zB.: Dim Kopfzeile As Range, LZelle As String, usw...
Gruß
robert

Nur der übliche Anfänger-Deklarationsfehler, ...
19.11.2014 14:51:54
Luc:-?
…robert (& Stefan),
- ich nehme an, du meinst den -, ein Komma bei der Deklaration als Aufzählungs­trenner zu (miss-)inter­pretieren. Es ist aber der Trenner zwischen voll­ständigen Einzel­Deklarationen, die so nur aneinander­gereiht wdn können. Alles, dem kein As … folgt, ist automatisch als Variant deklariert und der kann alles enthalten, auch Range-Objekte (nur wdn die dann nicht vom VBE-Intellisense unterstützt). Nebenbei, es gibt auch noch direkt nach­stell­bare Kurz­Deklarations­zeichen wie bspw $ für String-Variablen (anstelle von As String), die aber nur bei der Deklaration verwendet wdn dürfen ($ nach Text­Fktsnamen hat eine etwas andere Bedeutung!).
Gruß, Luc :-?

Anzeige
Luc-aber LZelle as Range ist schon falsch-oder? oT
19.11.2014 16:24:32
robert

AW: Luc-aber LZelle as Range ist schon falsch-oder? oT
19.11.2014 16:40:21
Rudi
Hallo,
in dem Fall ja, da der lZelle durch = .Address ein String zugewiesen wird.
Richtig wäre Set lZelle = Cells(rows.count,1).end(xlup), da das ein Range-Objekt ergibt.
Gruß
Rudi

Danke,Frage ist, was wollte er wirklich mit LZelle
19.11.2014 16:49:03
robert
Hi,
leider ist nicht immer klar, was der Fragende will.
Und zu den Variablen:
ist es nicht korrekter diese so zu definieren, wie sie
gebraucht werden ?
Gruß
robert

IdR ja, nur denken Manche, das ginge auch ...
19.11.2014 17:51:05
Luc:-?
…per einfacher Aufzählung, robert,
und bei LZelle hat er dann schlicht was durcheinandergebracht.
Übrigens auch ein Grund, warum die UN-Präfix­Anwendung unpraktisch ist, denn dort müsste man dann ja in einem solchen Fall immer nicht nur die Deklaration, sondern auch alle VariablenNamen ändern, sonst ist diese Kennzeichnung nicht nur völlig wertlos, sondern auch irreführend. Letztlich ist ein solcher Name auch eine Art Schlüssel und ich habe schon vor 40 Jahren gelernt, das sog sprechende Schlüssel unpraktisch sind und auch erlebt, wie unpraktisch → permanenter Änderungs­dienst nur dafür (noch dazu bei DB-Relevanz!) und die FolgeKosten…
Gruß, Luc :-?
Besser informiert mit …

Anzeige
AW: Reihenfolge der Variablendeklaration wichtig?
19.11.2014 17:09:12
Daniel
Hi
ums nochmal zusammenzufassen:
der Ausdruck: "Sheets("Tabelle1").Cells(1048576, 1).End(xlUp).Address"
derzeugt als Ergebnis die Zelladrese, dh einen Textstring.
einen Textstring kannst du entweder einer Variable vom Typ STRING zuweisen (das wäre der passende Typ) oder einer Variable vom Typ VARIANT. Dieser Variablentyp ist allgemein und kann alles aufnehmen.
Deklarierst du mit:
Dim Kopfzeile, Zelle, Startintervall, Endintervall, LZelle As Range

so ist LZelle eine Range-Variable, weil du ihr diesen Typ mit "As Range" explizit zuweist.
Der Variablen vom Typ Range kannst du nur die Zellen direkt zuweisen, aber keine Texte oder sowas.
Dh. deine Zuweisung der Zelladresse erzeugt einen Fehler, weil die Adresse ein Text ist.
Tauschst du die Reihenfolge und stellst LZelle an den Anfang:
Dim LZelle, Kopfzeile, Zelle, Startintervall, Endintervall

so gibst du für LZelle keinen speziellen Variablentyp an, sondern erzeugst eine Variantvariable, welche sich automatisch an den zugewiesenen Wert anpasst.
Dieser Variantvariable kannst du dann den Adress-Text problemlos zuweisen.
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige