Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1092to1096
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
Zeilen und Inhalte mittels Button verschieben
Lemmi
Hallo zusammen,
ich möchte Datenzeilen um jeweils eine Zeile nach unten oder nach oben verschieben!
Wenn ich nun eine Zeile bzw. eine Zelle markiert oder aktiviert ist und ein Butten Drücke (Pfeil nach oben) so sollen die Zeileninhalte um 1 Zeile nach oben verschoben werden!
Die Inhalte der darüber liegenden Zeile sollen dann um eben eine Zeile nach unten verschoben werden! Die Zeileninhalte sind damit vertausch worden!
Dies soll ohne zusätzlichen Abfragen durchgeführt werden!
Wird nun ein zweiter Butten (Pfeil nach unten)gedrückt so werden die Zelleninhalte ebenfalls getauscht!
Diesmal eben mit der darunterliegenden Zeile
Die Zeilen A und B beleiben von tauschen unberührt. Damit wird nur der Inahlt ab Spalte C bis ...getauscht!
Sollen mehrere Zeilen / Zellen markiert sein so werden alle markierten Zeilen im Block um 1 Zeile verschoben (nach unten oder nach oben). Auch hier sollen die darunter oder die darüber liegenden Zeilen nach unten oder noch oben wandern!
Ist dies Funktion realisierbar?
Und wie würde Sie aussehen?
Gruß
Lemmi
AW: Zeilen und Inhalte mittels Button verschieben
11.08.2009 23:13:04
Daniel
Hi
ist machbar, geht so:
Sub nach_oben()
With Intersect(Selection.EntireRow, Range("C:IV"))
.Cut
.Cells(1, 1).Offset(-1, 0).Insert shift:=xlDown
End With
End Sub

Sub nach_unten()
With Intersect(Selection.EntireRow, Range("C:IV"))
.Cut
.Cells(1, 1).Offset(.Rows.Count + 1, 0).Insert shift:=xlDown
End With
End Sub

die Makros müsstest du den entspechenden Makros zuweisen, verschoben werden die markierten bereiche.
allerdings müssen die Zellbereiche zusammenängend sein, dh du kannst zwar die Zeilen 6,7,8,9,10 auf einmal verschieben, aber nicht die Zeilen 6, 8 und 10.
gruß, Daniel
Anzeige
AW: Zeilen und Inhalte mittels Button verschieben
11.08.2009 23:34:06
Lemmi
Hallo Daniel,
das sieht gut aus!
Ist es noch möglich das die Markierung mit wandert?
Wenn die Zeile um mehr als um eine Zeile verschoben werden soll, so muss ich immer wieder die zu verschiebende Zelle (Zeile) neu markieren!
Gruß
Lemmi
AW: Zeilen und Inhalte mittels Button verschieben
11.08.2009 23:41:32
Daniel
Hi
du musst diese Zeile noch am Ende einbauen:
Selection.Offset(x, 0).Select
je nach dem, obs nach oben oder nach unten geht, musst du für x -1 oder 1 einsetzen.
Gruß, Daniel
AW: Zeilen und Inhalte mittels Button verschieben
12.08.2009 17:52:24
Lemmi
Hallo Daniel,
das klappt soweit! Alles bestens!
Das zuweisen zu jeweils einem Button klappt, jedoch weis ich nicht wie der Code auszusehen hat wenn ich Ihm einem SpinButton zuweise?
Kannst Du noch einmal aushelfen!
Gruß
Lemmi
Anzeige
AW: Zeilen und Inhalte mittels Button verschieben
12.08.2009 22:28:17
Daniel
Hi
spinnbutton einfügen, mit rechter maustaste draufgehen, und "Code anzeigen clicken"
dann im VBA-Editior in der oberen rechten combobox das Ereignis "SpinUP" bzw "SpinDown" auswählen und den Makrocode dann in die neu entstandenen Makros einfügen.
Gruß, Daniel
AW: Zeilen und Inhalte mittels Button verschieben
12.08.2009 22:28:41
Daniel
Hi
spinnbutton einfügen, mit rechter maustaste draufgehen, und "Code anzeigen clicken"
dann im VBA-Editior in der oberen rechten combobox das Ereignis "SpinUP" bzw "SpinDown" auswählen und den Makrocode dann in die neu entstandenen Makros einfügen.
Gruß, Daniel
AW: Zeilen und Inhalte mittels Button verschieben
11.08.2009 23:22:24
Josef
Hallo Lemmi,
kopiere die Codeteile in die entsprechenden Module, Datei speichern, schliessen und wieder öffnen.
Mit "Alt+Pfeil auf" bzw. "Alt+Pfeil ab", wird der Code ausgeführt.
' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Workbook_Activate()
  Application.OnKey "%{UP}", "moveUP"
  Application.OnKey "%{DOWN}", "moveDOWN"
End Sub

Private Sub Workbook_Deactivate()
  Application.OnKey "%{UP}"
  Application.OnKey "%{DOWN}"
