Microsoft Excel

Herbers Excel/VBA-Archiv

Textfile aus Userform Textboxen erzeugen


Betrifft: Textfile aus Userform Textboxen erzeugen
von: Pascal
Geschrieben am: 16.04.2019 08:51:07

Guten Morgen miteinander

Dank der grossartigen Hilfe vergangene Woche – hier im Forum – konnte ich zwischenzeitlich eine neue
Beispielsdatei zusammenbauen. (siehe ZIP im Anhang).

http://www.herber.de/bbs/user/129174.zip

Durch Klick auf die Schaltfläche Öffnen wähle ich die Textdatei aus, welche dann in die einzelnen Textfelder eingelesen wird.
Dies funktioniert soweit perfekt.
Im Code (welchen ich von einem sehr netten, hilfsbereiten Forumanen hier erhalten habe) steht eine STOP – Zeile. Um den Code
Schritt-für-Schritt laufen zu lassen.

Nun möchte ich natürlich das Schrittweise "Blättern" in den Datensätzen mittels dem auf der UserForm angeordneten Scrollbar bewältigen.
Daher meine erste Frage:
Muss ich den Code direkt hinter diesen Scrollbar setzen oder kann ich diesem einen Code unter Scrollbar_Change definieren, welcher dann
das schrittweise vor-/zurückblättern durch die Datensätze im Textfile ermöglicht?

Weiter erlaub ich mir zu fragen, wie ich denn Daten in ein neues, anzulegendes Textfile schreiben kann.
Ich meine… durch die Schaltfläche "Speichern" möchte ich die Werte welche ich aktuell in den Textfiles stehen habe, in eine Textdatei (gleicher Aufbau wie im Beispiel) schreiben und speichern.

Herzlichen Dank für Eure Unterstützung und Hilfe

Grüsst Euch: Pascal

  

Betrifft: AW: Textfile aus Userform Textboxen erzeugen
von: Pascal
Geschrieben am: 16.04.2019 09:00:38

… das Textfile kann ich schon mal so erzeugen:

Private Sub CommandButton3_Click()
Dim strTextNew As String
Open "c:\Temp\DATEI1.txt" For Output As #1
strTextNew = TextBox1.Text & ";" & TextBox2.Text
Print #1, strTextNew
Close #1
End Sub
… da ich aber total 23 TextBoxen auslesen und ins Textfile schreiben muss … ginge das evt. auch anders ?


  

Betrifft: AW: Textfile aus Userform Textboxen erzeugen
von: Nepumuk
Geschrieben am: 16.04.2019 12:11:55

Hallo Pascal,

teste mal:

Private Sub CommandButton3_Click()
    Dim strTextNew As String
    Dim lngIndex As Long
    For lngIndex = 1 To 23
        strTextNew = Controls("TextBox" & CStr(lngIndex)).Text & ";"
    Next
    strTextNew = Left$(strTextNew, Len(strTextNew) - 1)
    Open "c:\Temp\DATEI1.txt" For Output As #1
    Print #1, strTextNew
    Close #1
End Sub

Gruß
Nepumuk


  

Betrifft: strTextNew - ist nachher leer-oder? Gruß
von: robert
Geschrieben am: 16.04.2019 12:41:54




  

Betrifft: AW: strTextNew - ist nachher leer-oder? Gruß
von: Nepumuk
Geschrieben am: 16.04.2019 12:58:39

Hallo robert,

danke für den Hinweis.

@Pascal

so natürlich:

Private Sub CommandButton3_Click()
    Dim strTextNew As String
    Dim lngIndex As Long
    For lngIndex = 1 To 23
        strTextNew = strTextNew & Controls("TextBox" & CStr(lngIndex)).Text & ";"
    Next
    strTextNew = Left$(strTextNew, Len(strTextNew) - 1)
    Open "H:\Temp\DATEI1.txt" For Output As #1
    Print #1, strTextNew
    Close #1
End Sub

Gruß
Nepumuk


  

Betrifft: AW: strTextNew - ist nachher leer-oder? Gruß
von: Pascal
Geschrieben am: 16.04.2019 13:36:38

genau ! funktioniert bestens
vielen herzlichen dank!

… jetzt such ich nur noch eine Funktion um durch die einzelnen Datensätze im Textfile blättern zu können mittels Scrollbar auf der UserForm
vorwärts - rückwärts …


  

Betrifft: AW: strTextNew - ist nachher leer-oder? Gruß
von: Nepumuk
Geschrieben am: 16.04.2019 13:45:35

Hallo Pascal,

mit einer TextBox oder wie? Bitte etwas präziser!

Gruß
Nepumuk


  

Betrifft: AW: strTextNew - ist nachher leer-oder? Gruß
von: Pascal
Geschrieben am: 16.04.2019 14:14:29

Hallo Nepumuk
siehe in meiner Beispiels-Datei. Dort gibt's ja auf der UserForm bereits eine Scrollbar.
mittels dieser Scrollbar möchte ich durch das Textfile welches ich vorher geöffnet habe blättern können.
(zeile vorwärt, zeile rückwärts)
… in den Textfeldern auf der UserForm sollen dabei die Textfelder immer die Datensätze - bezogen auf die aktuelle Zeile im Textfile anzeigen.

… hoffe, man versteht wie ich meine ?


  

Betrifft: AW: strTextNew - ist nachher leer-oder? Gruß
von: Nepumuk
Geschrieben am: 16.04.2019 15:03:52

Hallo Pascal,

teste mal:

Option Explicit

Private mstrArray() As String

Private Sub CommandButton4_Click()
    Hide
End Sub

Private Sub CommandButton5_Click()
    Dim intDatei As Integer
    Dim sFile As String
    Dim strText As String
    Dim inputArray
    Dim lRecCnt As Long
    Dim lXArray As Long
    sFile = Application.GetOpenFilename("Text Dateien (*.txt), *.txt")
    If sFile = "Falsch" Then Exit Sub
    intDatei = FreeFile()
    Open sFile For Input As #intDatei
    Do Until EOF(intDatei)
        Line Input #intDatei, strText
        Redim Preserve mstrArray(lRecCnt)
        mstrArray(lRecCnt) = strText
        lRecCnt = lRecCnt + 1
        inputArray = Split(Replace(strText, Chr$(34), vbNullString), ";")
        For lXArray = 0 To UBound(inputArray) - 1
            If lRecCnt = 1 Then
                Controls("Label" & CStr(lXArray + 1)) = inputArray(lXArray)
            Else
                Controls("TextBox" & CStr(lXArray + 1)) = inputArray(lXArray)
            End If
        Next lXArray
    Loop
    Close #intDatei
    With ScrollBar1
        .Min = 1
        .Max = lRecCnt - 1
    End With
End Sub

Private Sub ScrollBar1_Change()
    Dim ialngIndex As Long
    Dim avntTemp As Variant
    avntTemp = Split(Replace(mstrArray(ScrollBar1.Value), Chr$(34), vbNullString), ";")
    For ialngIndex = LBound(avntTemp) To UBound(avntTemp)
        Controls("TextBox" & CStr(ialngIndex + 1)) = avntTemp(ialngIndex)
    Next
End Sub

Private Sub UserForm_Initialize()
    Caption = "ABW Textfile Creator"
    Frame1.Caption = "Beispiels-File"
    CommandButton1.Caption = "Neu"
    CommandButton2.Caption = "Löschen"
    CommandButton3.Caption = "Speichern"
    CommandButton4.Caption = "Schliessen"
    CommandButton5.Caption = "Öffnen"
End Sub

Gruß
Nepumuk


  

Betrifft: AW: strTextNew - ist nachher leer-oder? Gruß
von: Pascal
Geschrieben am: 16.04.2019 15:31:06

Hallo Nepumuk
das ist ja irre komplex und interessant :-)

Leider aber scheint irgendwo noch ein Fehler drin zu sein...

Das Ding bleibt mit Fehlermeldung stehen: <>
und bleibt auf der Zeile ReDim Preserve mstrArray(lRecCnt) stehen. (in Private Sub CommandButton5_Click()

… oder hab ich was falsch gemacht oder übersehen?


  

Betrifft: AW: strTextNew - ist nachher leer-oder? Gruß
von: Nepumuk
Geschrieben am: 16.04.2019 15:50:25

Hallo Pascal,

hast du auch ganz oben unter "Option Explicit" (Das sollte immer die erste Zeile in einem Modul sein) auch diese Zeile eingefügt:

Private mstrArray() As String

Gruß
Nepumuk


  

Betrifft: AW: strTextNew - ist nachher leer-oder? Gruß
von: Pascal
Geschrieben am: 16.04.2019 15:53:57

:-)
da war tatsächlich der Fehler

vielen, vielen, herzlichen Dank für Deine grossartige Hilfe!
jetzt heissts erstmals … testen, lernen, testen, lernen....


  

Betrifft: AW: strTextNew - ist nachher leer-oder? Gruß
von: Pascal
Geschrieben am: 17.04.2019 12:56:06

Hallo Nepumuk

zwischenzeitlich hab ich Deinen tollen Code in meine Datei implementiert und ausgiebig getestet.
funktioniert perfekt !

jetzt fehlt mir noch ne Funktion (Button) mittels dem ich die aktuell angezeigte Datenzeile (aus dem Textfile) löschen kann.

d.h.
ich wähle ja über den Scrollbar aus, welche Dateizeile ich in den TextBoxen auf der Userform angezeigt haben möchte.
jetzt such ich nach einer Möglichkeit, wie ich (durch Klick auf einen zusätzlichen Button) genau eben diesen einen Datensatz aus dem Textfile rauslöschen kann.

(ich hoffe, man versteht was ich meine?)

geht das?


  

Betrifft: AW: strTextNew - ist nachher leer-oder? Gruß
von: Nepumuk
Geschrieben am: 17.04.2019 16:20:26

Hallo Pascal,

teste mal:

Option Explicit

Private mastrArray() As String
Private mvntFile As Variant

Private Sub CommandButton2_Click()
    Dim lngCount As Long, ialngIndex As Long
    Dim intFileNumber As Integer
    Dim strText As String, astrArray() As String
    If Not IsEmpty(mvntFile) Then
        intFileNumber = FreeFile
        Open mvntFile For Input As #intFileNumber
        Do Until EOF(intFileNumber)
            Line Input #intFileNumber, strText
            If lngCount <> ScrollBar1.Value Then
                Redim Preserve astrArray(ialngIndex)
                astrArray(ialngIndex) = strText
                ialngIndex = ialngIndex + 1
            End If
            lngCount = lngCount + 1
        Loop
        Close #intFileNumber
        Open mvntFile For Output As #intFileNumber
        Print #intFileNumber, Join(astrArray, vbCr)
        Close #intFileNumber
        Call ReadFile
    Else
        Call MsgBox("Keine Datei ausgewählt.", vbExclamation, "Hinweis")
    End If
End Sub

Private Sub CommandButton4_Click()
    Hide
End Sub

Private Sub CommandButton5_Click()
    mvntFile = Application.GetOpenFilename("Text Dateien (*.txt), *.txt")
    If mvntFile <> False Then Call ReadFile
End Sub

Private Sub ScrollBar1_Change()
    Dim ialngIndex As Long
    Dim avntTemp As Variant
    avntTemp = Split(Replace(mastrArray(ScrollBar1.Value), Chr$(34), vbNullString), ";")
    For ialngIndex = LBound(avntTemp) To UBound(avntTemp)
        Controls("TextBox" & CStr(ialngIndex + 1)) = avntTemp(ialngIndex)
    Next
End Sub

Private Sub UserForm_Initialize()
    Caption = "ABW Textfile Creator"
    Frame1.Caption = "Beispiels-File"
    CommandButton1.Caption = "Neu"
    CommandButton2.Caption = "Löschen"
    CommandButton3.Caption = "Speichern"
    CommandButton4.Caption = "Schliessen"
    CommandButton5.Caption = "Öffnen"
End Sub

Private Sub ReadFile()
    Dim intFileNumber As Integer
    Dim strText As String
    Dim vntArray As Variant
    Dim lngCounter As Long
    Dim lngIndex As Long
    intFileNumber = FreeFile
    Open mvntFile For Input As #intFileNumber
    Do Until EOF(intFileNumber)
        Line Input #intFileNumber, strText
        Redim Preserve mastrArray(lngCounter)
        mastrArray(lngCounter) = strText
        lngCounter = lngCounter + 1
        vntArray = Split(Replace(strText, Chr$(34), vbNullString), ";")
        For lngIndex = 0 To UBound(vntArray) - 1
            If lngCounter = 1 Then
                Controls("Label" & CStr(lngIndex + 1)) = vntArray(lngIndex)
            Else
                Controls("TextBox" & CStr(lngIndex + 1)) = vntArray(lngIndex)
            End If
        Next
    Loop
    Close #intFileNumber
    With ScrollBar1
        .Min = 1
        .Max = lngCounter - 1
        .Value = 1
    End With
End Sub

Gruß
Nepumuk


  

Betrifft: AW: strTextNew - ist nachher leer-oder? Gruß
von: Pascal
Geschrieben am: 18.04.2019 06:40:58

Guten Morgen

ich sage schon mal vorab TAUSEND DANK für Deinen Beispiels-Code.
Diesen werde ich jetzt dann gleich mal in mein File einbauen, testen und anschauen.
Hab einen schönen Tag und nochmals tausend Dank

Pascal


  

Betrifft: AW: Textfile aus Userform Textboxen erzeugen
von: Pascal
Geschrieben am: 16.04.2019 13:34:51

Hallo Nepumuk
geil! funktioniert perfekt! vielen Dank !