![]() |
Betrifft: Reihenfolge der Variablendeklaration wichtig?
von: Stefan
Geschrieben am: 19.11.2014 11:54:41
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
![]() ![]() |
Betrifft: Nein, aber..
von: robert
Geschrieben am: 19.11.2014 12:07:16
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
![]() ![]() |
Betrifft: Nur der übliche Anfänger-Deklarationsfehler, ...
von: Luc:-?
Geschrieben am: 19.11.2014 14:51:54
…robert (& Stefan),
- ich nehme an, du meinst den -, ein Komma bei der Deklaration als Aufzählungstrenner zu (miss-)interpretieren. Es ist aber der Trenner zwischen vollständigen EinzelDeklarationen, die so nur aneinandergereiht 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 nachstellbare KurzDeklarationszeichen wie bspw $ für String-Variablen (anstelle von As String), die aber nur bei der Deklaration verwendet wdn dürfen ($ nach TextFktsnamen hat eine etwas andere Bedeutung!).
Gruß, Luc :-?
![]() ![]() |
Betrifft: Luc-aber LZelle as Range ist schon falsch-oder? oT
von: robert
Geschrieben am: 19.11.2014 16:24:32
![]() ![]() |
Betrifft: AW: Luc-aber LZelle as Range ist schon falsch-oder? oT
von: Rudi Maintaire
Geschrieben am: 19.11.2014 16:40:21
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
![]() ![]() |
Betrifft: Danke,Frage ist, was wollte er wirklich mit LZelle
von: robert
Geschrieben am: 19.11.2014 16:49:03
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
![]() ![]() |
Betrifft: IdR ja, nur denken Manche, das ginge auch ...
von: Luc:-?
Geschrieben am: 19.11.2014 17:51:05
…per einfacher Aufzählung, robert,
und bei LZelle hat er dann schlicht was durcheinandergebracht.
Übrigens auch ein Grund, warum die UN-PräfixAnwendung 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 Änderungsdienst nur dafür (noch dazu bei DB-Relevanz!) und die FolgeKosten…
Gruß, Luc :-?
Besser informiert mit …
![]() ![]() |
Betrifft: AW: Reihenfolge der Variablendeklaration wichtig?
von: Daniel
Geschrieben am: 19.11.2014 17:09:12
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
Dim LZelle, Kopfzeile, Zelle, Startintervall, Endintervall
![]() |