Werte aus den Zellen gezielt wählen und schreiben lassen

ExecuteExcel4Macro() kenn ich gar nicht.
Und was für ein Sortierungsteil? Was für ein Fehler?
 
Ist nicht so schwer

Erklärungen im Code
Visual Basic:
Public Sub t405709()
    Const C_SRC_TABLE = "Tabelle1"      'Name der Quelltabelle
    Const C_SRC_ADRESS = "A:G"          'zu kopierender Range
    Const C_TRG_TABLE = "trg"           'Name der Zieltabelle
    Const C_FILTER_COL = 5              'Spalte zum Filtern (E)
    Const C_FILTER_VALUE = "Bild"       'Wert zum filtern
 
 
    Dim srcWs As Worksheet:     Set srcWs = Worksheets(C_SRC_TABLE)
    Dim srcRng As Range:        Set srcRng = srcWs.Range(C_SRC_ADRESS)
    Dim trgWs As Worksheet:     Set trgWs = Worksheets(C_TRG_TABLE)
 
    Dim rowRng As Range
    Dim bildRow As Long
    Dim lastTrgRowNr As Long:   lastTrgRowNr = -1
    Dim blockFlag As Boolean
 
    'Bestehende Daten löschen
    trgWs.UsedRange.Clear
 
    'Zeilen durchiterieren
    For Each rowRng In srcRng.rows
        'Wenn die ganze Zeile leer ist, aufhören
        If srcWs.Application.WorksheetFunction.CountA(rowRng) = 0 Then Exit For
        'Bildfilter prüfen
        If rowRng.Cells(1, C_FILTER_COL).value = C_FILTER_VALUE Then
            blockFlag = False           'Block zurücksetzen
            bildRow = rowRng.row        'Letzte Bild-Zeile merken
        ElseIf bildRow > 1 Then
            'Falls Blockanfang, die letzte Bildzeile ausgeben
            If Not blockFlag Then
                lastTrgRowNr = lastTrgRowNr + 2     'Zielzeile ermitteln (inkl. einer Leerzeile am Anfang)
                'Letzte Bild-Zeile kopieren
                rowRng.Offset(-1).Copy trgWs.Cells(lastTrgRowNr, 1)
                lastTrgRowNr = lastTrgRowNr + 1     'Plus eine Leerzeile
            End If
            blockFlag = True                            'Block beginnen
            lastTrgRowNr = lastTrgRowNr + 1             'Zielzeile ermitteln
            rowRng.Copy trgWs.Cells(lastTrgRowNr, 1)    'Zeile kopieren
        End If
    Next rowRng
    'mitkopierte Formate entfernen
    trgWs.UsedRange.ClearFormats
End Sub

Hier der Bild-Sortierungscode
Und der Fehler ist hier: Dim srcWs As Worksheet: Set srcWs = Worksheets(C_SRC_TABLE)

Bevor ich so viel "laber" und das Gespräch ins Nichts bringe, schreibe ich was ich vor habe.
Wie oben zitiert, habe ich die Excel-Datei sortiert. In der sortierten Excel-Datei sind ja: in der ersten Zeile "Bild: Bildnummer"; in der nächsten Zeilen die Einträge aufgelistet.
Jetzt möchte ich aus einer externen Datei. Die Einträge spezialisieren. D.h.:

Veränderbare Werte:
interner Datei: Bild 14 --> Eintrag:Command --> Änderung 0 zu 1

Lokale Werte
externer Datei: Bild 14-->Eintrag:Command---> Lichteinschaltung---->1---->ON
externer Datei: Bild 14-->Eintrag:Command---> Lichteinschaltung---- >0---->OFF

Vergleich der internen mit externen und schreibe eine neue Datei/Tabelle.
Neue Datei sieht dann so aus:
Bild 14--->Lichteinschaltung ---> On

Danke im Voraus
 
Das ist kein Sortierungscode. Das ist ein einfaches zuweisen eines Worksheets. Nix mit sortieren.

Und die Fehlermeldung ist?
Des Weiteren. In welcher Datei wird der Code ausgeführt? In der Zieldatei? In der Quelldatei? In einer dritten unabhängigen Datei?
 
Das ist kein Sortierungscode. Das ist ein einfaches zuweisen eines Worksheets. Nix mit sortieren.

Und die Fehlermeldung ist?
Des Weiteren. In welcher Datei wird der Code ausgeführt? In der Zieldatei? In der Quelldatei? In einer dritten unabhängigen Datei?
- Runtime-Error.
- Code wird in der Zieldatei ausgeführt, wo meine "Rohdaten" sind. In der unabhängingen Datei (externen Datei) befinden sich die Spezifikationen.
 
Runtime-Error
Sorry, diese Aussage ist nix Wert. Das ist gleich wie "Es hat ein Fehler". Eine Nummer? Ein Error-Text?
 
Ich weiss, ich frage zu viel. Und vieles davon ist sehr einfach. Ich bin erneut in einer Problematik verwickelt. Wenn ihr mir dieses löst oder Tipp gibt, werde ich euch nicht mehr nerven. Weil ich den Rest ohne Probleme erledigen kann... Also das letzte Mal....

Ich versuche es zu erläutern:

Kommentar #1 dieser Thread: Habe eine Datei hochgeladen und mein Problem geschildert.

Durch Kommentar #4 wurde mein Problem gelöst.
Ist nicht so schwer

Erklärungen im Code
Visual Basic:
Public Sub t405709()
    Const C_SRC_TABLE = "Tabelle1"      'Name der Quelltabelle
    Const C_SRC_ADRESS = "A:G"          'zu kopierender Range
    Const C_TRG_TABLE = "trg"           'Name der Zieltabelle
    Const C_FILTER_COL = 5              'Spalte zum Filtern (E)
    Const C_FILTER_VALUE = "Bild"       'Wert zum filtern
 
 
    Dim srcWs As Worksheet:     Set srcWs = Worksheets(C_SRC_TABLE)
    Dim srcRng As Range:        Set srcRng = srcWs.Range(C_SRC_ADRESS)
    Dim trgWs As Worksheet:     Set trgWs = Worksheets(C_TRG_TABLE)
 
    Dim rowRng As Range
    Dim bildRow As Long
    Dim lastTrgRowNr As Long:   lastTrgRowNr = -1
    Dim blockFlag As Boolean
 
    'Bestehende Daten löschen
    trgWs.UsedRange.Clear
 
    'Zeilen durchiterieren
    For Each rowRng In srcRng.rows
        'Wenn die ganze Zeile leer ist, aufhören
        If srcWs.Application.WorksheetFunction.CountA(rowRng) = 0 Then Exit For
        'Bildfilter prüfen
        If rowRng.Cells(1, C_FILTER_COL).value = C_FILTER_VALUE Then
            blockFlag = False           'Block zurücksetzen
            bildRow = rowRng.row        'Letzte Bild-Zeile merken
        ElseIf bildRow > 1 Then
            'Falls Blockanfang, die letzte Bildzeile ausgeben
            If Not blockFlag Then
                lastTrgRowNr = lastTrgRowNr + 2     'Zielzeile ermitteln (inkl. einer Leerzeile am Anfang)
                'Letzte Bild-Zeile kopieren
                rowRng.Offset(-1).Copy trgWs.Cells(lastTrgRowNr, 1)
                lastTrgRowNr = lastTrgRowNr + 1     'Plus eine Leerzeile
            End If
            blockFlag = True                            'Block beginnen
            lastTrgRowNr = lastTrgRowNr + 1             'Zielzeile ermitteln
            rowRng.Copy trgWs.Cells(lastTrgRowNr, 1)    'Zeile kopieren
        End If
    Next rowRng
    'mitkopierte Formate entfernen
    trgWs.UsedRange.ClearFormats
End Sub

Jetzt ist mein Anliegen folgendes:
Durch oben erwähnten Code wird in meiner Excel-Datei, gezielte Werte aus der Tabelle1 gefiltert und in der Tabelle2 ausgeschrieben.

Ich möchte nun die Werte aus der Quelltabelle durch die Werte der externen Datei( im Anhang) ersetzen.
D.h.:
In der Quelltabelle steht bsp.weise: Spalte F "Bildnummer", Eine Zeile tiefer: Spalte E "Eintrag:Value", Spalte F "Wertsänderung"

In der externen Tabelle stehen in der Spalte A "Bildnummer", Spalte C "Value" Spalte D"Umdrehung" Spalte F ".."

Also:
1) Vergleiche aus Quell- und extern Tabelle die Bildnr! Wenn sie gleich sind:
2) Vergleiche die Einträge der beiden Tabellen( Der Zellinhalt ist nicht 1 zu 1).

Wenn 1) und 2) stimmen, dann überschreibe die Spalte E aus der Quelltabelle mit Spalte D aus der Externen. Der Rest kann dann stehen bleiben!
 

Anhänge

  • extern.xlsx
    8,2 KB · Aufrufe: 2
Irgendwie komme ich nicht mit was da wie und wo ersetzt werden soll.
Soll jetzt am Ziel noch irgendwie anhand der skurrilen weiteren Date noch irgendwas gemacht werden?
Sorry, ich weiss auch nicht mehr was mein Code eigentlich macht, da ich bereits so viele Codes auf einzelanfragen geleifert habe und keinen Schimmer habe, wie das zusammenspielen soll.
 
Zurück