bestimmte Zeilenlänge u. nur Zellwerte verschieben

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: bestimmte Zeilenlänge u. nur Zellwerte verschieben
von: Jörg
Geschrieben am: 08.04.2005 21:10:46
Hallo zusammen,
mit unten stehendem Script verschiebe ich einen vorher zu markierenden Bereich von einem Sheet ins andere.
So ist es zurzeit:
mit einem Doppelklick starte ich eine UserForm
dann markiere ich die zu kopierenden Zellen
anschließend wähle ich über eine ComboBox der Userform das Zielscheet aus
und starte unten stehendes Skript über einen Button ebendieser UserForm.
die komlette Zeile einschließlich aller Formatierungen wird verschoben
die UserForm schließt sich

So sollte es sein:
per Doppelklick rüfe ich die UserForm auf
der Doppelklick legt auch die zu kopierende Zeile fest
ich wähle nur noch das Zielsheet aus der ComboBox
und es werden aus den Zellen A-Z die Werte einschließlich Leerzellen verschoben, ohne in der Quell- oder Zielzeile die Formatierung, zulässige Eingaben etc. zu verändern
die UserForm schließt sich
------------------------------------------------------------------------------
UserForm1:
Option Explicit


Private Sub CommandButton1_Click()
Call verschieben(Sheets(Me.ComboBox1.Value))
Me.Hide
Unload Me
End Sub


Private Sub UserForm_Initialize()
Dim wb As Worksheet
For Each wb In Worksheets
  If wb.Name <> wshVon.Name Then
    Me.ComboBox1.AddItem wb.Name
  End If
Next wb
End Sub

-------------------------------------------------------------------------------

Modul1:
Option Explicit
Public wshVon As Worksheet

Sub verschieben(wshNach As Worksheet)
Application.EnableEvents = False
' zähle in Spalte 1 die Felder bis zum ersten leeren und setze den Wert gleich i
Dim i As Integer

i = 0
Do
i = i + 1
Loop Until IsEmpty(Sheets(UserForm1.ComboBox1.Value).Cells(i, 1))

' kopiere markierte Felder in Zeile i beginnend mit Spalte 1
Selection.Copy wshNach.Cells(i, 1)

' lösche markierte Felder
Selection.Delete shift:=xlUp

Application.EnableEvents = True
End Sub
Bild

Betrifft: AW: bestimmte Zeilenlänge u. nur Zellwerte verschi
von: Uwe Küstner
Geschrieben am: 11.04.2005 00:35:28
Hallo Jörg,
probier es mal so:

Sub verschieben(wshNach As Worksheet)
  Dim i As Long
  On Error GoTo Ende
  Application.EnableEvents = False
  
  With wshNach
    i = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
    .Range(.Cells(i, 1), .Cells(i, 26)).Value = _
      Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, 26)).Value
  End With
  
  Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, 26)).ClearContents
  
Ende:
  Application.EnableEvents = True
End Sub
Gruß Uwe
Bild

Betrifft: AW: bestimmte Zeilenlänge u. nur Zellwerte verschi
von: Jörg
Geschrieben am: 11.04.2005 21:41:16
Hallo Uwe, vielen Dank für deine Antwort.
Das Kopieren funktioniert schon einmal prächtig - genau wie ich es mir gewünscht habe. Es hilft mir, die Formatierung der einzelnen Sheets flexibler zu gestalten.
Nur das mit dem Löschen der kopierten Zeile aus dem alten Sheet, wodurch das Kopieren zum Verschieben würde, will so nicht gelingen.
Vielleicht hast du ja noch einen Tipp. Ansonsten ist es eine interessante Herausforderung für mich, um zu lernen. Ich bin schon mal am Tüfteln...
Gruß Jörg
Bild

Betrifft: AW: bestimmte Zeilenlänge u. nur Zellwerte verschi
von: Jörg
Geschrieben am: 11.04.2005 23:40:13
Hallo Uwe,
nun funktioniert es. Mein (Anfänger)-Fehler war, dass ich clearContents über eine geschützte Zelle mit Formel hinaus anwenden wollte. Nachdem ich die Zeilen davor und danach getrennt lösche, funktioniert es einwandfrei. Und wieder etwas hinzugelernt :-)
Nochmals herzlichen Dank
Gruß Jörg
 Bild

Beiträge aus den Excel-Beispielen zum Thema "bestimmte Zeilenlänge u. nur Zellwerte verschieben"