Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA, nach kopieren-Quellbereich löschen

Forumthread: VBA, nach kopieren-Quellbereich löschen

VBA, nach kopieren-Quellbereich löschen
24.08.2020 13:46:29
Fred

Hallo Excel und VBA Profis,
Ich frage alle Arbeitsmappen im Ordner meiner "ausgehenden Datei" nach dem Sheet "Plan" ab,- wenn vorhanden, wird entsprechender Bereich kopiert.
Sub import()
Dim strDateiname As String
Dim wksZiel As Worksheet, wkbQuelle As Workbook, wksQuelle As Worksheet
Dim loLetzte1 As Long
Dim loLetzte2 As Long
Dim inLetzte As Integer
Dim i As Long
Worksheets("Import").Range("A6:K1000").ClearContents
Application.ScreenUpdating = True
strDateiname = Dir(ThisWorkbook.Path & "\*.xlsm")
Set wksZiel = ThisWorkbook.Worksheets("Import")
Do While strDateiname  ""
If strDateiname  ThisWorkbook.Name Then
Set wkbQuelle = Workbooks.Open(Filename:=ThisWorkbook.Path & "\" & strDateiname)
With wkbQuelle
For i = 1 To .Worksheets.Count
If .Worksheets(i).Name = "Plan" Then
Set wksQuelle = .Worksheets("Plan")
loLetzte1 = wksZiel.Cells(Rows.Count, 3).End(xlUp).Row
With wksQuelle
loLetzte2 = wksQuelle.Cells(Rows.Count, 2).End(xlUp).Row
inLetzte = .UsedRange.SpecialCells(xlCellTypeLastCell).Column
.Range(.Cells(3, 1), .Cells(loLetzte2, inLetzte)).Copy _
Destination:=wksZiel.Cells(loLetzte1 + 1, 2)
End With
End If
Next i
.Close True
End With
End If
strDateiname = Dir
Loop
Set wkbQuelle = Nothing: Set wksQuelle = Nothing: Set wksZiel = Nothing
Application.ScreenUpdating = True
End Sub

soweit alles prima.
Meine Frage;
Könnte ein Profi das Makro so ändern, dass wenn entsprechender Quellbereich kopiert und in Zielbereich eingefügt, die entsprechenden Daten im Quellbereich gelöscht werden?
Wenn leichter umzusetzen, dann könnten auch Pauschal die Zeilen 3 bis 34 gelöscht werden.
Mit freundlichen Gruss
Fred
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA, nach kopieren-Quellbereich löschen
24.08.2020 13:57:48
Werner
Hallo,
na du hast doch den Bereich, den du kopieren willst - den kannst du doch nach dem Kopieren dann einfach löschen oder leeren, je nachdem.
.Range(.Cells(3, 1), .Cells(loLetzte2, inLetzte)).Copy _
Destination:=wksZiel.Cells(loLetzte1 + 1, 2)
.Range(.Cells(3, 1), .Cells(loLetzte2, inLetzte)).Delete 'oder nur leeren dann .ClearContents
Gruß Werner
Anzeige
AW: VBA, nach kopieren-Quellbereich löschen
24.08.2020 14:13:09
Fred
Hallo Werner,
klappt prima,
.Range(.Cells(3, 1), .Cells(loLetzte2, inLetzte)).ClearContents
Vielen Dank für deine Mühe & Kompetenz!
Gruss
Fred
Gerne u. Danke für die Rückmeldung. o.w.T.
24.08.2020 15:27:50
Werner
;
Anzeige
Anzeige

Infobox / Tutorial

VBA: Quellbereich nach dem Kopieren löschen


Schritt-für-Schritt-Anleitung

Um den Quellbereich nach dem Kopieren in Excel VBA zu löschen, folge diesen Schritten:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  2. Füge das Makro hinzu: Erstelle ein neues Modul oder öffne ein bestehendes und füge den folgenden Code ein:

    Sub import()
    Dim strDateiname As String
    Dim wksZiel As Worksheet, wkbQuelle As Workbook, wksQuelle As Worksheet
    Dim loLetzte1 As Long
    Dim loLetzte2 As Long
    Dim inLetzte As Integer
    Dim i As Long
    Worksheets("Import").Range("A6:K1000").ClearContents
    Application.ScreenUpdating = True
    strDateiname = Dir(ThisWorkbook.Path & "\*.xlsm")
    Set wksZiel = ThisWorkbook.Worksheets("Import")
    Do While strDateiname <> ""
       If strDateiname <> ThisWorkbook.Name Then
           Set wkbQuelle = Workbooks.Open(Filename:=ThisWorkbook.Path & "\" & strDateiname)
           With wkbQuelle
               For i = 1 To .Worksheets.Count
                   If .Worksheets(i).Name = "Plan" Then
                       Set wksQuelle = .Worksheets("Plan")
                       loLetzte1 = wksZiel.Cells(Rows.Count, 3).End(xlUp).Row
                       With wksQuelle
                           loLetzte2 = wksQuelle.Cells(Rows.Count, 2).End(xlUp).Row
                           inLetzte = .UsedRange.SpecialCells(xlCellTypeLastCell).Column
                           .Range(.Cells(3, 1), .Cells(loLetzte2, inLetzte)).Copy _
                           Destination:=wksZiel.Cells(loLetzte1 + 1, 2)
                           .Range(.Cells(3, 1), .Cells(loLetzte2, inLetzte)).ClearContents ' Quellbereich löschen
                       End With
                   End If
               Next i
               .Close True
           End With
       End If
       strDateiname = Dir
    Loop
    Set wkbQuelle = Nothing: Set wksQuelle = Nothing: Set wksZiel = Nothing
    Application.ScreenUpdating = True
    End Sub
  3. Ändere die Zeile für das Löschen: Der Code .Range(.Cells(3, 1), .Cells(loLetzte2, inLetzte)).ClearContents sorgt dafür, dass der kopierte Bereich nach dem Kopieren geleert wird.

  4. Führe das Makro aus: Schließe den VBA-Editor und gehe zurück zu Excel. Führe das Makro aus, um die gewünschten Daten zu kopieren und den Quellbereich zu löschen.


Häufige Fehler und Lösungen

  • Fehler: "Subscript out of range"

    • Lösung: Überprüfe, ob der Arbeitsblattname "Plan" tatsächlich existiert. Ein Schreibfehler kann diesen Fehler verursachen.
  • Fehler: "Type mismatch"

    • Lösung: Stelle sicher, dass alle Variablen korrekt deklariert sind, insbesondere Long und Integer.
  • Problem: Quellbereich wird nicht gelöscht

    • Lösung: Vergewissere dich, dass die Zeile zum Löschen (ClearContents) korrekt implementiert ist, und dass du auf die richtige Range zugreifst.

Alternative Methoden

Wenn du den Quellbereich auf andere Weise löschen möchtest, kannst du auch die Delete-Methode verwenden:

.Range(.Cells(3, 1), .Cells(loLetzte2, inLetzte)).Delete

Diese Methode entfernt die Daten vollständig. Wenn du nur die Inhalte löschen möchtest, verwende ClearContents, wie im obigen Beispiel beschrieben.


Praktische Beispiele

Wenn du häufig mit eingebetteten Objekten in Excel arbeitest und diese löschen möchtest, kannst du die folgende Zeile einfügen, um alle eingebetteten Objekte zu löschen:

ActiveSheet.OLEObjects.Delete

Diese Zeile kann nach dem Kopieren und Löschen des Quellbereichs eingefügt werden.


Tipps für Profis

  • Nutze Fehlerbehandlung, um das Makro robuster zu machen. Verwende On Error Resume Next, um Fehler zu ignorieren, oder On Error GoTo, um spezifische Fehler zu behandeln.
  • Halte deine Excel-Umgebung sauber, indem du regelmäßig nicht mehr benötigte eingebettete Objekte entfernst.
  • Mache Sicherheitskopien deiner Arbeitsmappen, bevor du Makros ausführst, die Daten löschen.

FAQ: Häufige Fragen

1. Wie kann ich einen kopierten Link löschen? Um einen kopierten Link zu löschen, nutze die Funktion ClearContents auf der entsprechenden Zelle.

2. Kann ich das Makro anpassen, um nur bestimmte Zeilen zu löschen? Ja, du kannst die Range in der ClearContents-Methode anpassen, um nur die gewünschten Zeilen zu leeren. Zum Beispiel, um nur die Zeilen 3 bis 34 zu löschen, verwende:

.Range("3:34").ClearContents

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige