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

Arek100

Cadet 1st Year
Dabei seit
Nov. 2011
Beiträge
14
#1
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
 

Gameforce

Lt. Junior Grade
Dabei seit
Juli 2010
Beiträge
324
#2
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/
 

Arek100

Cadet 1st Year
Ersteller dieses Themas
Dabei seit
Nov. 2011
Beiträge
14
#4
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?
 

Janush

Lt. Junior Grade
Dabei seit
Mai 2008
Beiträge
413
#7
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....
 

Arek100

Cadet 1st Year
Ersteller dieses Themas
Dabei seit
Nov. 2011
Beiträge
14
#8
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.
 
Dabei seit
Feb. 2008
Beiträge
2.646
#13
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.
 

Janush

Lt. Junior Grade
Dabei seit
Mai 2008
Beiträge
413
#14
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.
 
Top