[Excel] Mit Makro zusätzlich .xlsm einlesen

Instant_

Cadet 4th Year
Registriert
März 2018
Beiträge
101
Hallo Leute,

ich habe folgenden Code:

Code:
Option Explicit

Sub CopyExternData()

Const sXlsPath = "C:XXXXX"
Const iStartZeile = 4
Const iStartSpalte = 2


Const Zellen = "C2,C3,C4,C5,C6"


    Dim oFso As Object, oFile As Object, oWkb1 As Workbook, oWks0 As Worksheet, oWks1 As Worksheet
    Dim aCells As Variant, iNextLine As Long, i As Integer

    Set oWks0 = ThisWorkbook.ActiveSheet
  
  
  
    aCells = Split(Zellen, ","):  iNextLine = iStartZeile
  
  
    Set oFso = CreateObject("Scripting.FilesystemObject")
  
    For Each oFile In oFso.GetFolder(sXlsPath).Files
    'Application.DisplayAlerts = False
        If LCase(oFso.GetExtensionName(oFile.Name)) = "xls" Then
            If ThisWorkbook.Path <> oFile.Name Then
                Set oWkb1 = Workbooks.Open(oFile.Path)
                Set oWks1 = oWkb1.Sheets(1)
                For i = 0 To UBound(aCells)
                oWks0.Cells(iNextLine, iStartSpalte).Offset(0, i) = oWks1.Range(Trim(aCells(i))).Value
                Next
                oWkb1.Close False
                iNextLine = iNextLine + 1
            End If
        End If
    Next
    
End Sub

Was macht dieser Code? Er liest aus allen XLS Dateien, die in dem angegebenen Pfad sind, ein, macht sie auf, und schreibt dann Zeile für Zeile die Zellen die man oben angibt (in diesem Fall C2-C6) ein.

Leider funktioniert der Code nicht ganz so wie ich es möchte. Einerseits möchte ich zusätzlich noch .xlsm Dateien einlesen und andererseits möchte ich zusätzlich zu den Zellen den Filenamen des eingelesenen Files ausgeben.

Das hier
Code:
If LCase(oFso.GetExtensionName(oFile.Name)) = "xls" OR LCase(oFso.GetExtensionName(oFile.Name)) = "xlsx" Then
funktioniert leider nicht...und ich weiß nicht wieso. Das wäre nämlich das einfachste aber ja.

Vielen Dank für eure Hilfe.

Liebe Grüße
 
In der If-Abfrage hast du "xlsx" statt "xlsm" geschrieben.
Wo hapert es in der Ausgabe des Dateinamens?
 
Scientist schrieb:
In der If-Abfrage hast du "xlsx" statt "xlsm" geschrieben.
Wo hapert es in der Ausgabe des Dateinamens?

Ja, aber auch mit XLSX funktioniert es leider nicht. Auch nicht mit xls*, wo er dann eigentlich ALLE nehmen sollte...
Bei der Ausgabe happert es daran, dass ich nicht weiß wie ich zusätzlich zu den Zellen noch den Dateinamen einlese und vorallem dann auch an die richtige Position schreibe, also den Dateinamen

Danke für deine Hilfe!
 
Der Code macht was er soll. Entweder tippst du die Endung falsch ein (klein, ohne Punkt) oder die Dateien ensprechen nicht denm Format.
"xls*" das funktioniert so auch nicht.

Den Dateinamen findest du in der Variable "oFile.Name".
 
Scientist schrieb:
Der Code macht was er soll. Entweder tippst du die Endung falsch ein (klein, ohne Punkt) oder die Dateien ensprechen nicht denm Format.
"xls*" das funktioniert so auch nicht.

Den Dateinamen findest du in der Variable "oFile.Name".

Ich versteh die Welt nicht mehr. Wenn ich das Makro in ein .xlsx schmeiße, funktioniert es zwar mit xlsm und xls aber nicht mit LIKE xls*.

Und außerdem, ich muss das Makro-File aus dem Ordner schmeißen und von wo anders ausführen, ansonsten hört das Makro plötzlich auf und wird grau. Also mein Fehler war anscheinend die ganze Zeit dass ich das Auswerte-File im Auswerte-Ordner hatte...na toll...

Danke dir und auch für die Dateinamen, werde mich da später dranschmeißen...

LG
 
Ich denke mal Zeile 29 wird das Problem sein.
Dort wird der Pfad mit der zu ladenen Datei verglichen.
Der Vergleich sollte immer Wahr sein und damit probiert die Datei sich selbst zu oeffnen.

Nachtrag:
Den lass ich mal hier: Link
Alternativ koennte man auch per Makro einen Zellverweis setzen und anschließend das Ergebnis einfuegen.
Sollte beides schneller funktionieren, als jedes Mal die Datei zu oeffnen.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Instant_
Zurück
Oben