End Sub

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub moveSelection(Optional Direction As String = "up")
  Dim rng As Range
  Dim varMove As Variant, varOld As Variant
  Dim lngFirst As Long, lngLast As Long, lngOld As Long
  
  Set rng = Selection
  lngFirst = rng.Cells(1, 1).Row
  lngLast = lngFirst + rng.Rows.Count - 1
  
  If lngFirst = 1 And LCase(Direction) = "up" Then Exit Sub
  If lngLast = Rows.Count And LCase(Direction) = "down" Then Exit Sub
  
  If LCase(Direction) = "up" Then
    varOld = Range(Cells(lngFirst - 1, 3), Cells(lngFirst - 1, Columns.Count))
    varMove = Range(Cells(lngFirst, 3), Cells(lngLast, Columns.Count))
    Range(Cells(lngFirst, 3), Cells(lngLast, Columns.Count)).Offset(-1, 0) = varMove
    Range(Cells(lngLast, 3), Cells(lngLast, Columns.Count)) = varOld
    rng.Offset(-1, 0).Select
  ElseIf LCase(Direction) = "down" Then
    varOld = Range(Cells(lngLast + 1, 3), Cells(lngLast + 1, Columns.Count))
    varMove = Range(Cells(lngFirst, 3), Cells(lngLast, Columns.Count))
    Range(Cells(lngFirst, 3), Cells(lngLast, Columns.Count)).Offset(1, 0) = varMove
    Range(Cells(lngFirst, 3), Cells(lngFirst, Columns.Count)) = varOld
    rng.Offset(1, 0).Select
  End If
  
  Set rng = Nothing
End Sub

Sub moveUP()
  moveSelection
End Sub

Sub moveDOWN()
  moveSelection "down"
End Sub

Gruß Sepp

Anzeige
AW: Zeilen und Inhalte mittels Button verschieben
11.08.2009 23:51:25
Lemmi
Hallo Sepp,
leider nimmt Dein Code nicht die Formatierungen und die Zellberechnungen mit (Diese werden in feste Wert umgewandelt!
Könntest Du das noch anpassen?
Gruß
Lemmi
AW: Zeilen und Inhalte mittels Button verschieben
12.08.2009 23:12:23
Josef
Hallo Lemmi,
erstens hattest du geschrieben
".... so sollen die Zeileninhalte um 1 Zeile nach oben verschoben werden!"
und zweitesns geht's dann nicht so einfach, aber bitte.
' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit


Private Sub Workbook_Activate()
  Application.OnKey "%{UP}", "moveUP"
  Application.OnKey "%{DOWN}", "moveDOWN"
End Sub

Private Sub Workbook_Deactivate()
  Application.OnKey "%{UP}"
  Application.OnKey "%{DOWN}"
End Sub

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub moveSelection(Optional Direction As String = "up")
  Dim rng As Range, objTarget As Worksheet, objSh As Worksheet
  Dim rngMove As Range
  Dim lngFirst As Long, lngLast As Long, lngMove As Long, lngOld As Long, lngNew As Long
  Dim intMove As Integer
  
  On Error GoTo ErrExit
  GMS
  
  Set rng = Selection
  Set objTarget = rng.Parent
  
  lngFirst = rng.Cells(1, 1).Row
  lngLast = lngFirst + rng.Rows.Count - 1
  
  
  With objTarget
    If LCase(Direction) = "up" Then
      If lngFirst = 1 Then GoTo ErrExit
      lngMove = lngFirst - 1
      lngOld = lngFirst - 1
      lngNew = lngLast
      intMove = -1
    Else
      If lngLast = Rows.Count Then GoTo ErrExit
      lngMove = lngFirst + 1
      lngOld = lngLast + 1
      lngNew = lngFirst
      intMove = 1
    End If
    
    Set objSh = Worksheets.Add
    .Range(.Cells(lngOld, 3), .Cells(lngOld, Columns.Count)).Copy objSh.Cells(1, 3)
    Set rngMove = .Range(.Cells(lngFirst, 3), .Cells(lngLast, Columns.Count))
    rngMove.Copy .Cells(lngMove, 3)
    objSh.Range(objSh.Cells(1, 3), objSh.Cells(1, Columns.Count)).Copy .Cells(lngNew, 3)
    objSh.Delete
    rng.Offset(intMove, 0).Select
  End With
  
  
  ErrExit:
  GMS True
  Set objSh = Nothing
  Set rng = Nothing
End Sub

Sub moveUP()
  moveSelection
End Sub

Sub moveDOWN()
  moveSelection "down"
End Sub

Public Sub GMS(Optional ByVal Modus As Boolean = False)
  
  Static lngCalc As Long
  
  With Application
    .ScreenUpdating = Modus
    .EnableEvents = Modus
    .DisplayAlerts = Modus
    .EnableCancelKey = IIf(Modus, 1, 0)
    If Not Modus Then lngCalc = .Calculation
    If Modus And lngCalc = 0 Then lngCalc = -4105
    .Calculation = IIf(Modus, lngCalc, -4135)
    .Cursor = IIf(Modus, -4143, 2)
    
  End With
  
End Sub

Gruß Sepp

Anzeige
AW: Zeilen und Inhalte mittels Button verschieben
13.08.2009 22:30:37
Lemmi
Hallo Sepp,
alles bestens, vielen Dank für Deine Lösung!
Gruß
Lemmi

144 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige