Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1860to1864
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Daten einlesen

Daten einlesen
05.12.2021 23:31:00
Bernd
Hallo zusammen,
in einer Zusammenfassung, siehe auch Beispielmappe, versuche ich Werte einzelner Dateien einzulesen.
Wenn ich das jedoch so per Formel mache werden die Inhalte erst aktualisiert, wenn die Ursprungsdatei geöffnet wird.
Kann mir da wer helfen, wie ich die aus der geschlossenen Datei heraus bekomme.
Oder ists eurer Meinung nach besser die Datei zu öffnen, die Wert in ner Variable zu ermittelln und gleich einzutragen?
noch zum Hintergrund
Die Ursprungsdateien werden täglich automatisch als csv-Dateien erstellt und im Verzeichnis gespeichert.
Der Name entspricht dabei immer dem Tagesdatum mit Endung '_ein.csv'
Die Datei wird prinzipiell korrekt ermittelt, eingefügt sollte aber optimalerweise gleich der Wert und nicht ne Formel
aktuell sieht das Macro folgendermaßen aus:
  • 
    Sub Daten_einlesen()
    ispalte = Cells(6, Columns.Count).End(xlToLeft).Column
    lspalte = Cells(5, Columns.Count).End(xlToLeft).Column
    For i = ispalte To lspalte
    'Ermittlung letzte Spalte mit Bearbeitungskennzeichen = 'x'
    ispalte = Cells(6, Columns.Count).End(xlToLeft).Column
    'Generierung Dateiname aus aktuellem Spaltendatum
    Datum = Cells(5, ispalte + 1).Value
    file = ActiveWorkbook.Path & "\" & Format(Datum, "yyyymmdd") & "_EIN.csv"
    'Prüfung, ob Datei vorhanden
    If Dir(file)  "" Then
    '        MsgBox "Datei vorhanden" & file
    Cells(7, ispalte + 1).FormulaR1C1 = "='" & file & "'!R3C3"
    Cells(8, ispalte + 1).FormulaR1C1 = "='" & file & "'!R3C4"
    Cells(9, ispalte + 1).FormulaR1C1 = "='" & file & "'!R3C5"
    Cells(10, ispalte + 1).FormulaR1C1 = "='" & file & "'!R3C6"
    Cells(11, ispalte + 1).FormulaR1C1 = "='" & file & "'!R3C13"
    Cells(13, ispalte + 1).FormulaR1C1 = "='" & file & "'!R3C153"
    End If
    'Bearbeitungskennzeichen 'x' setzen, nachdem die Inhalte übernommen wurden
    Cells(6, ispalte + 1).Value = "x"
    'nächste Spalte...
    i = i + 1
    Next i
    End Sub
    

  • hier Beispielmappe
    https://www.herber.de/bbs/user/149605.xlsx
    Wäre nett, wenn mir dabei wer helfen kann.
    Danke vorab - gruß Bernd

    6
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Daten einlesen
    06.12.2021 05:58:03
    Hajo_Zi
    ich konnte Dein Makro nicht in der Datei finden, kann es daran liegen das bei mir eine "XLSX" Datei kein Makrio enthält?
    Ist die Berechnung nicht auf automatisch?
    GrußformelHomepage
    In diesem Forum bekomme nur selten eine Mailbenachrichtigung, weitere Antworten sind zufällig.
    AW: Daten einlesen
    06.12.2021 08:25:54
    Nepumuk
    Hallo Bernd,
    eine CSV-Datei ist eine reine Textdatei, die hat weder Zeilen noch Spalten. Die bekommt es erst wenn sie in Excel geöffnet wird. Darum funktioniert deine Formel ohne öffnen der Datei nicht.
    Gruß
    Nepumuk
    Anzeige
    AW: Daten einlesen
    06.12.2021 09:04:03
    volti
    Hallo Bernd,
    vielleicht kannst Du Deine Werte mittels der kleinen Zusatzcode ermitteln.
    Hierbei wird die CSV-Datei geöffnet und der entsprechende Zellwert zurückgegeben. Denn wie schon Nepumuk schrieb, kannst Du aus einer CSV-Datei nichts per Formel übrnehmen.
    Probeiere es einfach mal aus....
    Da das Array o-basiert ist, immer bei Zeilen- und Spaltenangabe eins abziehen oder Option Base verwenden.
    Code:

    [Cc]

    Sub Test() Dim iFF As Integer, vArr As Variant, vArr2 As Variant ' Dein Code iFF = FreeFile() Open file For Input As iFF vArr = Split(Input(LOF(iFF), #iFF), vbCrLf) Close iFF Cells(7, iSpalte + 1).Value = Split(vArr(2), ";")(2) Cells(8, iSpalte + 1).Value = Split(vArr(2), ";")(3) Cells(9, iSpalte + 1).Value = Split(vArr(2), ";")(4) ' Dein Code End Sub

    _________________________
    viele Grüße aus Freigericht 😊
    Karl-Heinz

    Anzeige
    AW: Daten einlesen
    06.12.2021 10:47:10
    Bernd
    Hallo zusammen,
    erstmal vielen Dank Euch.
    Ich hab daran gestern auch noch ein bisschen weiter rumgedoktert. Die Prolematik mit CSV.Datei wurde mir dann auch bewußt.
    Deshalb dann öffnen der Einzeltages-datei und kopieren.
    Der Code schaut jetzt folgendermaßen aus:
    Im Prinzip läuft das jetzt wie gewünscht, außer dass es nicht bis zum Ende durchläuft und ich absolut nicht feststellen kann, weshalb die Schleife am 21.10 beendet wird.
    Startet man es danach neu wird wieder nur ein Teil durchlaufen, aber nicht bis zum Ende. Im Debug-Modus dagegen ohne Probleme.
    Fällt euch vielleicht an der Schleif was auf?
    Falls notwendig, kann ich gerne nachher mal noch eine der CSV-Dateien hochladen
  • 
    Sub test()
    Set wbZiel = ActiveWorkbook
    ispalte = Cells(6, Columns.Count).End(xlToLeft).Column
    lspalte = Cells(7, Columns.Count).End(xlToLeft).Column
    For i = ispalte To lspalte
    'Ermittlung letzte Spalte mit Bearbeitungskennzeichen = 'x'
    ispalte = Cells(6, Columns.Count).End(xlToLeft).Column
    'Generierung Dateiname aus aktuellem Spaltendatum
    Datum = Cells(5, ispalte + 1).Value
    file = ActiveWorkbook.Path & "\" & Format(Datum, "yyyymmdd") & "_EIN.csv"
    'Prüfung, ob Datei vorhanden
    If Dir(file)  "" Then
    Workbooks.Open file, Local:=True
    'MsgBox "Datei vorhanden" & file
    Set wbtag = ActiveWorkbook
    'Werte übertragen
    'Anzahl der Stämme in Linie
    wbtag.ActiveSheet.Cells(3, 3).Copy
    wbZiel.Sheets("Zusammenfassung").Cells(7, ispalte + 1).PasteSpecial Paste:=xlPasteValues
    'Gesamtholzlänge Produktion
    wbtag.ActiveSheet.Cells(3, 4).Copy
    wbZiel.Sheets("Zusammenfassung").Cells(8, ispalte + 1).PasteSpecial Paste:=xlPasteValues
    'Rundholzvolumen pro Tag
    wbtag.ActiveSheet.Cells(3, 6).Copy
    wbZiel.Sheets("Zusammenfassung").Cells(9, ispalte + 1).PasteSpecial Paste:=xlPasteValues
    'Mittendurchmesser
    wbtag.ActiveSheet.Cells(3, 5).Copy
    wbZiel.Sheets("Zusammenfassung").Cells(10, ispalte + 1).PasteSpecial Paste:=xlPasteValues
    'Gesamtzeit
    wbtag.ActiveSheet.Cells(3, 13).Copy
    wbZiel.Sheets("Zusammenfassung").Cells(11, ispalte + 1).PasteSpecial Paste:=xlPasteValues
    'Pausen
    wbtag.ActiveSheet.Cells(3, 15).Copy
    wbZiel.Sheets("Zusammenfassung").Cells(13, ispalte + 1).PasteSpecial Paste:=xlPasteValues
    Application.DisplayAlerts = False
    wbtag.Close savechanges:=False
    Application.DisplayAlerts = True
    End If
    'Bearbeitungskennzeichen 'x' setzen, nachdem die Inhalte übernommen wurden
    Cells(6, ispalte + 1).Value = "x"
    'nächste Spalte...
    i = i + 1
    Next i
    End Sub
    

  • Oder gleich in der Mappe:
    https://www.herber.de/bbs/user/149612.xlsm
    Danke Euch, Grüsse Bernd
    Anzeige
    AW: Daten einlesen
    06.12.2021 11:02:41
    volti
    Hallo Bernd,
    mal abgesehen davon, dass da noch einiges optimiert werden kann, fällt mir folgendes auf:
    Vor Schleifenende erhöhst Du die i-Variable i = i + 1. Das ist überflüssig, denn die For-Schleife erhöht ja schon die Zählvariable.
    Mit deiner Variante überspringst Du ja immer eine Spalte. Das wird der Grund sein.
    Dann kannst Du auf Copy & Paste verzichten und die Werte direkt übernehmen:
    ' So
     wbZiel.Sheets("Zusammenfassung").Cells(7, iSpalte + 1).Value = wbtag.ActiveSheet.Cells(3, 3).Value
    ' besser
     With wbZiel.Sheets("Zusammenfassung")
       .Cells(7, iSpalte + 1).Value = wbtag.ActiveSheet.Cells(3, 3).Value
       .Cells(8, iSpalte + 1).Value = wbtag.ActiveSheet.Cells(3, 4).Value
       ' .....
     End With
    
    Ansonsten solltest Du mal meine gepostete Variante probieren.
    Gruß
    Karl-Heinz
    Anzeige
    AW: Daten einlesen
    06.12.2021 12:49:02
    Bernd
    Hallo zusammen,
    danke Karl-Heinz. Beides perfekt, läuft jetzt. vielen Dank Dir :)
    Die Übernahme aus der CSV heraus teste ich noch.
    Schöne Grüße Bernd

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige