Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
944to948
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
944to948
944to948
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
erste leere ZELLE in Bereich (flexibel)
30.01.2008 17:17:00
Dirk
Hallo an alle EXCEL-Spezialisten,
habe mal wieder ein VBA-Problem, das ich nicht gelöst bekomme u. suche ein Makro für den CommandButton "Ziel-2 / Bereich1" aus der UF (s. Blatt 'Quelle'):
Ich habe im Blatt 'Ziel-2' in A4 den Text "Beginn1" u. in A7 "Ende1" - diese sollen sozusagen als Beginn- u. Endemarken für den Code dienen.
Zwischen diesen beiden Marken soll nun das Makro folgendes bewerkstelligen:
1. Suche die erste leere ZELLE in diesem Bereich (also in diesem Fall A4:A7; gefunden wird A5).
Ist die darunterliegende Zelle (also hier A6) ebenfalls leer, dann: Markiere die ZELLE A5.
Ist die darunterliegende Zelle (also hier A6) nicht leer, dann: Markiere diese ZELLE (also A6).
2. Markiere die gesamte ZEILE u. füge eine neue Zeile ein.
3. Markiere nun die erste leere ZELLE in dem neuen Bereich (nun A4:A8; gefunden wird A5).
Um das Problem besser zu veranschaulichen, habe ich eine Beispielmappe vorbereitet:
https://www.herber.de/bbs/user/49525.xls
Ich freue mich auf eure Ideen u. Lösungsvorschläge !
MfG Dirk N.
P.S.: Hier noch eine andere Beschreibung , die wohl aber nicht zum gewünschten Ergebnis führen wird - es wird IMMER eine neue Zeile eingefügt:
1. Suche die letzte leere ZELLE in diesem Bereich (also in diesem Fall A4:A7; gefunden wird A6).
2. Markiere die gesamte ZEILE u. füge eine neue Zeile ein.
3. Markiere nun die erste leere ZELLE in dem neuen Bereich (nun A4:A8; gefunden wird A5).
SONDERFALL: Beim 1. Makrostart sind ja A5 u. A6 noch leer (also letzte UND erste leere ZELLE in dem Bereich zwischen den Beginn- u. Endemarken sind beide leer).
NUN soll nur die erste leere ZELLE markiert werden.

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: erste leere ZELLE in Bereich (flexibel)
31.01.2008 20:36:03
fcs
Hallo Dirk,
hier mein Vorschlag für den Button-Code.
Gruß
Franz

Private Sub CommandButton4_Click()  'Ziel-2 / Bereich1
Dim wks As Worksheet
Dim rngBeginn As Range, rngEnde As Range, rngLeer As Range
Dim varBeginn As Variant, varEnde As Variant
Dim lZaehler As Long
varBeginn = "Beginn1"
varEnde = "Ende1"
Set wks = Worksheets("Ziel-2")
With wks
.Activate
'Beginn des Bereichs finden
Set rngBeginn = .Columns(1).Find(what:=varBeginn, LookIn:=xlValues, lookat:=xlWhole)
If rngBeginn Is Nothing Then
MsgBox varBeginn & " in Spalte A nicht gefunden!"
Exit Sub
End If
'Ende des Bereichs finden
Set rngEnde = .Columns(1).Find(what:=varEnde, LookIn:=xlValues, lookat:=xlWhole)
If rngEnde Is Nothing Then
MsgBox varEnde & " in Spalte A nicht gefunden!"
Exit Sub
End If
'1. leere Zelle im Bereich finden
Do
lZaehler = lZaehler + 1
Set rngLeer = rngBeginn.Offset(lZaehler, 0)
Loop Until rngLeer.Value = rngEnde.Value Or IsEmpty(rngLeer)
If IsEmpty(rngLeer) Then
If IsEmpty(rngLeer.Offset(1, 0)) Then
If rngEnde.Row - rngBeginn.Row = 3 Then
'2 leere Zeilen zwischen Beginn und Ende zu Beginn
rngLeer.Select
Else
rngLeer.EntireRow.Insert shift:=xlShiftDown
rngLeer.Offset(-1, 0).Select
End If
Else
rngLeer.Offset(1, 0).EntireRow.Insert shift:=xlShiftDown
rngLeer.Select
End If
Else
MsgBox ("Achtung, keine freie Zeile im Bereich " & .Range(rngBeginn.Offset(1, 0), _
rngEnde.Offset(-1, 0)).Address & " vorhanden." & vbCr & _
"Es kann nicht eingefügt werden !!")
End If
End With
Set wks = Nothing: Set rngBeginn = Nothing: Set rngEnde = Nothing: Set rngLeer = Nothing
Unload Me
End Sub


Anzeige
AW: erste leere ZELLE in Bereich (flexibel)
31.01.2008 21:42:00
Dirk
Hallo Franz,
vielen Dank für deinen Vorschlag.
Deine Idee, auch das Vorhandensein der Beginn- u. Endemarken zu testen, ist prima.
Auch beim ersten Kopieren funktioniert der Code einwandfrei.
Doch schon das 2. Kopieren führt zu kuriosen Ergebnissen u. der Bereich wird "zerschossen".
Hattest du soweit schonmal getestet ?
Zwar wird eine neue ZEILE eingefügt (allerdings an der falschen Stelle), aber auch gleich der Inhalt aus der Zwischenablage - also die eigentlich zu kopierenden Werte.
Außerdem sollte die letzte freie Zeile in dem Bereich immer frei bleiben - so bleibt bei dem Zeileneinfügen auch die Formatierung (hier der dicke Rahmen) erhalten. Daher auch der Probeeintrag in der entsprechenden Zelle der Spalte B.
Doch wie ich gerade lese, habe ich wohl die Ausgangsproblematik schlecht (ja fast falsch) beschrieben - bitte entschuldige !
Ich hoffe, ich habe das Ziel nun besser beschrieben und du hast noch Zeit u. Lust, dir das Ganze nochmal anzuschauen...
MfG Dirk N.

Anzeige
AW: erste leere ZELLE in Bereich (flexibel)
31.01.2008 22:43:10
Dirk
Hallo Franz,
ich habe mal in deinem Code gebastelt u. folgendes geändert (im unteren Drittel): '***

If IsEmpty(rngLeer) Then
If IsEmpty(rngLeer.Offset(1, 0)) Then
If rngEnde.Row - rngBeginn.Row > 3 Then  '***
'2 leere Zeilen zwischen Beginn und Ende zu Beginn
rngLeer.Select
Else
rngLeer.EntireRow.Insert shift:=xlShiftDown
rngLeer.Offset(-1, 0).Select
End If
Else
rngLeer.Offset(0, 0).EntireRow.Insert shift:=xlShiftDown  '***
rngLeer.Select
End If


Zwar weiss ich nicht, warum es nun besser funktioniert - ist wohl wie in dem Sprichwort mit dem blinden Huhn... ;-)
So kann die letzte MsgBox wegfallen - oder ?
Nun wird zwar ggf. an der gewünschten Stelle eine neue ZEILE eingefügt, aber ich habe noch das Problem mit der Zwischenablage...
Die neue ZEILE wird automatisch mit dem Inhalt der Zwischenablage komplett ausgefüllt.
Gewünscht ist aber NUR, das nach dem Einfügen der neuen ZEILE die "neue" erste freie ZELLE zwischen den Marken selektiert wird.

Hast du dazu noch eine Idee ?
MfG Dirk N.

Anzeige
AW: erste leere ZELLE in Bereich (flexibel)
01.02.2008 21:23:46
fcs
Hallo Dirk,
damit das Übertragen der im Blatt Quelle markierten Zellen in das Zielblatt funktioniert solltets du den COde an verschiedenen Stellen anpassen. Im Blatt Quelle darfs du die Zellen dann nur markieren, aber nicht Kopieren wählen. Für den Commandbutton im Blatt Quelle solltest du auch die Eigenschaft "TakeFocusOnClick" auf False einstellen.
Gruß
Franz

Im Modul2 zusätzliche Variable deklarieren:
Option Explicit
Public PrevSheet As Worksheet
Public Auswahl As Range 'Selektierte Zellen im Blatt Quelle
Sub JumpToPrevSheet()
If Not PrevSheet Is Nothing Then PrevSheet.Activate
End Sub
Code für Button im Blatt Quelle:
Private Sub CommandButton1_Click()
Set Auswahl = Selection
UserForm1.Show
End Sub
Code für Commandbutton2 im Blatt Ziel-2:
Private Sub CommandButton2_Click()  'Werte einfügen
If Not Auswahl Is Nothing Then
Auswahl.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Set Auswahl = Nothing
Else
MsgBox "Es wurden keine zu kopierenden Werte ausgewählt!"
End If
End Sub


Anzeige
AW: erste leere ZELLE in Bereich (flexibel)
02.02.2008 04:49:00
Dirk
Hallo Franz,
mit all deinen Tipps bist du weit über das Ziel hinausgeschossen !!!
Dein letzter Rat hat nun alles perfektioniert.
Ich darf dir gar nicht erzählen, welche Umwege ich schon gehen wollte (Zwischenspeichern der Zwischenablage - was an sich schon lustig klingt; mehr CommandButtons etc.). Dazu habe ich Stunden beim Stöbern im Archiv verbracht u. nix passendes gefunden - u. DU schüttelst es so einfach aus dem Ärmel... S U P E R !
Die Genialität manchen Vorschlags hat sich mir erst beim ausführlichen Testen erschlossen.
Du hast ja wirklich an alle Eventualitäten (bzw. mögliche Eingabefehler) gedacht - also weit mehr, als ich im Vorfeld erahnen konnte...
Dürfte ich ein Voting für die beste Hilfestellung abgeben, so wärst du für Januar 2008 mein Favorit !!!
Allerdings sollte dieses Voting nicht den Anteil von Sepp, HaJo, Daniel u.v.a. schmälern, deren Tipps sich ebenfalls in der nun "zunächst" fertigen Beispieldatei widerspiegeln (ein sehr nützlicher Beitrag auch für das Archiv).
https://www.herber.de/bbs/user/49590.xls
Ich danke Euch allen !
MfG Dirk N.
P.S.: "Offen" lasse ich die Frage nur deshalb, damit auch andere Tippgeber evtl. noch mein Dankeschön lesen... ;-)
Ihr seid die Stützpfeiler dieses besten EXCEL-Forums !

Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige