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.

Zellwerte aus mehreren Dateien per VBA
#21
Hallo Stefan...leider richtig Huh
Antworten Top
#22
Hallo Philipp,

Code:
Sub prcX()
   Dim strDatei As String
   Dim lngSpalte As Long
  
   'On Error Resume Next
   'Eintrag in Spalte E
   lngSpalte = 5
   'im Unterverzeichnis Dateien bitte anpassen
   strDatei = Dir(ThisWorkbook.Path & "\Angebote\*.xls*")
   Do While strDatei <> ""
      Workbooks.Open ThisWorkbook.Path & "\Angebote\" & strDatei
      ActiveWorkbook.Worksheets(1).Range("E19:E74").Copy ThisWorkbook.Worksheets(1).Cells(4, lngSpalte).Value
      lngSpalte = lngSpalte + 3
      ActiveWorkbook.Close False
      strDatei = Dir()
   Loop
End Sub

der Code kopiert jeweils aus dem ersten Tabellenblatt der Angebotsdateien in das erste Tabellenblatt der Vergleichsdatei. In der Vergleichsdatei jeweils versetzt um drei Spalten beginnend mit der Spalte E. Ich habe mich bei den Bereichsangaben an deinen Angaben aus dem Beitrag 19 gehalten, die aber von denen aus dem Startbeitrag abweichen.
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#23
Hallo Stefan,

leider spuckt Excel mir bei Ausführung deines letzten Codes die (X) Fehlermeldung "400" aus. Ohne weitere Infos.
Habe versucht den Code weitestmöglich nachzuvollziehen, was mir bedingt gelungen ist.

Ich finde darin keinen Befehl, der mir die Werte auch in meine Zieldatei einfügt....lediglich den copy-befehl Huh

Grüße Philipp
Antworten Top
#24
Hallo Philipp,

in welcher Codezeile kommt der Fehler?
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#25
Die Codezeile wird mir nicht angezeigt, die Meldung erscheint direkt nachdem sich die Angebotsdatei (Quelldatei) öffnet (was ja eigentlich gar nicht notwendig ist, da ja nur die Werte übernommen werden sollen). Hmmm...
Antworten Top
#26
Hallo Philipp,

(25.10.2018, 10:03)Philipp1344 schrieb: Die Codezeile wird mir nicht angezeigt, die Meldung erscheint direkt nachdem sich die Angebotsdatei (Quelldatei) öffnet

im Meldungsfenster sollten auch ein paar Buttons sein mit den Bezeichnungen Beenden bzw. Debuggen. Klicke da mal auf Debuggen. Ist jetzt eine Zeile markiert? Wenn ja, welche?

(25.10.2018, 10:03)Philipp1344 schrieb: .... (was ja eigentlich gar nicht notwendig ist, da ja nur die Werte übernommen werden sollen). Hmmm...

auch Hmmm. Es gibt zwar eine Funktion von Thomas Ramel, die kann aus geschlossenen Dateien Daten auslesen aber ob man das auf deinen Fall umstricken kann. Weis ich nicht.
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#27
Hallo Stefan, habe das Makro jetzt mal aus dem Editor gestartet und nicht per Button. Nachdem sich die Quelldatei öffnet, erscheint nun im Editor die Meldung "Die Copy-Methode des Range Objektes konnte nicht ausgeführt werden".
Eine Debug-Button gibt es aber nicht...
Antworten Top
#28
Hallo Philipp,

da ich deine Dateien nicht kenne, wäre das alles nur ein Ratespiel was der Grund ist. Ich habe mal nach der angesprochenen Funktion von Thomas Ramel gesucht und versucht, den Code anzupassen. Mangels Testmöglichkeit ist dies ungeprüft.

Code:
Sub prcX()
   Dim strDatei As String
   Dim lngSpalte As Long
  
   'On Error Resume Next
   'Eintrag in Spalte E
   lngSpalte = 5
   'im Unterverzeichnis Dateien bitte anpassen
   strDatei = Dir(ThisWorkbook.Path & "\Angebote\*.xls*")
   Do While strDatei <> ""
      If GetDataClosedWB(ThisWorkbook.Path & "\Angebote\", _
         strDatei, "Tabelle1", "E19:E74", _
         ThisWorkbook.Worksheets(1).Cells(4, lngSpalte)) Then
         lngSpalte = lngSpalte + 3
      End If
      strDatei = Dir()
   Loop
End Sub
Public Function GetDataClosedWB(SourcePath As String, _
                                 SourceFile As String, _
                                 sourceSheet As String, _
                                 SourceRange As String, _
                                 TargetRange As Range) As Boolean

'Holt einen Bereich aus einer _geschlossenen_ Arbeitsmappe
'Nur in VBA zu verwenden; nicht aus einer Tabellenzelle heraus
'© t.ramel@mvps.org

Dim strQuelle       As String
Dim Zeilen          As Long
Dim Spalten         As Long   'Byte habe ich in Long geändert

    On Error GoTo InvalidInput

    strQuelle = "'" & SourcePath & "[" & SourceFile & "]" & _
                sourceSheet & "'!" & _
                Range(SourceRange).Cells(1, 1).Address(0, 0)

    Zeilen = Range(SourceRange).Rows.Count
    Spalten = Range(SourceRange).Columns.Count

    With TargetRange.Cells(1, 1).Resize(Zeilen, Spalten)
       .Formula = "=IF(" & strQuelle & "="""",""""," & strQuelle & ")"
       .Value = .Value
    End With

    GetDataClosedWB = True
    Exit Function

InvalidInput:
    MsgBox "Die Quelldatei oder der Quellbereich ist ungültig!", _
           vbExclamation, "Get data from closed Workbook"
    GetDataClosedWB = False
End Function
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#29
Hallo Stefan,

ein kleiner Fortschritt, immerhin! Danke!
Allerdings kopiert er mir jetzt die Werte dreimal in die Zieldatei. Ich muss auch noch ein paar Zell-Zuordnungen anpassen. Ich probiere mal selbst und melde mich wieder! Gff. dann auch mal mit einer Beispieldatei.

Grüße,
Philipp
Antworten Top
#30
Hallöchen,

mal zu #22

Wäre statt
ActiveWorkbook.Worksheets(1).Range("E19:E74").Copy ThisWorkbook.Worksheets(1).Cells(4, lngSpalte).Value

nicht
ActiveWorkbook.Worksheets(1).Range("E19:E74").Copy ThisWorkbook.Worksheets(1).Cells(4, lngSpalte)

besser?
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


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