Hallo RVD,
so - hier nun das versprochene Projekt.
Alles, was Du für's Ausprobieren brauchst, ist eine Form, darauf eine ListBox (List1), sowie ein CommandButton (cmdRead). Dann einfach noch den kompletten nachfolgenden Code in den Codeteil der Form einfügen. Der Ablauf dürfte aufgrund der Auskommentierung leicht verständlich sein. Ach ja: Ich bin davon ausgegangen, dass die Datei, welche die Namen enthält sich im Anwendungsverzeichnis des Projekts befindet und namen.txt heisst. Desweiteren bin ich davon ausgegangen, dass die Namen untereinander stehen (alse jeder Name = eine Zeile in der Datei).
<code>Option Explicit
<font color=green>' Schnelle Suche innerhalb einer ListBox</font>
Private Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg _
As Long, ByVal wParam As Long, ByVal lParam As _
String) As Long
Private Const LB_FINDSTRING = &H18F
<font color=green>' Prüft, ob ein Wert in einer ListBox enthalten ist
' und gibt als Ergebnis den ListIndex zurück
' (-1, wenn nicht vorhanden)</font>
Public Function IsInListe(Liste As ListBox, _
ByVal Item As String) As Integer
IsInListe = SendMessage(Liste.hwnd, _
LB_FINDSTRING, -1, Item)
End Function
<font color=green>' Liste zufällig mit Namen füllen</font>
Private Sub cmdRead_Click()
Dim strFilename As String
Dim arrNamen() As String
Dim strInhalt As String
Dim Index As Long
Dim nCount As Long
Dim lCount As Long
Dim F As Integer
<font color=green>' Anzahl Namen</font>
Const nMax = 40
<font color=green>' Liste zurücksetzen</font>
List1.Clear
<font color=green>' Dateinamen, welche die Namensliste enthält</font>
strFilename = App.Path & "
amen.txt"
<font color=green>' Alle Namen einlesen</font>
F = FreeFile
Open strFilename For Binary As #F
strInhalt = Space$(LOF(F))
Get #F, , strInhalt
Close #F
<font color=green>' Namen in ein Array spliten</font>
arrNamen = Split(strInhalt, vbCrLf)
<font color=green>' Anzahl Namen (Größe des Arrays)</font>
nCount = UBound(arrNamen)
<font color=green>' Zufällig nMax-Namen ermitteln und in der Listebox
' anzeigen</font>
<font color=green>' Zufallsgenerator zurücksetzen, so dass nicht
' jedesmal die gleichen Zufallszahlen ermittelt werden</font>
Randomize -Timer
<font color=green>' Zählervariable</font>
lCount = 0
Do Until lCount = nMax
<font color=green>' Zufallszahl</font>
Index = Int(nCount * Rnd)
<font color=green>' Prüfen, ob diese Zahl bereits ermittelt wurde</font>
If arrNamen(Index) <> "" Then
<font color=green>' Zahl wurde noch nicht "gezogen"
' Jetzt prüfen, ob der Namen bereits in der
' Liste vorhanden ist...</font>
If IsInListe(List1, arrNamen(Index)) < 0 Then
<font color=green>' ...noch nicht in der Liste
' also hinzufügen</font>
List1.AddItem arrNamen(Index)
End If
<font color=green>' Array-Element löschen - bedeutet, dass dieses
' Element bereits für die Liste berücksichtigt
' wurde</font>
arrNamen(Index) = ""
End If
<font color=green>' Zähler um eins erhöhen</font>
lCount = lCount + 1
Loop
<font color=green>' Fertig!</font>
MsgBox "Die Liste ist vollständig!"
End Sub</code> Viel Spaß damit!
Cu
Dieter |