Absolute Werte eines Bereiches in andere Datei kopieren mit Abfrage,Schleife: wenn Zeile befüllt, nicht überschreiben

  • Excel

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von remus.

    Absolute Werte eines Bereiches in andere Datei kopieren mit Abfrage,Schleife: wenn Zeile befüllt, nicht überschreiben

    Hallo,

    ich habe nunmehr ein Makro, was mir eine Bereich in einer andere separate Datei kopiert. klappt soweit hervorragend.

    Mein soweit funktionierendes Kopier-Makro:

    Visual Basic-Quellcode

    1. Sub aktualisieren()
    2. Workbooks.Open Filename:= _
    3. "E:\[...]\IST_StandTest_22.05.2020.xlsx", UpdateLinks:=3
    4. Workbooks("Original-Datei.xlsm").Sheets("IST_Stand").Range("B3:E883").Copy
    5. Workbooks("IST_StandTest_22.05.2020.xlsx").Sheets("IST_Stand").Range("B3:E883").PasteSpecial Paste:=xlPasteValues
    6. Workbooks("IST_StandTest_22.05.2020.xlsx").Sheets("IST_Stand").Range("B3:E883").PasteSpecial Paste:=xlPasteFormats
    7. Application.CutCopyMode = False
    8. End Sub


    Allerdings stehe ich jetzt vor einem weit schlimmeren Problem.

    Ziel ist: jeweils zu einem Zeitpunkt "x" den aktuellsten Stand des Bereichs der Originaldatei als absolute Werte in die andere Datei (Auswertung) zu kopieren. Dabei sollen allerdings die kopierten Werte der vorherigen Aktualisierung nicht überschrieben werden.

    Siehe Screens:
    Beispiel1; zeigt fiktiven Stand Zeitpunkt 1
    Beispiel2; zeigt fiktiven Stand Zeitpunkt 2

    Beide Stände bzw. Werte des jeweiligen Standes müssten in einer Tabelle stehen.

    Ich brauche daher eine Ergänzung für mein bestehendes Makro, was folgendes ermöglicht (bitte korrigiert, verbessert oder erweitert die Anforderung):

    1.prüfe, ob in dem einzufügenden Bereich, in der alten Zeile (Datei Auswertung) ein Wert ≠ "#NV" existiert. (sprich, ist eine Zah wie "Auftragsnr"l, ein Text wie "Name etc." vorhanden)
    2.Wenn nein, Werte aus Originalbereich kopieren.
    3. Wenn ja, diese Zeile überspringen und bei der nächsten weitermachen, prüfen usw.

    Ggf. kann man auch beim Kopiervorgang mitgeben, dass das Makro alle Platzhalterwerte "#NV"" bereits durch "leer" ersetzt.

    Ich hoffe, ich konnte mein Anliegen verständlich schildern.
    Bilder
    • Beispiel1.JPG

      91,27 kB, 969×706, 93 mal angesehen
    • Beispiel2.JPG

      108,19 kB, 961×958, 89 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „EaranMaleasi“ ()

    Hi @remus, willkommen im Forum.

    Ich möchte dich nur kurz darauf hinweisen, dass es im Editor auch Optionen für's Syntax-Highlighting gibt. Für VBS, VBA und VB6 wäre dass der VB6.0 Button. Das macht es allen einfacher deinen Code zu lesen. Bitte nutze dies in Zukunft. Ich habe mir erlaubt das in diesem und deinem letzt Post bereits zu korrigieren.

    Mehr infos dazu findest du in diesen Posts:
    [Allgemein] VB.NET, VB6, VBA, VBS — Mit welcher Sprache programmiere ich eigentlich?
    [Forum] Welche BBCodes (Tags) gibt es hier im Forum zum Einfärben von Quellcodes (Syntax-Highlighting)?
    [Forum] Welche BBCodes (Tags) sind im Forum zur Gestaltung der Postings verfügbar? (Anleitung zur Benutzung)
    Nochmal mein Problem, das Ziel ggf. vereinfachter gefasst:

    Prüfe in Blatt1 der Datei1 ob in einer bestimmten Zelle einer Zeile der
    Wert "a" vorkommt. Wenn "a" nicht vorkommt, dann kopiere aus Blatt1
    der Datei2 die ganze Zeile (nur Werte) in Blatt1 der Datei 1 an die
    selbe Position. Wenn "a" vorkommt auf gar
    keinen Fall die Zeile kopieren und damit den Stand in Datei1
    überschreiben. Prüfe Zeile um Zeile

    Hier der Code-Zwischenstand, allerdings bekomme ich einen Fehler ausgegeben:

    Fehler 1004; anwendungs- oder objektdefinierter fehler

    Visual Basic-Quellcode

    1. Sub CommandButton1_Click()
    2. Dim i As Variant
    3. a = 2
    4. For Each i In Workbooks("SollStand_Mehrwegschütten_LK_20200519_Makros.xlsm").Sheets("IST_Stand").Range("2:200")
    5. If Workbooks("IST_StandTest_22.05.2020.xlsx").Sheets("IST_Stand").Cells(i, 6).Value = "" Then
    6. Workbooks("SollStand_Mehrwegschütten_LK_20200519_Makros.xlsm").Sheets("IST_Stand").Rows(i).Range("2:200").Copy
    7. Workbooks("IST_StandTest_22.05.2020.xlsx").Sheets("IST_Stand").Cells(a, 1).PasteSpecial Paste:=xlPasteValues
    8. Workbooks("IST_StandTest_22.05.2020.xlsx").Sheets("IST_Stand").Cells(a, 1).PasteSpecial Paste:=xlPasteFormats
    9. a = a + 1
    10. End If
    11. Next i
    12. End Sub

    remus schrieb:

    Workbooks("SollStand_Mehrwegschütten_LK_20200519_Makros.xlsm").Sheets("IST_Stand").Rows(i).Range("2:200").Copy

    Visual Basic-Quellcode

    1. ​Workbooks("SollStand_Mehrwegschütten_LK_20200519_Makros.xlsm").Sheets("IST_Stand").Rows(i).Copy
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --