UBound --> compile error expected: identifier

Servus Reinhard,

hier der Shell vom Excel -->

 If txtSpeicherPfad = "" Then
 MsgBox "Bitte Ordner anlegen"
 cmdOrdnerAnlegen.SetFocus
 Else
 If txtSuchBox = "" Then
 txtSuchBox = "\*"
 'txtSuchBox.SetFocus
 Else
 Set objShell = CreateObject("WScript.Shell")
 CommandLine = "%comspec% /c findstr /m /s /i /c:""" & Suchbegriff & """ """ & pfad & """ "

Set objExecObject = objShell.Exec(CommandLine)
 If Not objExecObject.StdOut.AtEndOfStream Then
 Filelist = Split(Trim(objExecObject.StdOut.ReadAll()), vbCrLf)
 For i = 0 To UBound(Filelist) - 1
 ListBox2.AddItem Filelist(i)
 Label54 = Filelist(i)
 Next
 Else
 MsgBox "Datei nicht gefunden"
 txtSuchBox.SetFocus
 End If
 End If
 End If

End Sub

Wenn du willst kann ich dir das gesamte Excel (mir Form etc…)zur Verfügung stellen.

Deinen Code bau ich mal ein und meld mich gleich wieder :smile:)

Gruß Rolf

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Reinhard,

In der Prozedur nSearch_MatchFound(…)
hast du ja vor dieser Codezeile

List1.AddItem sFilePath & sFilename

mittels des Codes von Rainer die Möglichkeit nur die dateien
auflisten zu lassen die im Inhalt deinen Suchbegriff haben.

danke für die Hilfe, genau so war’s gemeint! :smile:

Gruß Rainer

Servus Reinhard,

nun bringt er mir nen Type mismatch bei -->

'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
 Dim CheckInhalt As Variant
 Dim Suchbegriff As String
 'Listbox mit dem letzten Suchergebnis füllen
 Suchbegriff = txtSuchBox

If CheckInhalt(sFilePath & sFilename, Suchbegriff) = True Then
 ListBox2.AddItem sFilePath & sFilename
 Else
 MsgBox "nix da"
End If
 DoEvent

Ich glaub ich überspring das Jahr…so wie das anfängt! Mann mann mann :smile:))))

Gruß Rolf

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Rolf,

was soll

Dim CheckInhalt As Variant

werden? Du kannst nicht den Namen einer Funktion zusätzlich noch als Variable verwenden, das versuchst Du aber mit dieser Anweisung.

CheckInhalt ist eine Funktion, die musst/darfst Du nicht deklarieren.

Gruß Rainer

Hi Rainer,

war ned meine Idee, ich schwörs dir :smile:)
Wenn ich ohne Deklaration CheckInhalt verwende mekert er das CheckInhalt nicht deklariert ist! :frowning:
Macht mich echt kirre!

Gruß Rolf

Hi

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Rolf,

zunäachst mal wünsche ich dir, Rainer, Alex und natürlich allen anderen weltweit ein gesundes neues Jahr 2009.

Set objShell = CreateObject(„WScript.Shell“)

Naja, so richtig Excel-Vba ist das nicht :smile: Garantiert kann man das auch in VB aufrufen.
Wenn WSript das ist was man als WSH in Windows deaktivieren kann, wird gelegentlich empfohlen als Virenschutz, so klappt natürlich diese Lösung nicht wenn man die Datei weitergibt.

Danke für das Angebot mir die WScript-Lösung zuzuschicken, aber ich hab aus 2008 noch reichlich offene Baustellen.

Oder mit Vb/VbA eine Dos Batch erstellen mit der Zeile

FileInstr /M /S Probe C:*.* > C:\Ergebnis.txt

und diese mit

Erg=shell("cmd /c C:\Finde.bat,6)

o.ä starten.
Das habe ich übrigens vorhin getan (naja die Batch manuell erstellet und gestartet), mußte aber den Prozess abschießen weil er mir zu lange dauerte und ich weg mußte.

Deshalb bin ich jetzt gespannt bis zu deinen Code fertig hast *trommel* :smile:

Damit ich dann mal den VB Cde mit Dos Code vergleichen kann um festzustellen was schneller ist.
Ich tippe auf Dos, bin mir aber nicht sicher.

Deinen Code bau ich mal ein und meld mich gleich wieder :smile:)

Bei langen Beitragsfolgen geht für mich irgendwann die Übersicht völlig flöten.
Das Wichtigste aus dieser Folge steht ja positiver Weise in der FAQ:3000

Mal so als Idee, Rainer löscht diese Beitragsfolge, du stellst deine Anfrage neu ein, mit dem Betreff „VB: Viele Dateien nach Dateiinhalten durchsuchen“ oder noch passenderen Betreff um das Finden im Archiv zu erleichtern.

In der neuen Anfrage postest du die Prozedur wo der Fehler auftritt, gibst an in welcher Codezeile welcher Fehler auftritt.
Dazu lädst du dein Projekt mit FAQ:2861 o.ä. hoch, sodaß man das nicht nachbauen muß und was auch wichtig ist, jeder hier der interessiert ist, von der gleichen Ausgangsbasis ausgehen kann.

PS: Tipp, passend zum Thema, wenn du auch Excel-Vba Code schreibst, allen Code mit Filesearch drin kannst du in Excel2007 vergessen, XL2007 kennt Filesear ch nicht, nimm also gleich FSO o.ä.

Gruß
Reinhard

1 Like

Servus Reinhard,

-)))))

vollkommen 100%agree!

Ich kenn mich auch nicht mehr wirlich aus hier in den Posts …

Nur noch schnell zu Erklärung: Das Dos habe ich nur angewandt, da es eben Filesearch in Excel 2007 nicht mehr gibt! :smile:))
(also zweite Frage bzw Anmerkung schon erledigt)

Das Dos will ich auch garnimma, da in VB5 auch so gehen sollte.

So und nun kann der Fred zu und ich poste nen neuen, mit nem anständigen Header nochmal.

Gruß Rolf

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Rolf,

Ich kenn mich auch nicht mehr wirlich aus hier in den Posts

dito, bei langen Folgen hörts bei mir auf.

Wäre ich Sadist könnte ich dir ja bei einer deiner Nachfragen sagen:

„Alex hat dir doch geschrieben du sollst nSearch auf Empty setzen und dann mach einfach das was er da weiter schrieb.“

*schwergrins"

Nur noch schnell zu Erklärung: Das Dos habe ich nur angewandt,
da es eben Filesearch in Excel 2007 nicht mehr gibt! :smile:))
(also zweite Frage bzw Anmerkung schon erledigt)

Dann schau mal in die FAQ vom Excelbrett, da bat ich grad eben den FAQ-Betreuer einene neuen FAQ Eintrag für probleme mit XL2007 zu erstellen.
Dort ist dann über Links zu erfahren wie man Filesearch in XL2007 ersetzt u.v.m.

So und nun kann der Fred zu und ich poste nen neuen, mit nem
anständigen Header nochmal.

Nö, erst mußt du und Rainer das mit der FAQ im Excelbrett gelesen haben, dann kann er weg.
Ein FAQ-Eintraf hier der den gleichen Inhalt hat wie der FAQ Eintrag im Excelbrett ist doch okay.

Gruß
Reinhard

Hi Rolf,

war ned meine Idee, ich schwörs dir :smile:)
Wenn ich ohne Deklaration CheckInhalt verwende mekert er das
CheckInhalt nicht deklariert ist! :frowning:
Macht mich echt kirre!

Und Du hast die Funktion auch nicht vergessen?
Die Funktion und der Aufruf gehören in die Form, nicht in die Klasse.

Gruß Rainer

Hallo Reinhard,

Nö, erst mußt du und Rainer das mit der FAQ im Excelbrett
gelesen haben, dann kann er weg.

Die scheint noch nicht da zu sein.

Ein FAQ-Eintraf hier der den gleichen Inhalt hat wie der FAQ
Eintrag im Excelbrett ist doch okay.

Doppelt? Ne, ich glaube da bekomme ich Haue. :smile: Excelproblene passen hier auch nicht so Recht, wenn es nicht speziell um VBA geht. Das sehen wir uns erst mal an und reden dann eventuell noch einmal darüber.

Den Thread hier zu löschen hätte ich kein Problem. Die Klasse, die Alex geschrieben hat, steht ja in der FAQ.

Gruß Rainer

Hallo Rainer,

Nö, erst mußt du und Rainer das mit der FAQ im Excelbrett
gelesen haben, dann kann er weg.

Die scheint noch nicht da zu sein.

Naja, soviel Zeit daß der dortige FAQ-Betreuer meine Mail liest und dann schaut ob er dem zustimmt muß ja wohl schon sein :smile:)

Ein FAQ-Eintraf hier der den gleichen Inhalt hat wie der FAQ
Eintrag im Excelbrett ist doch okay.

Doppelt? Ne, ich glaube da bekomme ich Haue. :smile:

Geht das nicht daß in sich überlappenden Brettern in beiden Brettern die gleiche FAQ Nummer steht?
Oder zumindest in der jeweiligen FAQ ein Hinweis auf die andere FAQ?

Sicher, zu 95% könnten viele Anfragen in Programmierbrettern (zumindest in Excel bzw. Excel-Vba) direkt gelöst werden wenn es denn eine eindeutig klare Anfrage gäbe :frowning:

Dies klappt leider sehr oft nicht, dann entwickeln sich, letztlich unnötige Beitragsfolgen, mit Hin- und Her Fragen und Antworten bis endlich mal klar ist um was es eigentlich geht.

D.h., z.B. Beitragsfolge mit 30 Beiträgen, davon sind 22 unnötig.
Von daher ist es doch Klasse wenn man nach 2-3 mal Hin- und Her erkennt, so wird das nix, lade mal Beispielcode o.ä. hoch, damit man gezielt nach dem Fehler suchen kann.

Und dies betrifft ja verschiedene Programmierbretter.

Nun weiß nicht jeder wie man denn hier eine Datei hochladen kann so daß sie andere sich anschauen können.

Deshalb hast du ja netterweise FAQ:2681 eingerichtet. Nur von dieser FAQ weiß keiner wenn er wenn er in der FAQ vom C-Brett oder Delphi-Brett nach einer Hochladmöglichkeit sucht.

M.E. wäre es doch dann sinnvoll Hochladadressen in einer FAQ zu sammeln und diesen FAQ Eintrag allen anderen FAQs zur Verfügung zu stellen, wie auch immer.

Excelproblene
passen hier auch nicht so Recht, wenn es nicht speziell um VBA
geht. Das sehen wir uns erst mal an und reden dann eventuell
noch einmal darüber.

Du hast, como siempre, Recht, die paar Excelformeln die nicht mehr klappen gehören hier nicht in eine FAQ.

Aber grad im Vba Bereich ist Excel2007 sehr zickig. D.H. ggfs. mußt du all deinen Vba-Code umschreiben von deinen Excel-Mappen die in Excel97-Excel-2003 liefen.

Von daher passt m.E. eine FAQ die sich mit Neuerungen bei VBa-Code in Excel2007 Vba-Codes beschäftigt in dieses Brett was ja für VB und Vba „zuständig“ ist.

Excelneuerungen ohne VBa-Bezug gehören natürlich ins Excelbrett.

Den Thread hier zu löschen hätte ich kein Problem. Die Klasse,
die Alex geschrieben hat, steht ja in der FAQ.

Ja genau, ich und Rolf sehen es ja genauso.

Aber mache das bitte erst dann wenn ich deine Antwort hierauf gelesen habe :smile:

Gruß
Reinhard

Hallo Reinhard,

Naja, soviel Zeit daß der dortige FAQ-Betreuer meine Mail
liest und dann schaut ob er dem zustimmt muß ja wohl schon
sein :smile:)

ja klar, ich drängel ja auch gar nicht. :smile:

Geht das nicht daß in sich überlappenden Brettern in beiden
Brettern die gleiche FAQ Nummer steht?

Nein. Ich könnte bestenfalls eine FAQ schreiben, in der ich die andere FAQ zitiere … Dann ist es aber einfacher, Du zitierst die FAQ, egal in welchem Brett sie steht. Unazfgefordert siht mM nach ohnehin kaum mal Jemand in die FAQ.

Oder zumindest in der jeweiligen FAQ ein Hinweis auf die
andere FAQ?

Ja, das geht.

Von daher passt m.E. eine FAQ die sich mit Neuerungen bei
VBa-Code in Excel2007 Vba-Codes beschäftigt in dieses Brett
was ja für VB und Vba „zuständig“ ist.

Ja, natürlich. Änderungen in VBA gehören hier her, da hast Du natürlich Recht.

Gruß Rainer

Hallo Rainer,

Unazfgefordert siht mM nach ohnehin kaum mal Jemand in die
FAQ.

Ui, ungarische Tastatur oder Kopfwehnachwirkungen vom Silvesterabend? +grins*

Ist halt so, du kannst in die FAQ, quasi auch ins Archiv oder Brettbeschreibungen reinschreiben was du willst, liest eh keiner.
Bzw. es lesen quasi die Falschen :smile:

Oder zumindest in der jeweiligen FAQ ein Hinweis auf die
andere FAQ?

Ja, das geht.

Na, das ist doch ein Ansatz.

Das eigentliche Problem hast du erkannt, es ist shit egal was vielleicht ich, du, die Mods der anderen Bretter sich einen Kopf machen wie man denn den Anfragern das Hochladen von dateien erleichtert, egal wie die „normalen“ Anfrager lesen halt die FAQ nicht.

Ich denke, du könntest eine FAQ:3001 erstellen, in der steht, der Erste der hier reinklickt bekommt anwaltlich überwacht 1 Million € ausgezahlt.
Was passiert?
Gar nix erstmal.
ICH kassier das ab wenn ich mal wie üblich alle halbe Jahre Mal die FAQ durchgehe *smile*

Mein Bauch sagt, es wäre schön für jeden Neuuser der Probleme mit XL2007 hat in einer FAQ stünden Tipps wie er die löst.

Mein Kopf sagt, sinnlos in die FAQ was dazu zu schreiben, liest der Neuuser sowieso nicht (Altuser auch nicht).

Fazit, vergess mein Ansinnen.

Gruß
Reinhard

Hallo Reinhard,

Unazfgefordert siht mM nach ohnehin kaum mal Jemand in die
FAQ.

Ui, ungarische Tastatur oder Kopfwehnachwirkungen vom
Silvesterabend? +grins*

eher Neujahrsmorgen. :smile: Das Zeug hat wieder so gut geschmeckt …

Ich sehe aktuell die Funktion unserer FAQ etwas anders. :smile:

Wenn Du jemandem erklären möchtest, wie er eine Datei hochladen soll, musst Du nur die Nummer tippen. Manche oft wiederkehrende Frage ist so schneller beantwortet.

Daß der Frager die FAQ erst leist und die Antwort selbst findet, erwarte ich nicht, das betrachte ich aber auch nicht als Mangel.

Nur ist es eben dann egal, in welchem Brett die FAQ steht. :smile:

Gruß Rainer

Moin, moin,

klar, steht in der Form.
Wie ichs drehe und wende - Type mismatch :frowning:((((((

Ich kanns ned nachvollziehen, was er hier zu mekern hat.!!!

Gruß Rolf

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

Type mismatch :frowning:

ohne Code zu sehen, kann ich das nicht verstehen.

Typemismatch entsteht, wenn einer Variablen etwas zugewiesen werden soll, das nicht hineinpasst.

Vb ist da recht flexibel, wenn Du eine Zahl in eine Stringvariabe schreiben willst, wandelt VB das richtig um statt zu meckern.

Nur wenn Du Zeichen in Zahlen verwandeln möchtest, weiß VB nicht mehr weiter und muss den Fehler melden.

Wenn Du den Debugger verwendest, siehst Du in dem Moment, in dem der Fehler gemeldet wird, welcher Variablen der unpassende Wert zugewisen werden soll. Wie sieht die Zeile aus? Nur die eine Zeile! Wie sind die Variablen deklariert nd was steht in den Variablen? Was soll zugewiesen werden?

Gruß Rainer

Servus,

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!

'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
 Dim Suchbegriff As String

 'Suchbegriff = txtSuchBox
 End Sub
 'Listbox mit dem letzten Suchergebnis füllen
Function CheckInhalt()
If CheckInhalt(sFilePath & sFilename, txtSuchBox) = True Then
 ListBox2.AddItem sFilePath & sFilename
 Else
 MsgBox "nix da"
End If
 DoEvents


End Function

Puhhhh, echt ne schwere Geburt!
Gruß Rolf

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

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

Hallo Rolf,

bevor Du dieses Projekt selbst fertig bekommst, mit etwas Hilfe von uns, musst Du erst mal verstehen, was VB tut und den Debugger kennenlernen.

Ich schlage vor, wir fangen, von deinem Projekt völlig abgekoppelt, erst mal mit Grundlagen an.

Fang ein neues Projekt an.

Leg auf die Form einen Button, ein Label und eine Textbox.

Der Anwender, im Test also Du, soll in das Textfeld mehr als zwei Wörter eintragen.

Wird dann auf den Button geklickt, soll der Inhalt der TextBox an eine Funktion übergeben werden, die das mittlere Wort oder das Wort nach der Mitte, (je nachdem ob eine gerade oder ungerade Anzahl Wörter eingegeben wurde) zurückgeben und dieses Wort soll dann im Label angezeigt werden.

Wenn Du das hinbekommen hast, hast Du schon so viel von VB verstanden, daß Du weißt warum Deine bisherigen Codes alle nicht laufen.

Ich bin mal gespannt, wie Dein Code dazu aussieht.

Gruß Rainer

Hmmmm,

also das Ausgeben des Wortes im Textfeld is kein Problem.

-))

Aber so ganz genau weiss ich jetzt ned, wie da das mit dem mittleren Wort meinst.

Wenn 4 Wörter dann soll er mir welches ausgeben?

Gruß Rolf

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]