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

erste freie Zelle in mehreren Seiten

erste freie Zelle in mehreren Seiten
Deister
Hallo zusammen,
Ich möchte mittels VBA in den Seiten "database 1 ... 10" jeweils die erste Reihe durchkämmen und dann auf die erste freihe Zelle springen.
D.h zuerst die Seite "database 1", falls alle Zellen in Reihe 1 belegt sind, dann Seite "database 2" u.s.w.
Ich möchte auf die erste freie Zelle springen, nicht auf die erste Zelle nach der letzten belegten.
Kann mir jemand diesbezüglich behilflich sein?
MfG
Ant

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
erste freie Zelle in mehreren Blättern
19.10.2010 18:24:35
Erich
Hi Ant,
kurz zu den Bezeichnungen:
Mit "Seite" meinst du wohl Tabelöleneblätter, kurz Blätter.
"Reihe" nennt man in Excel "Zeile".
Probier mal

Option Explicit
Sub ErsteFreie()
Dim ii As Long, lngC As Long
For ii = 1 To 10
With Sheets("database " & ii)
lngC = FreieZelleRechts(.Cells(1, 1))
If FreieZelleRechts(.Cells(1, 1)) > 0 Then
.Activate
.Cells(1, lngC).Select
Exit For
End If
End With
Next ii
End Sub
Function FreieZelleRechts(rng As Range) As Long
With rng.Cells(1)
If IsEmpty(.Cells) Then
FreieZelleRechts = .Column
ElseIf .Column = Columns.Count Then
MsgBox .Address & " ist bereits letzte Zelle der Zeile!", vbCritical
ElseIf IsEmpty(.Offset(0, 1)) Then
FreieZelleRechts = .Column + 1
ElseIf .End(xlToRight).Column 
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: erste freie Zelle in mehreren Blättern
20.10.2010 09:02:19
Deister
Hallo Erich,
Seite = Blatt
Reihe = Zeile
Trotzdem schön, dass du mein Luxemburger-Deutsch verstanden hast ;-)
Danke für deine Mühe, doch leider funst es nicht ganz. Die 10 Blätter, sowie die erste Zeile werden richtig erkannt, doch er springt nur zum ersten Blatt in die zweite Zelle (E1), obschon alle Zellen der ersten Zeilen bis Blatt 5 (EG1) schon belegt sind. Müsste eigentlich nach EK1 springen.
Zum Test habe ich nun Blatt 1 in Blatt 11 umgetauft und "For ii = 1 To 10" durch "For ii = 2 To 11" ersetzt und habe das ähnliche Resultat. Jetzt spring er nach Blatt 2 (database 2) in die gleiche zweite Zelle (E1).
Kann es etwas damit zu tun haben, dass es sich um verbundene Zellen handelt? (A1:D1 = merged Cells; E1:H1 = merged Cells u.s.w. , d.h. es handelt sich immer um Vierergruppen)
Gruss aus Luxemburg
Ant
Anzeige
AW: erste freie Zelle in mehreren Blättern
20.10.2010 09:03:24
Deister
Hallo Erich,
Seite = Blatt
Reihe = Zeile
Trotzdem schön, dass du mein Luxemburger-Deutsch verstanden hast ;-)
Danke für deine Mühe, doch leider funst es nicht ganz. Die 10 Blätter, sowie die erste Zeile werden richtig erkannt, doch er springt nur zum ersten Blatt in die zweite Zelle (E1), obschon alle Zellen der ersten Zeilen bis Blatt 5 (EG1) schon belegt sind. Müsste eigentlich nach EK1 springen.
Zum Test habe ich nun Blatt 1 in Blatt 11 umgetauft und "For ii = 1 To 10" durch "For ii = 2 To 11" ersetzt und habe das ähnliche Resultat. Jetzt spring er nach Blatt 2 (database 2) in die gleiche zweite Zelle (E1).
Kann es etwas damit zu tun haben, dass es sich um verbundene Zellen handelt? (A1:D1 = merged Cells; E1:H1 = merged Cells u.s.w. , d.h. es handelt sich immer um Vierergruppen)
Gruss aus Luxemburg
Ant
Anzeige
freie Zelle in Blättern mit verbundenen Zellen
20.10.2010 10:17:17
Erich
Hi Ant,
ja - das liegt an den verbundenen Zellen! IMHO sind die des Teufels.
Aber natürlich geht das auch. Hier zwei Varianten:

Option Explicit
Sub ErsteFreie4A()
Dim nn As Long, arrW, cc As Long
For nn = 1 To 10
With Sheets("database " & nn)
arrW = .Rows(1).Value
For cc = 1 To .Columns.Count Step 4
If IsEmpty(arrW(1, cc)) Then
.Activate
.Rows(1).Cells(cc).Select
Exit For
End If
Next cc
If cc 
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
P.S.:
Zu den Bezeichnungen:
Mit "Tabelöleneblätter" meinte ich "Tabellenblätter" - aber du hast das ja auch so verstanden... ;-))
Anzeige
Super, jetzt klappt es
20.10.2010 11:00:04
Deister
Danke Erich,
Dachte schon "Tabelöleneblätter" wäre ein Niederrheinisches Platt ;-)
Gruss aus Luxemburg
Ant
Brauche doch noch eine kleine Hilfe
20.10.2010 15:56:03
Deister
Hallo Erich,
Ich habe den Code noch ein wenig ausgebaut und sitze wieder auf dem Schlauch.
Bei den Blättern "database 1 bis 10" handelt es sich um versteckte Blätter in welchen ich 3 verschiedene Daten pflegen muss. Die erste lehre Zelle bekomme ich gepflegt, die zweite R[-1]C[+1] und anschliessend die dritte R[-1]C[0], bekomme ich nicht hin.
Mein problem liegt bei
Range("R[-1]C[+1]") = Wert2
respektif bei
Range("R[-1]C[0]") = Wert3
Anbei der ganze Code, so wie er bis zur Fehlermeldung läuft:
Option Explicit
Sub ErsteFreie4B()
If Range("E6")  1 Then
MsgBox ("Sie haben keine Berechtigung um diese Daten zu pflegen." & Chr$(10) _
& "Vous n'avez pas d'autorisation pour soigner ces données.")
Exit Sub
Else
Dim nn As Long, rngFrei As Range
For nn = 1 To 10
With Sheets("database " & nn)
Set rngFrei = ErsteFreie4Fkt(.Rows(1))
If Not rngFrei Is Nothing Then
.Activate
rngFrei.Select
Exit For
End If
End With
Next nn
End If
Dim Wert1$
Wert1 = InputBox("Bitte geben Sie den Namen des neuen Mitarbeiters ein!" & Chr$(10) _
& "Veuillez entrer le nom du nouveau collaborateur!", "Personaldaten / Données du personnel" _
)
ActiveCell.Value = Wert1
Dim Wert2$
Wert2 = InputBox("Bitte geben Sie die Personalnummer ein!" & Chr$(10) _
& "Veuillez entrer son numéro du personnel!", "Personaldaten / Données du personnel")
Range("R[-1]C[+1]") = Wert2
Dim Wert3$
Wert3 = InputBox("Bitte geben Sie den Geburtstag ein!" & Chr$(10) _
& "Bitte / als Trennung benutzen" & Chr$(10) _
& "Tag/Monat/Jahr" & Chr$(10) _
& "" & Chr$(10) _
& "Veuillez entrer la date de naissance!" & Chr$(10) _
& "Utilisez  /  comme séparateur" & Chr$(10) _
& "Jour/Mois/Année", "Personaldaten / Données du personnel")
Range("R[-1]C[0]") = Wert3
End Sub
Function ErsteFreie4Fkt(rngR As Range) As Range
Dim arrW, cc As Long
arrW = rngR.Value
For cc = 1 To rngR.Columns.Count Step 4
If IsEmpty(arrW(1, cc)) Then
Set ErsteFreie4Fkt = rngR.Cells(cc)
Exit For
End If
Next cc
End Function

Anzeige
Zusatzinfo: Brauche doch noch eine kleine Hilfe
20.10.2010 17:27:14
Deister
Hallo Erich und an alle anderen Excelspezialisten,
Ich habe den Code noch ein wenig ausgebaut und sitze wieder auf dem Schlauch.
Bei den Blättern "database 1 bis 10" handelt es sich um versteckte Blätter in welchen ich 3 verschiedene Daten pflegen muss. Ich möchte dies an Hand von Inputboxen bewältigen. Die erste lehre Zelle bekomme ich gepflegt, die zweite R[-1]C[+1] und anschliessend die dritte R[-1]C[0], bekomme ich nicht hin.
Mein problem liegt bei
Range("R[-1]C[+1]") = Wert2
respektif bei
Range("R[-1]C[0]") = Wert3
Anbei der ganze Code, so wie er bis zur Fehlermeldung läuft:
Option Explicit
Sub ErsteFreie4B()
If Range("E6")  1 Then
MsgBox ("Sie haben keine Berechtigung um diese Daten zu pflegen." & Chr$(10) _
& "Vous n'avez pas d'autorisation pour soigner ces données.")
Exit Sub
Else
Dim nn As Long, rngFrei As Range
For nn = 1 To 10
With Sheets("database " & nn)
Set rngFrei = ErsteFreie4Fkt(.Rows(1))
If Not rngFrei Is Nothing Then
.Activate
rngFrei.Select
Exit For
End If
End With
Next nn
End If
Dim Wert1$
Wert1 = InputBox("Bitte geben Sie den Namen des neuen Mitarbeiters ein!" & Chr$(10) _
& "Veuillez entrer le nom du nouveau collaborateur!", "Personaldaten / Données du personnel" _
_
)
ActiveCell.Value = Wert1
Dim Wert2$
Wert2 = InputBox("Bitte geben Sie die Personalnummer ein!" & Chr$(10) _
& "Veuillez entrer son numéro du personnel!", "Personaldaten / Données du personnel")
Range("R[-1]C[+1]") = Wert2
Dim Wert3$
Wert3 = InputBox("Bitte geben Sie den Geburtstag ein!" & Chr$(10) _
& "Bitte / als Trennung benutzen" & Chr$(10) _
& "Tag/Monat/Jahr" & Chr$(10) _
& "" & Chr$(10) _
& "Veuillez entrer la date de naissance!" & Chr$(10) _
& "Utilisez  /  comme séparateur" & Chr$(10) _
& "Jour/Mois/Année", "Personaldaten / Données du personnel")
Range("R[-1]C[0]") = Wert3
End Sub

Function ErsteFreie4Fkt(rngR As Range) As Range
Dim arrW, cc As Long
arrW = rngR.Value
For cc = 1 To rngR.Columns.Count Step 4
If IsEmpty(arrW(1, cc)) Then
Set ErsteFreie4Fkt = rngR.Cells(cc)
Exit For
End If
Next cc
End Function

Anzeige
Rückfrage
20.10.2010 19:45:40
Erich
Hi Ant,
das verstehe ich noch nicht. Bisher spielte sich alles in Zeile 1 ab.
Wenn z. B. die Zelle I1 in Blatt "database 2" die gefundene freie Zelle ist,
wohin genau sollen dann Wert2 und Wert3 geschrieben werden?
Range("R[-1]C[+1]") = Wert2 würde bedeuten, dass Wert 2 in Zeile 0 (gips nich!) und Spalte J geschrieben werden sollte.
Da du aber mit Vierergruppen verbundener Zellen (vom Teufel!) hantierst, meinst du vielleicht nicht Spalte J,
sondern Spalte N?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Rückfrage
21.10.2010 08:58:42
Deister
Hallo Erich,
Die erste leere Zelle in Zeile 1 zu finden war eigentlich nur der Teil von meinem Projekt wo ich zuerst nicht weiter kam. Den Rest will ich natürlich selbst machen, da ich meine kleinen grauen Zellen ja auch noch ein wenig beanspruchen muss ;-)
Du hast Recht, wenn die erste freie Zelle in Reihe 1 gefunden wurde, dann ergibt R[-1] keinen Sinn. Es sollte R[+1] sein.
Ich bin mir dessen Bewust, dass das mit den Vierergruppen, sowie eine solche Datenbank in Excel nicht die feinste Lösung ist, doch ich habe diese Exceldatei mit +/- 90000 Daten übernommen und will sie jetzt bestmöglichst für andere Benutzer vereinfachen und absichern. (du schreibst "vom Teufel", meines Erachtens ist das Statement noch zu harmlos)
Die in Vierergruppen verbundene Zellen gibt es nur in Zeile 1. In den restlichen Zeilen gibt es keine verbundene Zellen. D.h. wenn die Zelle I1 in Blatt "database 2" die gefundene freie Zelle ist, dann soll Wert2 in Zelle J2 eingetragen werden und Wert3 in Zelle J3.
MfG
Ant
Anzeige
neue Version
21.10.2010 09:52:29
Erich
Hi Ant,
ja, so kann ich das nachvollziehen.
Noch eine Frage: Wie ist das Zahlformat der Zellen, in die das Geburtsdatum geschrieben wird (im Beispiel die Zelle J3) ?
Wenn die Zellen Format Standard oder Datum haben, wird bei Eingabe von 10/11/12 in das Textfeld
nicht etwa 10/11/12 oder 10.11.2012 in die Zelle geschrieben, sondern das Datum 11.10.2012.
Tag und Monat werden also vertauscht. Das ist so sicher nicht gewollt.
Wenn Die Zelle Format @ (Text) hat, wird 10/11/12 als Text in die Zelle geschrieben. Willst du das?
Warum eigentlich sollen die Benutzer das Datum mit Schrägstrichen eingeben? Das macht nur Ärger und ist unüblich.
Hier das neue Makro (die Fkt ist unverändert):

Option Explicit
Sub ErsteFreie4C()
Dim nn As Long, rngFrei As Range
Dim Wert1 As String
If Range("E6")  1 Then
MsgBox ("Sie haben keine Berechtigung um diese Daten zu pflegen." & Chr$(10) _
& "Vous n'avez pas d'autorisation pour soigner ces données.")
Else
For nn = 1 To 10
With Sheets("database " & nn)
Set rngFrei = ErsteFreie4Fkt(.Rows(1))
If Not rngFrei Is Nothing Then
.Activate
rngFrei.Select
Exit For
End If
End With
Next nn
Wert1 = InputBox("Bitte geben Sie den Namen des neuen Mitarbeiters ein!" & Chr$(10) _
& "Veuillez entrer le nom du nouveau collaborateur!", _
"Personaldaten / Données du personnel")
rngFrei = Wert1
Wert1 = InputBox("Bitte geben Sie die Personalnummer ein!" & Chr$(10) _
& "Veuillez entrer son numéro du personnel!", "Personaldaten / Données du personnel")
rngFrei.Offset(1, 1) = Wert1
Wert1 = InputBox("Bitte geben Sie den Geburtstag ein!" & Chr$(10) _
& "Bitte / als Trennung benutzen" & Chr$(10) _
& "Tag/Monat/Jahr" & Chr$(10) _
& "" & Chr$(10) _
& "Veuillez entrer la date de naissance!" & Chr$(10) _
& "Utilisez  /  comme séparateur" & Chr$(10) _
& "Jour/Mois/Année", "Personaldaten / Données du personnel")
rngFrei.Offset(2, 1) = Wert1
End If
End Sub
Function ErsteFreie4Fkt(rngR As Range) As Range
Dim arrW, cc As Long
arrW = rngR.Value
For cc = 1 To rngR.Columns.Count Step 4
If IsEmpty(arrW(1, cc)) Then
Set ErsteFreie4Fkt = rngR.Cells(cc)
Exit For
End If
Next cc
End Function
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige