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

Forumthread: VBA Kopieren einfügen überschreiben

VBA Kopieren einfügen überschreiben
01.03.2022 09:15:06
Andreas
Guten Morgen zusammen,
hab einen Code, der Werte aus einer Datei, nenne die mal "Planung" kopiert und diese in eine zweite Datei überträgt "Übersicht".
In Übersichts-Datei, werden die Werte dann immer in die nächste freie Zeile kopiert.
Hier der Schnipsel, der das machen soll:

ThisWorkbook.Worksheets("Planung").Range("FL2:KT2").Copy
Workbooks("Übersicht.xlsm").Worksheets("Übersicht").Range("A99999").End(xlUp).Offset(1, 0).PasteSpecial _
Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Das funktioniert auch super. Hätte jetzt aber gerne, dass wenn der erste Wert -also der, der aus FL2 aus der Planungs-Datei kommt schon in der Übersichts-Datei enthalten ist,diese Zeile in der Übersichts-Datei überschrieben wird, anstatt eine neue Zeile anzulegen.
Danke vorab und Gruß Andreas
Da ich mich mit VBA leider sehr wenig auskenne, hier zur Sicherheit mal der Vollständige Code:

'unter Anbindung von Bibliothek "Microsoft Scripting Runtime":
'Extras, Verweise..., Hacken bei "Microsoft Scripting Runtime"
Dim FSO As New FileSystemObject
Dim DateiPfad As String
Const sPfadErledigt As String = "X:\Andreas\"
Const DateinamenMuster = " K xxx.xlsm"
Private Sub CommandButton1_Click()
Dim Datei As File
'1. Prüfen, dass der Pfad gültig ist
'2. Prüfen, ob Dateinumemr gültig ist
'3. Prüfen ob Datei bereit existiert
'4. Daten übertragen
'5. Datein Speichern
'1.
If Pfad_prüfen(sPfadErledigt) Is Nothing Then
MsgBox "Verzeichnis """ & sPfadErledigt & """ nichtvorhadne oder nicht gefunden.", vbExclamation
Exit Sub
End If
'2.
If Worksheets("Ausgang").Range("AK1").Value = "" Or Not IsNumeric(Worksheets("Planung").Range("AK1").Value) Then
MsgBox "Nummer """ & Worksheets("Planung").Range("AK1").Value & """ ist für diese Datei nicht gültig.", vbExclamation
Exit Sub
End If
'3
DateiPfad = sPfadErledigt & Replace(DateinamenMuster, "xxx", Worksheets("Planung").Range("AK1").Value)
Set Datei = Datei_prüfen(sPfadErledigt & Replace(DateinamenMuster, "xxx", Worksheets("Planung").Range("AK1").Value))
If Not Datei Is Nothing Then
If MsgBox("Datei """ & Datei.ShortPath & """ existiert bereits. " & vbCr & vbCr & "Überschreiben?", vbYesNo + vbQuestion)  vbYes Then
Exit Sub
End If
End If
'4.
ThisWorkbook.Worksheets("Planung").Range("FL2:KT2").Copy
Workbooks("Übersicht.xlsm").Worksheets("Übersicht").Range("A99999").End(xlUp).Offset(1, 0).PasteSpecial _
Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
'5.
ThisWorkbook.SaveAs DateiPfad, xlOpenXMLWorkbookMacroEnabled
'    ThisWorkbook.Close
End Sub
Function Pfad_prüfen(Pfad As String) As Folder
'gibt einen Folder-Objekt zurück, wenn Pfad vorhanden, sonst Nothing
On Error Resume Next
Set Pfad_prüfen = FSO.GetFolder(Pfad)
End Function
Function Datei_prüfen(Pfad As String) As File
'gibt einen File-Objekt zurück, wenn Pfad vorhanden, sonst Nothing
On Error Resume Next
Set Datei_prüfen = FSO.GetFile(Pfad)
End Function
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Kopieren einfügen überschreiben
01.03.2022 09:15:41
Andreas
Hab versehentlich 2 mal gepostet, sorry.
Wie kann ich das löschen?
Gruß Andreas
AW: VBA Kopieren einfügen überschreiben
01.03.2022 10:06:40
Yal
Hallo Andreas,
Ich habe zuerst gedacht, ich brauche deine Datei, aber es geht auch ohne:

'unter Anbindung von Bibliothek "Microsoft Scripting Runtime":
'Extras, Verweise..., Haken bei "Microsoft Scripting Runtime"
Dim FSO As New FileSystemObject
Dim DateiPfad As String
Const sPfadErledigt As String = "X:\Andreas\"
Const DateinamenMuster = " K xxx.xlsm"
Private Sub CommandButton1_Click()
Dim Datei As File
'1. Prüfen, dass der Pfad gültig ist
'2. Prüfen, ob Dateinummer gültig ist
'3. Prüfen ob Datei bereit existiert
'4. Daten übertragen
'5. Vorhandensein prüfen und ersetzen
'6. Datein Speichern
'1.
If Pfad_prüfen(sPfadErledigt) Is Nothing Then
MsgBox "Verzeichnis """ & sPfadErledigt & """ nicht vorhanden oder nicht gefunden.", vbExclamation
Exit Sub
End If
'2.
If Worksheets("Ausgang").Range("AK1").Value = "" Or Not IsNumeric(Worksheets("Planung").Range("AK1").Value) Then
MsgBox "Nummer """ & Worksheets("Planung").Range("AK1").Value & """ ist für diese Datei nicht gültig.", vbExclamation
Exit Sub
End If
'3
DateiPfad = sPfadErledigt & Replace(DateinamenMuster, "xxx", Worksheets("Planung").Range("AK1").Value)
Set Datei = Datei_prüfen(sPfadErledigt & Replace(DateinamenMuster, "xxx", Worksheets("Planung").Range("AK1").Value))
If Not Datei Is Nothing Then
If MsgBox("Datei """ & Datei.ShortPath & """ existiert bereits. " & vbCr & vbCr & "Überschreiben?", vbYesNo + vbQuestion)  vbYes Then
Exit Sub
End If
End If
'4.
ThisWorkbook.Worksheets("Planung").Range("FL2:KT2").Copy
With Workbooks("Übersicht.xlsm").Worksheets("Übersicht").Range("A99999").End(xlUp).Offset(1, 0)
.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
'5.
SuchenErsetzen .Range
End With
'6.
ThisWorkbook.SaveAs DateiPfad, xlOpenXMLWorkbookMacroEnabled
'    ThisWorkbook.Close
End Sub
Private Sub SuchenErsetzen(Quelle As Range)
Dim Erg As Range
Set Erg = Range(Quelle.EntireColumn.Range("A2"), Quelle.Offset(-1, 0)).Find(Quelle.Value)
If Not Erg Is Nothing Then
Quelle.EntireRow.Copy Erg.EntireRow
Quelle.EntireRow.Delete
End If
End Sub
Function Pfad_prüfen(Pfad As String) As Folder
'gibt einen Folder-Objekt zurück, wenn Pfad vorhanden, sonst Nothing
On Error Resume Next
Set Pfad_prüfen = FSO.GetFolder(Pfad)
End Function
Function Datei_prüfen(Pfad As String) As File
'gibt einen File-Objekt zurück, wenn Pfad vorhanden, sonst Nothing
On Error Resume Next
Set Datei_prüfen = FSO.GetFile(Pfad)
End Function
VG
Yal
(ich weiss inzwischen, dass "Haken" nicht mit "ck" geschrieben wird ;-)
Anzeige
AW: VBA Kopieren einfügen überschreiben
01.03.2022 13:07:05
Andreas
Hi Yal,
stimmt den Code habe ich ja von dir bekommen, Danke nochmal ;D
Also irgendwas mache ich falsch, oder ich hab blöd erklärt.
Wie ich das verstehe, will deine Ergänzung prüfen ob die Datei vorhanden ist und diese ersetzen.
Was ich aber ersetzen möchte, ist in der Datei Übersicht die Werte, die aus der Planung da rein kopiert werden.
ThisWorkbook.Worksheets("Planung").Range("FR2:KZ2").Copy
Workbooks("Übersicht.xlsm").Worksheets("Übersicht").Range("A99999").End(xlUp).Offset(1, 0).PasteSpecial _
Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Hier wird ja alles kopiert, was im Tabellenblatt Planung in FR2:KZ2 steht und in der zweiten Datei "Übersicht" dann in "A:EI" eingefügt (immer in die nächste freie Zeile).
(Das Modul "ÜbersichtÖffnen" gehört da auch noch dazu).
Wenn der Wert, der aus FL2 kopiert wird, in der Übersichtsdatei in der Spalte A schon irgendwo vorhanden ist, dann soll die ganze Zeile in der Übersichtsdatei mit den Werten aus FL2:KT2 ersetzt werden und nicht in eine neue Zeile geschrieben werden.
Kann irgendwie nur eine Datei verlinken? Daher hab ich das Tabellenblatt aus der Übersichtsdatei mal die die gleiche Mappe kopiert:
https://www.herber.de/bbs/user/151481.xlsm
So habe ich mir den Ablauf eigentlich vorgestellt:
1. Datei Planung wird geöffnet, Werte werden eingetragen / funktioniert
2. Bei einem Eintrag in Zelle "E3" im Tabellenblatt Planung (da findet nämlich auf jeden Fall eine Eingabe statt) wird die zweite Datei "Übersicht" geöffnet / funktioniert
3. Mit auslösen des Makros "(Tabelle6) Planung" werden die Werte aus den Zellen "FR2:KZ2" im Tabellenblatt Planung kopiert und in dem Tabellenblatt "Übersicht in
die nächste freie Zeile geschrieben. / funktioniert
4. In der Zelle "FR2" im Tabellenblatt Planung steht die Haupt-Auftragsnummer. Gibt es im Tabellenblatt "Übersicht" schon eine Zeile, in der in Spalte "A" schon diese Nummer vorhanden ist, sollen die Werte überschrieben werden, anstatt eine neue Zeile zu befüllen. / funktioniert nicht
Gruß Andreas
Anzeige
AW: VBA Kopieren einfügen überschreiben
01.03.2022 14:39:49
Yal
Hallo Andreas,
verstehe ich nicht, was ich nicht verstanden haben soll.
(wenn Du schon Aufzählung verwendest, wäre es toll, wenn Du dieselbe wie im Coding verwendest)
1,2,3,4 habe ich überhaupt nicht verändert. Nur dein 5 habe ich zu 6 gemacht, weil ich meinem 5 reingebracht habe.
In diesem 5 wird in der Zieltabelle (bei einer Kopie spricht man von Quelle und Ziel) geprüft, ob der Wert die aus "FL2" gekommen ist, aber jetzt in der erste freie Zelle in Spalte A (also jetzt nicht mehr frei, sondern vom, Wert aus FL2 belegt), nennen wir diese Zelle Ax, irgendwo in der Zieltabelle zwischen A2:A(x-1) schon vorhanden ist, wenn ja (nennen wir die Zelle Ay, dabei ist y zwischen 2 und x-1), dann wird die ganze Zeile von Ax über die ganze Zeile von Ay kopiert (überschreibend) und anschliessend die ganze Zeile von Ax gelöscht (nicht Inhalt gelöscht, sondern Zeile gelöscht).
Also wenn
D;1
E;2
F;3
vorhanden wäre, und es kommt dazu
E;5
F;6
R;7
dann ist das Endergebnis
D;1
E;5
F;3
F;6
R;7
Wenn Du aber meinst, "alle Werte aus den kommenden Daten müssen ggü das Vorhandenen geprüft und bei Gleichheit erstezen statt hizufügen", dann ist es zwar ganz anderes aber schon "a bissele" anders.
Ich gehe davon aus, dass ich auch richtig verstanden, dass es nur von Quelle zu Zilel eine Datenaustausch gibt und keine Rückkopplung. Dein Satz
"4. In der Zelle "FR2" im Tabellenblatt Planung steht die Haupt-Auftragsnummer. Gibt es im Tabellenblatt "Übersicht" schon eine Zeile, in der in Spalte "A" schon diese Nummer vorhanden ist, sollen die Werte überschrieben werden, anstatt eine neue Zeile zu befüllen."
ist für mich uneindeutig.
VG
Yal
Anzeige
AW: VBA Kopieren einfügen überschreiben
04.03.2022 15:52:31
Andreas
Hallo Yal,
Danke für deine Antwort und entschuldige bitte meine späte Rückmeldung, bin die letzten 2 Tage leider ausgefallen - jetzt wieder halbwegs Einsatzbereit.
Hab leider noch nicht so viel Erfahrung mit Programmierungen, entschuldige daher bitte, wenn meine Ausdrucksweise nicht immer ganz korrekt ist.
Hab das ganze mit deinem Code jetzt nochmal probiert, aber irgendetwas mache ich falsch?
Bekomme jetzt eine Fehlermeldung:
Laufzeitfehler 450:
Falsche Anzahl an Argumenten oder ungültige Zuweisung zu einer Eigenschaft
Gelb markiert wird das:
'5.
SuchenErsetzen .Range
Weißt du vielleicht woran das liegen könnte?
Gruß und Dank vorab
Andreas
Anzeige
AW: VBA Kopieren einfügen überschreiben
04.03.2022 15:56:04
Yal
oha, sorry, mein Fehler.
Andere

Private Sub SuchenErsetzen(Quelle As Range)
in

Private Sub SuchenErsetzen(ByVal Quelle As Range)
VG
Yal
AW: VBA Kopieren einfügen überschreiben
04.03.2022 16:41:49
Andreas
Danke für die schnelle Rückmeldung :)
Hab's ausgetauscht, der Fehler kommt leider immer noch. Was ich aber ziemlich merkwürdig finde ist, dass die Werte trotzdem in die Datei übertragen werden.
Er schreibt sie aber immer in eine neue Zeile anstatt sie zu ersetzen, auch wenn die Nummer bereits vorhanden ist.
Der Code sieht aktuell so aus:

'unter Anbindung von Bibliothek "Microsoft Scripting Runtime":
'Extras, Verweise..., Hacken bei "Microsoft Scripting Runtime"
Dim FSO As New FileSystemObject
Dim DateiPfad As String
Const sPfadErledigt As String = "X:\Produktion\Konfektion\Schneideabteilung\Schneidepläne\"
Const DateinamenMuster = " K xxx.xlsm"
Private Sub CommandButton1_Click()
Dim Datei As File
'1. Prüfen, dass der Pfad gültig ist
'2. Prüfen, ob Dateinummer gültig ist
'3. Prüfen ob Datei bereit existiert
'4. Daten übertragen
'5. Vorhandensein prüfen und ersetzen
'6. Datein Speichern
'1.
If Pfad_prüfen(sPfadErledigt) Is Nothing Then
MsgBox "Verzeichnis """ & sPfadErledigt & """ nicht vorhanden oder nicht gefunden.", vbExclamation
Exit Sub
End If
'2.
If Worksheets("Planung").Range("AN1").Value = "" Or Not IsNumeric(Worksheets("Planung").Range("AN1").Value) Then
MsgBox "Nummer """ & Worksheets("Planung").Range("AN1").Value & """ ist für diese Datei nicht gültig.", vbExclamation
Exit Sub
End If
'3
DateiPfad = sPfadErledigt & Replace(DateinamenMuster, "xxx", Worksheets("Planung").Range("AN1").Value)
Set Datei = Datei_prüfen(sPfadErledigt & Replace(DateinamenMuster, "xxx", Worksheets("Planung").Range("AN1").Value))
If Not Datei Is Nothing Then
If MsgBox("Datei """ & Datei.ShortPath & """ existiert bereits. " & vbCr & vbCr & "Überschreiben?", vbYesNo + vbQuestion)  vbYes Then
Exit Sub
End If
End If
'4.
ThisWorkbook.Worksheets("Planung").Range("FR2:KZ2").Copy
With Workbooks("Übersicht.xlsm").Worksheets("Übersicht").Range("A99999").End(xlUp).Offset(1, 0)
.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
'5.
SuchenErsetzen .Range
End With
'6.
ThisWorkbook.SaveAs DateiPfad, xlOpenXMLWorkbookMacroEnabled
'    ThisWorkbook.Close
End Sub
Private Sub SuchenErsetzen(ByVal Quelle As Range)
Dim Erg As Range
Set Erg = Range(Quelle.EntireColumn.Range("A2"), Quelle.Offset(-1, 0)).Find(Quelle.Value)
If Not Erg Is Nothing Then
Quelle.EntireRow.Copy Erg.EntireRow
Quelle.EntireRow.Delete
End If
End Sub
Function Pfad_prüfen(Pfad As String) As Folder
'gibt einen Folder-Objekt zurück, wenn Pfad vorhanden, sonst Nothing
On Error Resume Next
Set Pfad_prüfen = FSO.GetFolder(Pfad)
End Function
Function Datei_prüfen(Pfad As String) As File
'gibt einen File-Objekt zurück, wenn Pfad vorhanden, sonst Nothing
On Error Resume Next
Set Datei_prüfen = FSO.GetFile(Pfad)
End Function
Hast du noch eine Idee, woran das liegen könnte?
Danke vorab und schon mal ein schönes Wochenende
Gruß Andreas
Anzeige
AW: VBA Kopieren einfügen überschreiben
04.03.2022 23:04:34
Yal
Hallo Andreas,
Heilendsack! S'kâ ett war sei!
Ich habe doch 2 Dateien aufgebaut, um es vollständig zu testen.
Ich habe 2 Fehler gefunden:
_ SuchernErsetzen sollte nicht ".Range" übergeben werden, sondern ".Cells"

SuchenErsetzen .Cells
Es übergibt alle Zellen der gegebenen Range. In dem Fall gibt es immer nur eine.
_ In SuchenErsetzen macht die Beschränkung der Suchbereich Problem. Ich habe sie wie folgt umgesetzt (und diesmal vollständig getestet):

Set Erg = Quelle.Worksheet.Range("A2:A" & Quelle.Row - 1).Find(Quelle.Value)
Somit sollte den Skript jetzt fehlerfrei/vollständig laufen.
VG
Yal
Anzeige
AW: VBA Kopieren einfügen überschreiben
04.03.2022 23:31:05
Yal
Hallo Andreas,
ejtz komme ich drauf, dass es eigentlich absurd, etwas reinzukopieren, dann zu testen, ob es schon existiert, um es nochmal an eine andere Stelle zu pasten und was wir als erstes reinkopiert haben wieder zu löschen.
Neue Version: zuerst prüfen, ob vorhanden, dann an der richtige Stelle reinpasten.
Die separate Function "SuchenErsetzen" ist nicht mehr notwendig, dafür ist die Variable "Erg" in der Hauptprocedure.
Dazu auch einen wsPL-Variable, um zu vermeiden, dass man überall Thisworkbook.Worksheets("Planung") mitschleppen muss.

Private Sub CommandButton1_Click()
Dim Datei As File
Dim Erg As Range
Dim wsPL As Worksheet
Const cNrAdr = "AN1" 'Adresse der Zelle, wo der Planungsnummer zu lesen ist
'1. Prüfen, dass der Pfad gültig ist
'2. Prüfen, ob Dateinummer gültig ist
'3. Prüfen ob Datei bereit existiert
'4. + 5. Vorhandensein prüfen und an der richtige Stelle kopieren
'6. Datein Speichern
'1.
If Pfad_prüfen(sPfadErledigt) Is Nothing Then
MsgBox "Verzeichnis """ & sPfadErledigt & """ nicht vorhanden oder nicht gefunden.", vbExclamation
Exit Sub
End If
'2.
Set wsPL = ThisWorkbook.Worksheets("Planung")
If Not IsNumeric(wsPL.Range(cNrAdr).Value) Then
MsgBox "Nummer """ & wsPL.Range(cNrAdr).Value & """ ist für diese Datei nicht gültig.", vbExclamation
Exit Sub
End If
'3
DateiPfad = sPfadErledigt & Replace(DateinamenMuster, "xxx", wsPL.Range(cNrAdr).Value)
Set Datei = Datei_prüfen(DateiPfad)
If Not Datei Is Nothing Then
If MsgBox("Datei """ & Datei.ShortPath & """ existiert bereits. " & vbCr & vbCr & "Überschreiben?", vbYesNo + vbQuestion)  vbYes Then
Exit Sub
End If
End If
'4. + 5.
With Workbooks("Übersicht.xlsm").Worksheets("Übersicht")
Set Erg = .Range("A2:A" & .Range("A99999").End(xlUp).Row).Find(wsPL.Range("FR2").Value)
If Erg Is Nothing Then Set Erg = .Range("A99999").End(xlUp).Offset(1, 0) 'wenn kein Treffer, dann als neue Zeile am Ende
wsPL.Range("FR2:KZ2").Copy
Erg.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End With
'6.
ThisWorkbook.SaveAs DateiPfad, xlOpenXMLWorkbookMacroEnabled
'    ThisWorkbook.Close
End Sub
VG
Yal
Anzeige
Soooooooo GUT =D
07.03.2022 12:05:22
Andreas
YAAAAAAAAAAAL,
du Spitze!!!
vielen vielen Dank. Es funktioniert genauso wie ich es mir gewünscht habe =D
Danke für deine Geduld und dein Durchhaltevermögen. Ich weiß, hab's dir nicht leicht gemacht.
Bin dir sehr sehr Dankbar und wünsche dir eine super Woche.
Gruß Andreas
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA: Werte kopieren und überschreiben in Excel


Schritt-für-Schritt-Anleitung

  1. Bibliothek einbinden: Stelle sicher, dass die Bibliothek "Microsoft Scripting Runtime" in den Excel-Referenzen aktiviert ist. Gehe zu Extras > Verweise und aktiviere das Kontrollkästchen.

  2. Code anpassen: Verwende den folgenden VBA-Code, um Werte aus einer Datei ("Planung") in eine andere Datei ("Übersicht") zu kopieren. Der Code prüft, ob der Wert bereits vorhanden ist und ersetzt die Daten, wenn dies der Fall ist.

Private Sub CommandButton1_Click()
    Dim Datei As File
    Dim Erg As Range
    Dim wsPL As Worksheet
    Const cNrAdr = "AN1" ' Adresse der Zelle, wo die Planungsnummer zu lesen ist

    ' 1. Prüfen, dass der Pfad gültig ist
    If Pfad_prüfen(sPfadErledigt) Is Nothing Then
        MsgBox "Verzeichnis """ & sPfadErledigt & """ nicht vorhanden oder nicht gefunden.", vbExclamation
        Exit Sub
    End If

    ' 2. Prüfen, ob die Dateinummer gültig ist
    Set wsPL = ThisWorkbook.Worksheets("Planung")
    If Not IsNumeric(wsPL.Range(cNrAdr).Value) Then
        MsgBox "Nummer """ & wsPL.Range(cNrAdr).Value & """ ist für diese Datei nicht gültig.", vbExclamation
        Exit Sub
    End If

    ' 3. Prüfen, ob die Datei bereits existiert
    DateiPfad = sPfadErledigt & Replace(DateinamenMuster, "xxx", wsPL.Range(cNrAdr).Value)
    Set Datei = Datei_prüfen(DateiPfad)
    If Not Datei Is Nothing Then
        If MsgBox("Datei """ & Datei.ShortPath & """ existiert bereits. " & vbCr & vbCr & "Überschreiben?", vbYesNo + vbQuestion) = vbYes Then
            Exit Sub
        End If
    End If

    ' 4. + 5. Vorhandensein prüfen und an der richtigen Stelle kopieren
    With Workbooks("Übersicht.xlsm").Worksheets("Übersicht")
        Set Erg = .Range("A2:A" & .Range("A99999").End(xlUp).Row).Find(wsPL.Range("FR2").Value)
        If Erg Is Nothing Then Set Erg = .Range("A99999").End(xlUp).Offset(1, 0) ' wenn kein Treffer, dann als neue Zeile am Ende
        wsPL.Range("FR2:KZ2").Copy
        Erg.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        Application.CutCopyMode = False
    End With

    ' 6. Datei speichern
    ThisWorkbook.SaveAs DateiPfad, xlOpenXMLWorkbookMacroEnabled
End Sub

Häufige Fehler und Lösungen

  • Laufzeitfehler 450: Dieser Fehler tritt häufig auf, wenn die Anzahl der Argumente in einer Funktion nicht korrekt ist. Stelle sicher, dass die Methode SuchenErsetzen korrekt definiert ist.

  • Daten werden nicht überschrieben: Überprüfe, ob die Find-Methode korrekt arbeitet und ob die Werte in der richtigen Range gesucht werden.

  • Falsches Arbeitsblatt: Stelle sicher, dass der Code auf das korrekte Arbeitsblatt verweist (in diesem Fall "Planung" und "Übersicht").


Alternative Methoden

Wenn du die Werte nicht über VBA kopieren und einfügen möchtest, kannst du auch die Excel-Funktion SVERWEIS oder WENN verwenden, um Daten zu vergleichen und zu überschreiben. Diese Methoden sind möglicherweise weniger flexibel, bieten aber einfache Lösungen für den Datenabgleich.


Praktische Beispiele

  1. Kopieren und Einfügen in eine andere Datei:

    ThisWorkbook.Worksheets("Planung").Range("A1:A10").Copy
    Workbooks("Übersicht.xlsm").Worksheets("Übersicht").Range("A1").PasteSpecial Paste:=xlPasteValues
  2. Bedingte Formatierung überschreiben: Du kannst die bedingte Formatierung in der Zieltabelle überschreiben, indem du die Formatierungen nach dem Einfügen der Werte anwendest.


Tipps für Profis

  • Verwende Application.ScreenUpdating = False, um die Bildschirmaktualisierung während des Kopiervorgangs zu deaktivieren, um die Ausführungsgeschwindigkeit zu erhöhen.

  • Achte darauf, den VBA-Code gut zu kommentieren, damit du später leichter nachvollziehen kannst, was jeder Abschnitt bewirkt.

  • Nutze Option Explicit am Anfang deiner Module, um sicherzustellen, dass alle Variablen deklariert sind, was hilft, Fehler zu vermeiden.


FAQ: Häufige Fragen

1. Wie kann ich die bedingte Formatierung in der Zieltabelle überschreiben? Du kannst die bestehende bedingte Formatierung in der Zieltabelle löschen, bevor du die neuen Werte einfügst.

2. Was mache ich, wenn ich nur bestimmte Zellen kopieren möchte? Du kannst die Range anpassen, um nur die gewünschten Zellen zu kopieren. Zum Beispiel: Range("A1:B10").

3. Wie finde ich heraus, ob eine Datei existiert? Verwende die Funktion Datei_prüfen, um zu überprüfen, ob die Datei am angegebenen Pfad existiert, bevor du versuchst, sie zu öffnen oder zu bearbeiten.

4. Kann ich den Code auch in Excel Online verwenden? VBA funktioniert ausschließlich in Desktop-Versionen von Excel. Für Excel Online musst du auf Office Scripts zurückgreifen, die nicht die gleiche Funktionalität bieten.

5. Gibt es eine Möglichkeit, den VBA-Code zu optimieren? Ja, du kannst den Code modularisieren, indem du Funktionen für wiederkehrende Aufgaben erstellst, um die Lesbarkeit und Wartbarkeit zu erhöhen.

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