Clever-Excel-Forum

Normale Version: Fehler beim Werte kopieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ich möchte eigentlich eine simple Sache umsetzen, bekomme aber immer einen Fehler den ich trotz googeln und unterschiedlicher von mir ausprobierter Varianten nicht verstehe:

Letztendlich geht es um einen Code, der eine andere Datei öffnet, per Find-Methode ein Datum in der ersten Spalte findet, die Reihe des Suchergebnisses ermittelt und dann in dieser Reihe eine gewisse Range, also die Daten mehrerer Zellen kopiert, um diese Werte dann in die ursprüngliche Datei, aus der das Makro gestartet wurde, einzufügen.


Dim WbRet As Workbook
Dim WbaWB As Workbook
Dim c As Range
Dim ClearRow As Long
Dim TDate As Date
Dim sh As Worksheet

strFilename = "C:\Temp"

Set WbaWB = ThisWorkbook
Set sh = ActiveSheet

TDate = WbaWB.ActiveSheet.Range("E1").Value

Set WbaWB = ThisWorkbook

Set WbRet = Workbooks.Open(Filename:=strFilename)

WbRet.Sheets("DB_Abzugszeiten").Activate

    Set c = WbRet.Sheets("Tabelle2").Range("A5:A2000").Find(What:=TDate, LookIn:=xlValues, lookat:=xlPart)
   
      WbRet.Sheets("Tabelle2").Range(Cells(c.Row, 148), Cells(c.Row, 158)).Copy WbaWB.sh.Cells(1, 29)




Das hab ich eigentlich schon viele Male gemacht, aber diesmal spuckt er mir immer den Laufzeitfehler 438 "Objekt unterstützt diese Eigenschaft oder Methode nicht" aus.

Es funktioniert alles bis zu der hier eingetragenen letzten Codezeile. Finde meinen Fehler einfach nicht.

Danke im Voraus
Hallo,

ohne deine Datei zu kennen, ist es schwierig auf Fehlersuche zu gehen. Grundsätzlich kann man sagen, dass Excel etwas zickig ist, wenn es um die Datumsuche per Find-Methode geht. Da arbeite ich lieben mit der Funktion Match.
Hallo, 19 

hat "c" überhaupt einen Wert, sprich - wurde etwas gefunden?

In der Regel prüft man das mit (direkt nach dem Set...): 21 

Code:
If Not c Is Nothing Then

Mehr kann man im Moment nicht sagen. Dodgy
Hallo,

ja also die Find-Methode funktioniert. Das war auch mein erster Gedanke. c.row ergibt dann  auch den richtigen Wert. ich habe auch mal den zweiten Teil der "Problemzeile" weggelassen und den Code nur bis .copy laufen lassen. Da bekomme ich auch keinen Fehler. Er kopiert den richtigen Bereich. Nur wenn ich das auf welche Weise auch immer (:=Destination, neue Zeile Pastespecial...) in die andere Datei einfügen will kommt die Fehlermeldung. Genau das check ich aber nicht. 

um die Dateien hochzuladen, müsste ich die betreffenden Dateien so krass verschlanken, dass ich glaube dass das nicht viel Sinn macht. Das sind leider sensible Daten und ziemlich große Dateien. 

Ich hatte gehofft dass irgendjemand einen "dummen" Fehler in meinem Code so ablesen kann.

Gruß
Hallo, 19 

schreibe es mal so: 21 

Code:
...Copy WbaWB.Worksheets(sh.Name).Cells(1, 29)

Das hier ist aber auch ein "Wackelkandidat": Dodgy

Code:
Set sh = ActiveSheet
Hi

Wenn du die Range mit Cells zusammenbaust und sich das ganze nicht auf das aktive Blatt bezieht musst du richtig referenzieren.
Tab2 ist aktiv -> dann so.
Worksheets("Tabelle1").Range(Worksheets("Tabelle1").Cells(2, 2), Worksheets("Tabelle1").Cells(2, 4)).Copy

Gruß Elex
Hallo Case,

dein Tipp hat mich auf den richtigen Weg gebracht. Tatsächlich konnte er sich das Blatt nicht merken. Wenn ich am Anfang aber den Blattname auslese und ihn als string in eine Variable speichere und dann später über sheets(variable) darauf zurückgreife, dann funktioniert alles. Hätte ich niemals gedacht.

@Elex, die Nummer hat mich nach dem Lösen des ersten Problems eingeholt. Denk da immer nicht dran, dass man vor Cells jedes mal noch das Sheet benennen muss.

Danke euch. Problem ist gelöst Smile