Hallo Rolf,
jo, das dachte ich auch.
Habe nun mal aus dem CheckInhalt eine Funktion gemacht …
Aber so greift er garnicht. Heisst, er findet so garnichts ,
bringt keine Meldung nienix!
ja, kann er auch nicht.
'Ereignis stellt uns die Klasse bereit
Private Sub nSearch_MatchFound(ByVal sFilename As String, _
ByVal sFilePath As String, _
ByVal sFiledate As Date, _
ByVal sFilesize As Long, _
ByVal sLastAccess As Date, _
ByVal sLastWrite As Date, _
ByVal sShortName As String)
Dim txtSuchBox As String
txtSuchbox ist also eine Variable. Eine Variable, die hier deklariert wird, das bedeutet, daß der Inhalt beim Aufruf dieser Prozedur auf „“ gesetzt wird.
Außerdem, das ist eine Prozedur (sub) keine Funktion. Etwas zurückgeben können nur Funktionen.
> Dim Suchbegriff As String
>
> 'Suchbegriff = txtSuchBox
Der Suchbegriff ist also „“.
> End Sub
> 'Listbox mit dem letzten Suchergebnis füllen
> Function CheckInhalt()
Function Checkinhalt? Du übergibst keine Werte und definierst nicht, wie das Ergebnis zurückgegeben werden soll, CheckInhalt ist als Varaiant deklariert.
> If CheckInhalt(sFilePath & sFilename, txtSuchBox) = True Then
Und hier ruft sich die Funktion rekursiv ohne Bedingung, ohne Abbruchbedingung auf. Das wird wohl eine Endosschleife geben und Dein Programm friert ein.
> ListBox2.AddItem sFilePath & sFilename
> Else
> MsgBox "nix da"
> End If
> DoEvents
>
>
> End Function
Puhhhh, echt ne schwere Geburt!
Das selbe Problem wir die letzten drei mal auch.
Du hast ein Steuerelement und willst es im Code noch deklarieren.
VB versteht: Du willst den Namen des Steuerelements als variable verwenden, denn Steuerelemente sind Klassen, die werden schon deklariert, wenn Du sie auf die Form legst.
Nur ist deieser Teil des Codes, den VB selbst schreibt nicht sichtbar, weil Du ihn ohnehin nicht verändern darfst.
Der Aufruf der Funktion gehört dann natürlich nicht in die Funktion.
Sieh Dir das Beispiel in dem die Funktion richtig arbeitet noch einmal an.
Da steht:
Private Function CheckInhalt(ByVal Datei As String, ByVal Suchstring As String) As Boolean.
Daraus hast Du gemacht:
Function CheckInhalt()
Das ist etwas völlig anderes und wird auch anders arbeiten, in Deinem Fall einfrieren, vermute ich.
Die Funktion ist fertig, die musst Du nicht verändern.
Aber ich habe das Gefühl, Du hast nicht verstanden, was sie tut, tun soll.
Du hast doch die Klasse, die Alex geschrieben hat.
Diese Klasse gibt Dir immer wenn sie etwas gefunden hat einen Pfad zurück.
Übergibst Du diesen Pfad zusammen mit einem Suchstring an die Funktion, dann öffnet die Funktion die Datei, prüft ob in der der Suchstring enthalten ist und gibt dann entweder ein ‚True‘ oder ein ‚False‘ zurück. Wenn Du ‚Pathfileexists‘ auch deklarierst, wie ich das getan habe und verwendest, dann gibt die Funktion auch ein ‚False‘ zurück, wenn die Datei nicht gefunden wurde.
Willst Du die Funktion nur zusammen mit der Klasse von Alex verwenden, kannst du die Prüfung, ob es den Pfad wirklich gibt weglassen, denn die Klasse gibt ja nur existierende Pfade zurück.
Gruß Rainer