Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA Wenn kein Treffer, dann mit nächster Tabelle weitermachen
#21
Hallo,

habe nun leider doch noch ein Problem:

Ich würde gerne nur Werte einfügen, bekomme dies jedoch nicht so richtig umgesetzt. Konkret geht es mir um diesen Bereich:
Code:
        If Not tmp Is Nothing Then tmp.Copy wkbtarget.Sheets("Ausgangsdaten").Cells(sheetTargets(i), 1)
nach ein wenig Recherche bin ich über .PasteSpecial Paste:=xlValues gestolpert. Leider führt
Code:
        If Not tmp Is Nothing Then tmp.Copy wkbtarget.Sheets("Ausgangsdaten").Cells(sheetTargets(i), 1).PasteSpecial Paste:=xlValues
zu einem Fehler beim Kompilieren: Erwartet: Anweisungsende
Nach weiterer Recherche habe ich dann festgestellt, dass ich wohl den Code in zwei Zeilen schreiben muss. Leider führte
Code:
        If Not tmp Is Nothing Then tmp.Copy
        wkbtarget.Sheets("Ausgangsdaten").Cells(sheetTargets(i), 1).PasteSpecial Paste:=xlValues
zwar dazu, dass mir nun nur Werte eingefügt wurden, jedoch wurde bei fehlenden Treffern in nachfolgenden Arbeitsmappen die vorherigen Arbeitsmappen erneut eingefügt (an der Stelle an der die eigentlichen Funde der neuen Arbeitsblätter (Blatt ohne Treffer) hätten eingetragen werden sollen).
Meine Folgeüberlegung war daher, die tmp Variable zu leeren. Dies versuchte ich über unterschiedliche Wege:
Code:
tmp = Null
tmp = vbNull
tmp = Empty
tmp = ""
Zwar wurden die Daten nun richtig eingefügt (als Werte) und die Daten landeten bei mangelnden Treffern nicht doppelt (an unterschiedlichen im Makro definierten Stellen) in meiner Zielmappe, jedoch musste ich feststellen, dass etwaige Funde aus meine Quelldatei entfernt wurden.

Daher meine Fragen:

Gibt es eine Möglichkeit nur Werte einzufügen UND die Quelldaten dabei zu erhalten? Wie erreiche ich dies?

Es wäre super, wenn ihr mir erneut unter die Arme greifen könntet.
Gruß

Stoffo
Antworten Top
#22
Moinsen,

puh, da steht aber noch einiges auf tönernen Füssen. Wenn ich Mal etwas Zeit finde, analysiere ich auch noch Mal deinen Versuch, meinen Vorschlag anzupassen (Stichwort: Hochgezählte Variablennamen). Aber zum aktuellen Problem:
.Copy ist eine Methode, die einen einzigen optionalen Parameter vom Typ Range akzeptiert und der das Ziel einer Kopie angibt. Wenn du den Parameter weglässt, merkt sich Excel die Stelle und wartet ab, was der Programmierer als nächstes vor hat (also: neue Programmzeile). 
Zweitens: ein einfaches If ... Then ... Statement darf nur eine einzige Anweisung im Dann-Teil haben. Bei mehreren Anweisungen brauchst du einen If ... then ... End If Block. Das bedeutet, die erste Anweisung muss schon in einer eigenen Zeile beginnen (auch hier hilft dir die F1 Taste).
Code:
If Bedingung Then
   Zellbereich.Copy
   Zielbereich.PasteSpecial Parameter
End If

Viele Grüße
derHoepp
(Vom Handy gesendet)

Nachtrag: Objektvariablen werden zurückgesetzt, in dem man sie auf Nothing zeigen lässt:
Set Objektvariable = Nothing
Antworten Top
#23
Moin,

da bin ich anscheinend über Eigenschaften und Methoden gestolpert und du hast Recht, meine VBA Kenntnisse sind durchaus Ausbaufähig (s. Profil -> Anfänger) wobei ich durch solche Probleme und eure Antworten schon viel mitnehmen kann. So wie ich das sehe ist es in meinem Fall am fehlenden End If gescheitert. Dieses habe ich nun ergänzt und siehe da, alle Daten in der Quelldatei bleiben erhalten, Werte werden eingefügt und auch leere Tabellen scheinen nicht zu Problemen zu führen.
Erneut vielen Dank für die Unterstützung. Anbei die Lösung

Code:
        If Not tmp Is Nothing Then
            tmp.Copy
            wkbtarget.Sheets("Ausgangsdaten").Cells(sheetTargets(i), 1).PasteSpecial Paste:=xlValues
        End If
Interessehalber: Wo genau liegt der Unterschied zwischen Set Objektvariable = Nothing und Objektvariable = Nothing? Ist das "=" nicht analog zur Zuweisung durch Set?
Gruß

Stoffo
Antworten Top
#24
Hi,

du hast mit tmp eine Objektvariable. Eine Objektvariable hat idR eine Default-Eigenschaft. Diese wird mit "=" angesprochen. Daher ist es egal, ob du bei deinem Range-Objekt tmp = "irgendwas" oder tmp.Value = "irgendwas" schreibst. Und dafür, dass du der Variablen selbst ein Objekt zuordnen kannst, dafür gibt es den Set-Befehl. "Set" und "=" sind somit nicht identisch und können sich auch nicht gegenseitig ersetzen. Vermutlich verwechselst du das Ganze mit "Let".
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste