Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1528to1532
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
Textdatei als Endlosschleife einlesen (3)
05.12.2016 02:50:35
Rainer
Hallo alle zusammen,
ich war ein paar Tage nicht am Platz, daher kann ich erst jetzt antworten.
Hier noch die Links zu den beiden Vorgänger-Beiträgen:
https://www.herber.de/cgi-bin/callthread.pl?index=1523976
https://www.herber.de/cgi-bin/callthread.pl?index=1525132
Ich habe jetzt versucht Fenneks Code in den VBA Editor des IMPORT Sheet ("Code Anzeigen") einzufügen und mit "PLAY" (grüner Pfeil) zu starten. Es kommt aber eine Fehlermeldung "Fehler beim Kompilieren: Konstanten, Zeichenfolgen fester Länge, benutzerdefinierte Datenfelder und Declare-Anweisungen sind als Public-Elemente von Objektmodulen nicht zugelassen."
Ich bin ganz ehrlich und gebe zu, ich habe keine Ahnung was Excel mir versucht mitzuteilen.
Fennek, ist es möglich dass du den Code in die Excel-Datei einfügst?
https://www.herber.de/bbs/user/109418.xlsx
Außerdem wäre es super, wenn man
Datei(0) = "e:\spectro\MeasurePoint0\x.csv"
ersetzt mit
Datei(0) = Range("A1").Value (oder muss es .String sein?)
aber ist der Syntax richtig?
Vielen Dank schon mal im Vorraus!
Rainer

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Allgemeines Modul
05.12.2016 10:32:17
Fennek
Hallo Rainer,
der Code gehört in ein allgemeines Modul, NICHT in den "Kopf" des Sheets("Import").
Bitte suchen dir einen Kollegen,der sich mit vba gut genug auskennt, um solche Handling-Themen zu lösen.
mfg
AW: Allgemeines Modul
06.12.2016 16:37:31
Rainer
Hallo Fennek,
vielen Dank für den Tipp mit dem allgemeinen Modul. Habe meine VBA Fähigkeiten soweit gesteigert, dass es nun funktioniert. Ich habe nun 3 Buttons zum Dateinamen lesen, starten, abbrechen.
Ich habe noch "BolStop" ergänzt, um das Makro wieder stoppen zu können. Gefunden hier: https://www.herber.de/forum/archiv/880to884/883574_Laufendes_Makro_per_Commandbutton_beenden.html
Außerdem hat sich mein Excel beschwert, dass "Dim Sp()" und "Dim lr" gefehlt haben...
Aber noch eine Frage zum Import. Wenn das Makro läuft, dann öffnet es die jeweilige "x.csv" Quelldatei. Das erzeugt ein kurzes Bildschirmflackern (Datei wird geöffnet und sofort geschlossen), es flackert also 3 mal schnell im Interval von 2 Sekunden. Kann man da noch etwas optimieren?
Hier ist der Code:

Option Explicit
Public Datei(2) As String
Public SpeicherZeit(2) As Date
Public BolStop As Boolean
Sub Start()
'starten BEVOR das Messen beginnt
Dim i As Integer
Datei(0) = Range("B2")
Datei(1) = Range("B3")
Datei(2) = Range("B4")
For i = 0 To 2
SpeicherZeit(i) = FileDateTime(Datei(i))
Next i
BolStop = False
End Sub
Sub Einlesen()
Dim i As Integer
Dim WB As Workbook
Dim Import As Worksheet
Dim Sp()
Dim lr
Set Import = ThisWorkbook.Sheets("Import")
Debug.Print "neu"
Sp = Array(2, 5, 8)
For i = 0 To 2
If FileDateTime(Datei(i)) > SpeicherZeit(i) Then
Set WB = Workbooks.Open(Datei(i), , , , , , , , ",")
lr = WB.Sheets(1).Cells(Rows.Count, "A").End(xlUp).Row
WB.Sheets(1).Range(WB.Sheets(1).Cells(1, 1), WB.Sheets(1).Cells(lr, 2)).Copy Import. _
_
Cells(8, Sp(i))
Import.Cells(6, Sp(i)) = WB.Sheets(1).Name
SpeicherZeit(i) = FileDateTime(Datei(i))
WB.Close
Set WB = Nothing
End If
DoEvents
If BolStop = True Then Exit Sub
Next i
If Import.Cells(1, 1) = 0 Then Application.OnTime Now + TimeValue("00:00:02"), "Einlesen"
BolStop = False
End Sub
Sub Stopp_Click()
BolStop = True
End Sub

Anzeige
AW: Allgemeines Modul
06.12.2016 17:12:59
Fennek
Hallo Rainer,
schön, dass es geplappt hat.
Zu 1.: Viele "best practise"-Programmierer setzen am anfang "option explicit" und müssen dann jede Variable dimensionieren. Da es auch ohne geht, lasse ich es meistens weg, aber WENN man diese option setzt, muss man auch die Bedeutung kennen.
Zu 2.: Das Bildschirmflackern kann man abstellen. Aus dem Gedächtnis am Anfang des Codes
application.screenupdate = false
und am Ende wieder auf "true" zurücksetzen.
mfg
AW: Allgemeines Modul
06.12.2016 20:24:34
Werner
Hallo Fennek,
kleiner Flüchtigkeitsfehler, richtig muss es heißen:
Application.ScreenUpdating = False
..weiterer Code
Application.ScreenUpdating = True
Oder war es die Autokorrektur die mal wieder zugeschlagen hat?
Gruß Werner
Anzeige
AW: Allgemeines Modul
07.12.2016 15:28:42
Rainer
Hallo Fennek und Werner,
ja, so funktioniert es wunderbar, großes Dankeschön.
Aber ich mache mir noch sorgen um die Performance. Fennek hatte wohl den richtigen Gedanken. Selbst wenn ich alle Berechnungen entferne und nur das IMPORT Sheet ausführe, dann werden nur alle 10 ... 12 Sekunden neue Werte eingelesen. (Die Dateien aktualisieren alle 2 Sekunden, so werden nur max. 20% der Messwerte erfasst.)
Ist das durch die Performance von Excel / Makro "verschuldet"?
Gruß
Rainer

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige