AW: nur Dateinamen in Listbox schreiben
12.08.2006 00:51:10
ingUR
Hallo, Wastl,
so wie ich das nachvollziehen kann, wählst Du eine Dateinamen aus der ListBox ListBox1 auf.
In diesem Objekt Listbox1 wird eine eine Liste verwaltet, deren Einträge der Reihe nach mit den ListBox1.ListIndex-Werten 0 bis ListBox1.ListCount durchnumeriert sind. Gefüllt wurde diese List in der Procedur Pfad_Click() durch die Anweisung Me.ListBox1.AddItem strFile.
Als erstes hättest Du den Prozedurcode der Funktion CurString in ein Modul des Projektes einzufügen.
Public Function CutString(QString As String) As String
Dim p As Integer
p = InStr(QString, ".")
If p > 0 Then
QString = Mid(QString, p + 1)
p = InStr(QString, ".")
If p > 1 Then QString = Left(QString, p - 1)
End If
If p > 0 Then CutString = QString Else CutString = ""
End Function
Nun hängt es von Deiner Aufgabenstellung ab, ob Du
(a) die Einzeleinträge von Nutzer manuell anwählen will ider
(n) alle Einträge ind der Liste automatisch bearbeiten möchtest.
Fall (a)
Durch die Auswahl eines Dateinamens durch Mausklick auf den betreffenden Eintag in der Liste, wird der Eingenschaftswert ListBox1.ListIndex gesetzt, gleichzeitig wird das Ereignis ListBox1_Click() ausgelöst und die entsprechende private Prozedur wird angesprungen.
Nur wenn die Ereignisprozedur Private Sub ListBox1_Click() noch nicht im Bereich der UserForm1 existiert, kann der nachfolgende Code direkt in den Programmbereich der Userform1 hineinkopiert werden:
Private Sub ListBox1_Click()
'auskommentierte Zeilen sind nur zu Verdeutlichung des Inhaltes
'der entsprechenden Eigenscchaftswerte der ListBox1 eingefügt und belassen
'Dim SelIdx As Long, SelFName As String
Dim Teil As String
'SelIdx = ListBox1.ListIndex
If ListBox1.ListIndex < 0 Then
MsgBox "Keine gültige Auswahl"
Exit Sub
End If
'SelFName = ListBox1.Text
Teil = CutString(ListBox1.Text)
End Sub
Andernfalls ist der Programmkörper zwischen den Begrenzungszeilen (Private Sub ListBox1() ... End Sub) in dei bestehende Prozedur an geeignete Stelle zu kopieren, und ist darauf zu achten, dass keine Namenskonflikte entstehen.
Damit hättest Du den Teil in Dein Programm eingebeit, der bisher durch den Programmteil Sub Test() erledigt wurde, also der Aufruf der Funktion CutString.
Wie Du das Ergebnis, als die Variable Teil behandelst hängt wieder von Deiner Aufgabenstellung ab. Legst Du z.B. auf der UserForm1 eine Bezeichnugsfeld mit dem Namen Label1an, so kannst Du das Egebnis der Caption-Eigenschft in der Prozefur Private Sub ListBox1_Click() zuweisen:
Label1.Caption = Teil
oder eben direkt - bei Streichung der Zeile Zeril = CutString( .... ) -
Label1.Caption = CutString(ListBox1.Text)
Anders sehen die Anweisungen aus, wenn der gefundene Teilstring in eine anders Objekt (Datenfeld, Listbox, ...) gespeicht werden soll. Es hängt auch davon ab, wo das Ergenis im Programm noch gebraucht wird.
Fall (b)
Sollen alle Einträge der Liste der ListBox1 automatisch untersucht werden, dann kann direkt im (DO ... LOOP)-Block der Prozedur Private Sub Pfad_Click() die Arbeit erledigt werden:
Do While Len(strFile) > 0
Me.ListBox1.AddItem strFile, i
Teil = CutString(strFile) '***
'hier ist noch nachzutragen, wo die Ergebnisse
'eines jeden Schleifendurchgangs gespeichert
'bzw. angezeigt werden sollen.
i = i + 1
strFile = Dir
Loop
Soweit die Schritte zum Einbinden und Aufrufen der Funktion in Deine Projekt.
Gutes Gelingen nd Gruß,
Uwe