Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1036to1040
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

Laufzeitfehler

Laufzeitfehler
31.12.2008 16:20:00
Diver
Hallo Gemeinde
Ich habe aus einem Lehrbuch folgenden Code ausprobieren wollen:


Sub BedingtKopieren()
Dim iZeile As Integer
Dim iSpalte As Integer
Dim iMaxZeile As Long
With Sheets("Test")
iMaxZeile = .Range("A1048576").End(xlUp).Row '->> 1004 Laufzeitfehler: anwendungs- oder objektdefinierter fehler
'iMaxZeile = Cells(.Rows.Count, 1)'->> liefert 0?
MsgBox iMaxZeile
End With
End Sub



Beim Ausführen sowohl über Command Button, als auch über F8 bekmme ich Laufzeitfehler 1004: Anwendungs- oder objektdefinierter Fehler.
Egal was ich probiere (s, auch Cells...). Wie bekmme ich das behoben?
Schönen Dank!
holy Diver

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler
31.12.2008 16:24:00
Hajo_Zi
Hallo,
das Buch ist für Excel 2007 Du hast nur 65536 Zeilen.

AW: Laufzeitfehler
31.12.2008 16:26:02
Peter
Hallo Diver,
dein Lehrbuch scheint auf Excel 2007 zu basieren.
In Excel 2003, wie du es als installiert angibst, gibt es maximal .Range("A65536").End(xlUp).Row
Gruß Peter
AW: Laufzeitfehler
31.12.2008 16:55:00
Ramses
Hallo
Welches "Lehrbuch" ist das denn ?
Schreib es so
iMaxZeile = .Range("A" & Rows.Count).End(xlUp).Row
oder besser noch so
iMaxZeile = .Cells(Rows.Count,1).End(xlUp).Row
Dann kannst du 1. gleich mit vernünftigen Variablen arbeiten und 2.) ist es Versionsunabhängig.
Die Variable iZeile muss, ohne genaueres zu wissen, aber dann auch für den Fall der Fälle zwingend als
"Long" deklariert werden.
Gruss Rainer
Anzeige
AW: Laufzeitfehler
31.12.2008 17:06:00
Hajo_Zi
Hallo Rainer,
es soll auch vorkommen das die letzte Zelle in der Spalte belegt ist. Darum
LoLetzte = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
Gruß Hajo
AW: Laufzeitfehler
31.12.2008 17:11:00
Ramses
Hallo Hajo
Du hast natürlich recht,... trotzdem:
Ich konnte schon nicht verstehen, wie jemand in EXCEL 65536 Zeilen vollkriegt,... und noch weniger werde ich verstehen, warum jemand mehr als 10^6 Zeilen in EXCEL benötigt :-)
Gruss Rainer
AW: Laufzeitfehler
01.01.2009 17:29:00
Daniel
Hi
naja, das bekommt man schon voll, wenn man Daten aus anderen Quellen übernimmt und bearbeiten muss.
trotzdem halte ich die IIF-Variante für überflüssig, weil entweder habe ich weniger Daten, dann brauche ich es nicht, oder ich habe mehr Daten, dann muss ich mir für die Bearbeitung mit Excel sowieso was anderes einfallen lassen und hab noch ganz andere Probleme, bzw kann das ganze so programmieren, daß die letzte Zeile frei bleibt.
die Deklarierung als LONG ist erforderlich, da INTEGER nur bis 32.767 definert ist.
außerdem wurde mal hier im Forum irgendwo erwähnt, daß die Werte für Spalten- und Zeilen-Nummern intern sowieso auf LONG umgerechnet werden, dh es bringt nichts, die Variablen für Zeilen oder Spalten als Integer zu definieren, auch wenn man den Zahlenbereich nicht ausschöpft
Gruß, Daniel
Anzeige
AW: Laufzeitfehler
01.01.2009 17:37:00
ramses
Hallo
"....die Deklarierung als LONG ist erforderlich, da INTEGER nur bis 32.767 definert ist...."
Korrekt,... aber warum machst du es dann nicht ?
"iZeile" ist als Integer definiert"
"..daß die Werte für Spalten- und Zeilen-Nummern intern sowieso auf LONG umgerechnet werden..."
Die werden nicht auf Long umgerechnet. Jede Variable hat genau die Dimension die du zuweist.
Aber Long ist für Ganzzahlen immer die bessere Variante.
Aber heutzutage hat mein Laptop 20 mal mehr Arbeitsspeicher als mein Desktop vor 10 Jahren an Festplattenkapazität. Daher ist die Dimensionierung um Arbeitsspeicher zu sparen wohl eher nebensächlicher Natur :-)
Gruss Rainer
Gruss Rainer
Anzeige
AW: Laufzeitfehler
01.01.2009 18:11:00
Daniel
Hi
"Korrekt,... aber warum machst du es dann nicht ?"
vielleicht, weil das Makro nicht von mir ist?
"Die werden nicht auf Long umgerechnet. Jede Variable hat genau die Dimension die du zuweist."
Die Variablen natürlich nicht, aber wenn ich die Variable als Zeilen-Nr verwende, muss der Wert nach Long konvertiert werden, das macht Excel intern. Das kostet zwar keinen Speicherplatz, aber Rechenzeit.
Sollte der Wert über die Variable schon im Long-Format vorliegen, kann das entfallen.
So hat es zumindest mal ihr im Forum jemand erklärt.
ist bei den heutigen Geschwindigkeiten wahrscheinlich auch nicht relevant, aber nur so aus prinzip.
Gruß, Daniel
Anzeige
AW: Laufzeitfehler
02.01.2009 12:13:00
holy
Halo Ihr
Erst mal ein frohes Neues!!!
Sorry, dass ich mich nicht gemeldet habe, aber Ihr wissst ja ... Silvester = heftig und dann Familie.
Na gut.
Lieben Dank für eure Antworten. Sicher! Ich habe Excel 2003 un mit Integer und .Range("A65536").End(xlUp).Row geht es wunderbar!
Ich habe das Buch "VBA mit Excel" von Bernd Held (Markt + Technik). Habe schon länger nicht mit gearbeitet, von daher habe ich das mit dem Range total verpeilt.
Noch eine Frage: Warum liefert mir iMaxZeile = Cells(.Rows.Count, 1) bei zwei gefüllten Spalten (ca 20 Werte) 0 zurück?
holy diver
Anzeige
AW: Laufzeitfehler
02.01.2009 12:18:31
ramses
Hallo
Das würde dir auch korrekte Werte liefern, ... WENN du einen "Punkt" VOR Cells stehen hättest.
In dieser Form "Cells(Rows.Count,1)" frägt EXCEL die gerade AKTIVE Tabelle ab.
In dieser Form ".Cells(Rows.Count,1)" frängt EXCEL die in der WITH Anweisung genannte Tabelle ab.
Gruss Rainer
AW: Laufzeitfehler
02.01.2009 14:10:00
holy
Ah ja, stimmt.
Vielen Dank!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige