Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1460to1464
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
Zahlen aus Textdateien in eine Userform
05.12.2015 09:04:14
Dennis
Hallo zusammen,
ich möchte aus einer Textdatei bestimmte Werte in die dafür vorgesehenen Label einer Userform einlesen.
Jetzt habe ich über Suchanfragen im Internet auch einige Beispiele gefunden aber ich schaffe es nicht zu begreifen wie ich die Werte direkt ansteuern kann.
(Das will einfach nicht in mein Schäd´l)
Ich habe als Beispiel eine Datei die wie folgt aussieht:
,Programmname,Zufall
,Abgelaufene Zeit,30:02
,Kalorien,367
,Entfernung ,5.2454 km
,Gestiegene Entfernung,58 Meter
,Durchschnittsgeschwindigkeit,10.4792 km/h
,Durchschnittstempo,5:44 / km
,Kalorien pro Stunde,733
,Art des Produkts,Laufband
,Datum und Zeit,11/26/2015 15:01:29
Für jede Zeile gibt es zwei Labels Bezeichnung/Zahlenwert
Der VBA-Code sieht bisher wie folgt aus und beschränkt sich in seiner Funktion auf das öffnen der Datei bzw auf das öffnen des Fensters zum öffnen der Datei ;-)
Die erste If-Bedingungen verstehe ich (Datei-öffnen)
Bei der Zweiten habe ich rumexperimentiert und muss mir eingestehen das ich nicht verstehe was ich gemacht habe.
Der Code unten bezieht sich noch auf Zellen.
Private Sub cmd_import_Click()
Dim strFileName As String, arrDaten, arrTmp, lngR As Long, lngLast As Long
Const cstrDelim As String = ";" 'Trennzeichen
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.Title = "Wo sind denn jetzt die Daten?"
.InitialFileName = "c:\test\*.csv"  'Pfad anpassen
If .Show = -1 Then
strFileName = .SelectedItems(1)
End If
End With
If strFileName  "" Then
Application.ScreenUpdating = False
Open strFileName For Input As #1
arrDaten = Split(Input(LOF(1), 1), vbCrLf)
Close #1
For lngR = 1 To UBound(arrDaten)
arrTmp = Split(arrDaten(lngR), cstrDelim)
If UBound(arrTmp) > -1 Then
With ActiveSheet
lngLast = .Cells(Rows.Count, 1).End(xlUp).Row + 1
lngLast = Application.Max(lngLast, 10)
.Cells(lngLast, 1).Resize(, UBound(arrTmp) + 1) _
= Application.Transpose(Application.Transpose(arrTmp))
End With
End If
Next lngR
End If
End Sub
Boar liest sich das alles überhaupt einer durch?
Danke für hilfe

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zahlen aus Textdateien in eine Userform
05.12.2015 12:52:05
Tino
Hallo,
kannst mal so versuchen. (nur an Deinem Bsp. getestet)
Ausgabe müsstest Du an Dein Programm anpassen!
Private Sub cmd_import_Click()
Dim sPath$
Dim varInhalt
Dim varSuche, ArErg()
Dim Regex As Object
Dim n&, nn&
  
varSuche = Array( _
"Abgelaufene Zeit", _
"Kalorien", _
"Entfernung", _
"Gestiegene Entfernung", _
"Durchschnittsgeschwindigkeit", _
"Durchschnittstempo", _
"Kalorien pro Stunde", _
"Datum und Zeit")
  

With Application.FileDialog(msoFileDialogFilePicker)
  .AllowMultiSelect = False
  .Title = "Wo sind denn jetzt die Daten?"
  .InitialFileName = "c:\test\*.csv"  'Pfad anpassen 
  If .Show = -1 Then
    sPath = .SelectedItems(1)
  End If
End With
If sPath = "" Then Exit Sub

varInhalt = Split(ReadTxT(sPath), vbCrLf)
Set Regex = CreateObject("Vbscript.Regexp")
With Regex
  .MultiLine = False
  .Global = True
  .IgnoreCase = True
  .Pattern = "\D+(\d.*\d).*"
  
    Redim Preserve ArErg(Lbound(varSuche) To Ubound(varSuche))
    For nn = Lbound(varSuche) To Ubound(varSuche)
        For n = Lbound(varInhalt) To Ubound(varInhalt)
            If InStr(varInhalt(n), varSuche(nn)) > 0 Then
                If .test(varInhalt(n)) Then
                    ArErg(nn) = Trim$(.Replace(varInhalt(n), "$1"))
                End If
            End If
        Next n
    Next nn

End With

'Ausgabe ********************************** 
For n = Lbound(ArErg) To Ubound(ArErg)
    Debug.Print varSuche(n), ArErg(n)
Next n
'****************************************** 
End Sub


Function ReadTxT(sPath$) As String
Dim F%, sInhalt$
F = FreeFile
Open sPath For Binary As #F
sInhalt = Space$(LOF(F))
Get #F, , sInhalt
Close
ReadTxT = sInhalt
End Function
Gruß Tino

Anzeige
eine etwas abgewandelte Version
05.12.2015 14:55:38
Tino
Hallo,
auch diese nur auf dein Beispiel getestet!
Private Sub cmd_import_Click()
Dim sPath$, strInhalt$
Dim varSuche, arSuchePattern(), ArErg()
Dim Regex As Object
Dim n&
  
'Ausgabe erfolg in dieser Reihenfolge 
varSuche = Array( _
"Datum und Zeit", _
"Kalorien", _
"Entfernung", _
"Gestiegene Entfernung", _
"Durchschnittsgeschwindigkeit", _
"Durchschnittstempo", _
"Kalorien pro Stunde", _
"Abgelaufene Zeit" _
)

Redim arSuchePattern(Lbound(varSuche) To Ubound(varSuche))
For n = Lbound(varSuche) To Ubound(varSuche)
    arSuchePattern(n) = "(.*" & Replace(varSuche(n), " ", "\D*") & "\D*)(\d.*\d)(.*)"
Next n

With Application.FileDialog(msoFileDialogFilePicker)
  .AllowMultiSelect = False
  .Title = "Wo sind denn jetzt die Daten?"
  .InitialFileName = "c:\test\*.csv"  'Pfad anpassen 
  If .Show = -1 Then
    sPath = .SelectedItems(1)
  End If
End With
If sPath = "" Then Exit Sub

'strInhalt = Split(ReadTxT(sPath), vbCrLf) 
strInhalt = ReadTxT(sPath)
Set Regex = CreateObject("Vbscript.Regexp")
With Regex
  .MultiLine = True
  .Global = True
  .IgnoreCase = True
  
  
    Redim Preserve ArErg(Lbound(arSuchePattern) To Ubound(arSuchePattern))
    For n = Lbound(arSuchePattern) To Ubound(arSuchePattern)
        .Pattern = arSuchePattern(n)
        If .test(strInhalt) Then
            ArErg(n) = Split(.Replace(strInhalt, "$1" & Chr(0) & "$2" & Chr(0) & "$3"), Chr(0))(1)
        End If
    Next n

End With

'Ausgabe ********************************** 
For n = Lbound(ArErg) To Ubound(ArErg)
    Debug.Print varSuche(n), ArErg(n)
Next n
'****************************************** 
End Sub


Function ReadTxT(sPath$) As String
Dim F%, sInhalt$
F = FreeFile
Open sPath For Binary As #F
sInhalt = Space$(LOF(F))
Get #F, , sInhalt
Close
ReadTxT = sInhalt
End Function
Gruß Tino

Anzeige
AW: eine etwas abgewandelte Version
07.12.2015 09:02:23
Dennis
Hallo Tino,
danke für deine Hilfe.
Ich habe noch Probleme den Code richtig zu verstehen, um ihn an meine Datei anzupassen.
Datei öffnen ist klar und ich sehe auch das er schleifen fährt, um sich jeden Werte zu holen.
Aber wie muss ich die Werte zu den Labeln anpassen?
Er splittet ja die Werte irgendwie auf und genau das sehe bzw begreife ich nicht.
Meine Label heißen derzeit z.B. lbl_dauer, lbl_distanz, lbl_kalorien ect.
Oder ist es in diesem Fall besser die Userform mit neutralen Labels zu bestücken die einfach lbl_01 usw benannt sind?
Das ist schon recht fortgeschritten und dort habe ich noch ganz schön viel Nachholbedarf.
Sorry und danke
Gruß
Dennis

Anzeige
AW: eine etwas abgewandelte Version
07.12.2015 09:26:47
Tino
Hallo,
in ArErg stehen die Werte.
zBsp. so
Label1.caption = ArErg (0)
Gruß Tino

329 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige