Supportnet / Forum / Tabellenkalkulation
Kopieren und löschen
Frage
Hallo zusammen,
Ich möchte folgendes gerne verwirklichen und weiß nicht ob das geht:
Ich makiere in einem Blatt einen bereich, nach dem makieren soll ein button auftauchen der Auslagern heißt, wenn ich den drücke soll der makierte bereich in eine anderes Blatt (Auslagerliste)kopiert werden und in dem aktuellen Blatt soll nur die Spalte B des makierten bereichs gelöscht werden...da die anderen schreibgeschützt sind
diesen vorgang führe ich mit verschiedenen Artikel durch,heißt das ich bei der nächsten Aktion daten In der Auslagerliste anhängen und nicht überschreiben möchte....
puuh...ich hoffe das habe ich einigermaßen verständlich formuliert...
geht sowas???
vielen Dank im Voraus
Gruß
Ralf
Antwort 1 von Beverly
Hi Ralf,
leider weiß ich nicht genau, wie deine Tabellen aufgebaut sind, aber du kannst es ja mit diesem Code versuchen. Schreibe ihn in das Codefenster der Tabelle, aus der du die Daten kopieren willst
Die Daten des markierten Bereichs werden in die Auslagerliste jeweils in die nächst leere Zeile in Spalte A kopiert und anschließend Spalte B in der Ausgangstabelle über die Länge des markierten Bereich gelöscht. Ausgelöst wird der Code mit einem Rechtklick, nachdem der zu kopierende Bereich markiert wurde. Das hat allerdings zur Folge, dass dir das Kontextmenü, welches sich normalerweise bei einem Rechtsklick öffnet, nicht mehr zur Verfügung steht.
Bis später,
Karin
leider weiß ich nicht genau, wie deine Tabellen aufgebaut sind, aber du kannst es ja mit diesem Code versuchen. Schreibe ihn in das Codefenster der Tabelle, aus der du die Daten kopieren willst
Option Explicit
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim strAnzeige As String
Dim raBereich As Range
Dim loLetzte As Long
Set raBereich = Selection
Cancel = True
strAnzeige = MsgBox("Daten auslagern?", vbYesNo)
If strAnzeige = vbNo Then
Exit Sub
Else
With Worksheets("Auslagerliste")
loLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
raBereich.Copy .Cells(loLetzte + 1, 1)
Range(Cells(raBereich(1), 2), Cells(raBereich.Cells.Count, 2)).Clear
End With
End If
Set raBereich = Nothing
End Sub
Die Daten des markierten Bereichs werden in die Auslagerliste jeweils in die nächst leere Zeile in Spalte A kopiert und anschließend Spalte B in der Ausgangstabelle über die Länge des markierten Bereich gelöscht. Ausgelöst wird der Code mit einem Rechtklick, nachdem der zu kopierende Bereich markiert wurde. Das hat allerdings zur Folge, dass dir das Kontextmenü, welches sich normalerweise bei einem Rechtsklick öffnet, nicht mehr zur Verfügung steht.
Bis später,
Karin
Antwort 2 von huli
Hallo Karin,
ersteinmal vielen Dank für Deine Antwort und hilfe.
das mit dem Kontextmenü ist kein problem das brauche ich an der stelle ja auch nicht
ich habe den code ausprobiert und bekomme folgende fehlermeldung:
Laufzeitfehler `13`:
Typen unverträglich
Range(Cells(raBereich(1), 2), Cells(raBereich.Cells.Count, 2)).Clear
kannst Du mir da nochmal helfen?
vielen Dank im voraus
Gruß
Ralf
ersteinmal vielen Dank für Deine Antwort und hilfe.
das mit dem Kontextmenü ist kein problem das brauche ich an der stelle ja auch nicht
ich habe den code ausprobiert und bekomme folgende fehlermeldung:
Laufzeitfehler `13`:
Typen unverträglich
Range(Cells(raBereich(1), 2), Cells(raBereich.Cells.Count, 2)).Clear
kannst Du mir da nochmal helfen?
vielen Dank im voraus
Gruß
Ralf
Antwort 3 von Beverly
Hi Ralf,
hier der geänderte Code
Bis später,
Karin
hier der geänderte Code
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim strAnzeige As String
Dim raBereich As Range
Dim loLetzte As Long
Set raBereich = Selection
Cancel = True
strAnzeige = MsgBox("Daten auslagern?", vbYesNo)
If strAnzeige = vbNo Then
Exit Sub
Else
With Worksheets("Auslagerliste")
loLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
raBereich.Copy .Cells(loLetzte + 1, 1)
End With
End If
Range(Cells(raBereich(1).Row, 2), Cells(raBereich.Rows.Count + raBereich(1).Row - 1, 2)).Clear
Set raBereich = Nothing
End Sub
Bis später,
Karin
Antwort 4 von Huli
Hallo Karin,
woow
funktioniert suuuuuper.........
vielen Dank
Gruß
Ralf
:-))))
woow
funktioniert suuuuuper.........
vielen Dank
Gruß
Ralf
:-))))

