Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
824to828
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
824to828
824to828
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Ermitteln der nächsten leeren Zelle

Ermitteln der nächsten leeren Zelle
07.12.2006 09:15:43
Thomas
Guten morgen,
Ich hab ein Problem mit der ermittlung der nächsten leeren Zelle.
Der Code den ich verwende funktioniert soweit:
If IsEmpty(ActiveSheet.Range("A1")) Then Exit Sub
intRow = 1
Do Until IsEmpty(Cells(intRow, 1))
intRow = intRow + 1
Loop
a = Cells(intRow - 1, 1).Address(False, False)
Ist aber mehr als eine Arbeitsmappe geöffnet bekomme ich folgende Fehlermeldung in der letzten codezeile:
Laufzeitfehler 1004:
Anwendungs- oder objektdefinierter Fehler
Besten Dank im Voraus für eure Hilfe
Tom

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ermitteln der nächsten leeren Zelle
07.12.2006 09:34:31
Erich
Hallo Tom,
wenn der Code im Modul einer Tabelle ("Tab1") steht, Tab1!A1 leer ist und ein anderes Blatt ("Tab2") aktiv ist,
gibts einen Fehler.
Mit
If IsEmpty(ActiveSheet.Range("A1")) Then Exit Sub
fragst du Tab2!A1 ab - das ist nicht leer.
Danach spielt Tab2 keine Rolle mehr - Cells(...) usw. beziehen sich auf Tab1, weil hier der Code steht.
intRow ist dann = 1,
a = Cells(intRow - 1, 1).Address(False, False) wäre dann
a = Cells(0, 1).Address(False, False)
Muss das Makro im Code einer Tabelle stehen?
Wenn ja, würde ich empfehlen, ganz oben "With ActiveSheet" und ganz unten "End With" zu schreiben,
dazwischen dann immer .Cells statt Cells und .Range statt Range
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Ermitteln der nächsten leeren Zelle
07.12.2006 09:58:33
Thomas
Hallo Erich,
Danke für die schnelle Antwort,
Der Code steht in einer Tabelle und ist Teil einer Funktion.
Es geht im Prinzip darum einen Gefilterten Teilbereich aus einer Tabelle in eine neue Arbeitsmappe zu kopieren.
Dazu wir für das Kopieren die nächste leere Zelle ermittelt und über diess Ergebniss 'Range' errechnet.
Der Untenstehende Code funktioniert als Makro, wird der Code aber in das ganze Konstukt eingearbeitet ,inklusive Windows(2).Active, bekomme ich diesen Laufzeitfehler.
Hier der Code das Makros:
Dim intRow As Integer
Sheets("Tabelle1").Select
Cells.Select
Selection.Copy
Sheets.Add
ActiveSheet.Name = "TEMP1"
Sheets("TEMP1").Select
ActiveSheet.Paste
Rows("1:7").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
Columns("A:B").Select
Selection.Delete Shift:=xlToLeft
Range("B1").Select
Selection.AutoFilter
ActiveWindow.ScrollColumn = 101
Selection.AutoFilter Field:=141, Criteria1:="1"
ActiveWindow.ScrollColumn = 1
If IsEmpty(Range("A1")) Then Exit Sub
intRow = 1
Do Until IsEmpty(Cells(intRow, 1))
intRow = intRow + 1
Loop
lL = Cells(intRow - 1, 1).Address(False, False)
a = Mid(lL, 2, 3)
b = "D2:D" & a
Range(b).Select
Selection.ClearContents
c = "A2:E" & a
Range(c).Select
Sheets("Tabelle1").Select
Range("C9").Select
Anzeige
AW: Ermitteln der nächsten leeren Zelle
07.12.2006 10:42:21
Erich
Hallo Tom,
was du nicht verraten hast:
Im Klassenmodul welcher Tabelle steht der Code?
Was für eine Funktion ist das, zu der der Code gehört? Ist das vielleicht eine benutzerdefinierte Funktion?
Kann der Code nicht in einem Normalmodul stehen und von der Funktion aufgerufen werden?
So oder ähnlich könnte es funzen (ungetestet):
Sub tst()
Dim lL As String, a As String, b As String, c As String
Dim intRow As Integer
Sheets.Add.Name = "TEMP1"
With ActiveSheet  ' das ist Sheets("TEMP1")
Sheets("Tabelle1").Range(Cells(8, 3), Cells(Rows.Count, Columns.Count)).Copy .Cells(1, 1)
.Range("B1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:="1"
If IsEmpty(.Cells(1, 1)) Then Exit Sub       ' soll dann TEMP1 das aktive Blatt bleiben?
intRow = 0
Do Until IsEmpty(.Cells(intRow + 1, 1))
intRow = intRow + 1
Loop
.Range(.Cells(2, 4), .Cells(intRow, 4)).ClearContents
.Range(.Cells(2, 1), .Cells(intRow, 1)).Select
End With
Sheets("Tabelle1").Select
Range("C9").Select
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige