Makro, Excel, wenn keine Daten in einer csv Datei vorhanden

Arek100

Cadet 4th Year
Registriert
Nov. 2011
Beiträge
73
Hallo,

brauche Hilfe bei einem Makro.
Die Daten kommen aus einer csv Datei und werden zum besserer Übersicht in Excel (2016) dargestellt.

Aufbau:

Public Sub Query_Refresher()
Worksheets("A").Range("D4").Value = "Syncing"
Worksheets("B").Range("D4").Value = "Syncing"
Worksheets("C").Range("D4").Value = "Syncing"
Worksheets("D").Range("D4").Value = "Syncing"
Worksheets("E").Range("D4").Value = "Syncing"
ActiveWorkbook.RefreshAll
Worksheets("A").Range("D4").Value = FileDateTime("X:\A.csv")
Worksheets("B").Range("D4").Value = FileDateTime("X:\B.csv")
Worksheets("C").Range("D4").Value = FileDateTime("X:\C.csv")
Worksheets("D").Range("D4").Value = FileDateTime("X:\D.csv")
Worksheets("E").Range("D4").Value = FileDateTime("X:\E.csv")
End Sub

Problem ist wenn keine Daten in der csv Datei vorhanden sind erscheint eine Fehlermeldung, Spalte nicht gefunden (Logisch siehe nächste Zeile).
Wenn keine Daten vorhanden sind wird in der csv datei in der Spalte A1 der Text hinterlegt „keine daten“ sonst ist der Ausgangspunkt in A1 ein „!“.

Wie kann ich es einbauen das
a) die Aktualisierung für das aktuelle Sheet übersprungen wird wenn Text „keine daten“ gefunden wird
b) das bei den Nachfolgenden die Überprüfung auch stattfindet
c) Ist es möglich die Überschriften vom Makro zu erstellen wenn kein daten vorhanden sind und die Daten unter den Überschriften zu löschen, weil mit der Fehlermeldung der letzte stand in Excel sichtbar ist, was ja nicht stimmt mit der csv datei oder anstatt den Überschriften den Text zu erstellen „keine daten“ in einer bestimmten Zelle.

Zeilen mit Überschriften in Excel
Zeilen: F1 I G1 I H1 I usw.
Überschriften: ! I A I B I C usw.

In den vorherigen Zeilen werden verschiedene Summen gebildet aus den vorhandenen Daten ab Zeile F1

Danke
 
Du musst die Fehlerbehandlung selber in die Hand nehmen. Sprich selber programmieren.
Schreibe in die erste Zeile der SUB:
On Error Resume next

Und dann solltest Du die Fehler selber abfangen bzw. abfragen und darauf evtl. reagieren


Public Sub Query_Refresher()
on error resume next
err.clear

Worksheets("A").Range("D4").Value = "Syncing"
Worksheets("B").Range("D4").Value = "Syncing"
Worksheets("C").Range("D4").Value = "Syncing"
Worksheets("D").Range("D4").Value = "Syncing"
Worksheets("E").Range("D4").Value = "Syncing"
ActiveWorkbook.RefreshAll

err.clear
Worksheets("A").Range("D4").Value = FileDateTime("X:\A.csv")
if(err.number <> 0) then
msgbox"Ein Fehler ist aufgetreten:" & err.number &"(" & err.description &")")
end if

err.clear
Worksheets("B").Range("D4").Value = FileDateTime("X:\B.csv")
if(err.number <> 0) then
msgbox"Ein Fehler ist aufgetreten:" & err.number & "(" & err.description & ")")
end if

err.clear
Worksheets("C").Range("D4").Value = FileDateTime("X:\C.csv")
if(err.number <> 0) then
msgbox"Ein Fehler ist aufgetreten:" & err.number & "(" & err.description & ")")
end if

err.clear
Worksheets("D").Range("D4").Value = FileDateTime("X:\D.csv")
if(err.number <> 0) then
msgbox"Ein Fehler ist aufgetreten:" & err.number & "(" & err.description & ")")
end if

err.clear
Worksheets("E").Range("D4").Value = FileDateTime("X:\E.csv")
if(err.number <> 0) then
msgbox"Ein Fehler ist aufgetreten:" & err.number & "(" & err.description & ")")
end if

End Sub


DU könntest natürlich au jede Datei zuvor per Code kontrollieren, ob diese überhaupt Daten enthält.
Grob erklärt: Dazu musst du Ein Objekt der FileSystemObject Klasse (FSO) erstellen und dann die Dateien einzelnd öffnen und auslesen und nach Daten suchen. Das benötigt aber wesentlich mehr Code.

https://www.exceltrick.com/formulas_macros/filesystemobject-in-vba/
 
Folgendes Problem welches schon vorher bestand:

die Daten werden von den 5 csv’s gelesen und in Excel aufbereitet. Da die Daten sich stündlich ändern werden morgens die Daten aus den Excel Zellen in eine Tabelle namens History übertragen. Nun zum Problem:

Früher per Knopf mehrfach manuell ausgeführt, in der History die letzte belegte Spalte gelöscht, gespeichert, neu gestartet. Warum die Daten jetzt stimmten verstehe ich.

Aktuell:
Beim ersten Durchlauf werden die Daten nicht aktualisiert, deswegen habe ich hierfür eine Schleife gemacht mit 3 mal durchlaufen. Wenn fertig wird die Sub mit kopieren nach History ausgeführt.
Jetzt sind in den aufbereiteten Tabellen die Daten aktuell aber in der History Tabelle erscheinen nach wie vor die alten Daten, wie vor der ersten Aktualisierung. Wenn ich abspeichere, die letzte Spalte lösche und neu starte sind die Daten aktuell aber nur deswegen weil vor dem neustart die aktuellen Daten gezogen wurden :( siehe früher.

Leider kann ich mir keinen Reim daraus machen warum die Daten in der History nicht aktuell sind und warum nicht schon beim ersten Durchlauf die aktuellen Daten erscheinen.

Jemand eine Idee warum das passiert?
 
Hi,

siehe Anhang. Der untere Part ist ein wenig verkürzt da sich vieles wiederholt.
 

Anhänge

  • Sheet.txt
    2,4 KB · Aufrufe: 453
Und jetzt nochmal ganz kurz...welche Daten importierst du in dein Excelsheet? Doch nicht nur FileDateTime, oder? Warum werden die Daten nicht gleich beim ersten Durchlauf importiert? Irgendwas fehlt doch hier....
 
Hi,

in allen sheets steht:

Private Sub CommandButton1_Click()
Call Schleife
End Sub

und unter dem sheet this workbook

Private Sub Workbook_Open()
Worksheets("Overview").Activate
Call Schleife
End Sub

So ist das aufgebaut.

So wie ich das sehe werden die Daten aus den 5 csv dateien 1:1 übernommen und in Excel in 5 Tabellen-blättern zu besserer Übersicht dargestellt. Aus diesen Daten wird dann noch die History und eine Gesamtübersicht erstellt.
 
Das ist alles? Dann werden die Daten wohl "außerhalb" von VBA geladen...sorry...aber so wird dir da keiner helfen können...also ich zumindest nicht ;-)
 
OK, sorry mehr code ist nicht da. Da muss ich mich fragen warum trotzdem die Daten Aktualisiert werden.
 
Hast du evtl. die csv Dateien in der Tabelle importiert und werden die dann evtl. mittels ActiveWorkbook.RefreshAll aktualisiert? Eine Beispieldatei wäre jedenfalls hilfreich, damit das Verhalten nachvollzogen werden kann.
 
Genau so wirds sein und deswegen ist der Import auch verzögert und mit etwas Glück nach drei Schleifendurchläufen fertig :-)

Das kann man bestimmt eleganter lösen, aber dazu bräuchte man eben mehr Infos.
 
  • Gefällt mir
Reaktionen: simpsonsfan
Zurück
Oben