UBound --> compile error expected: identifier

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]

Hallo,

also das Ausgeben des Wortes im Textfeld is kein Problem.

-))

OK, schön. Da soll aber nicht nur ein Wort stehen.

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

Wenn im Textfeld zum Beispiel steht:

Text1 Text2 Text3

Dann soll in das Label geschrieben werden:

Text2

Wenn da steht:

Text1 Text2 Text3 Text4

Dann soll in das Label:

Text3

Und bei:

Text1 Text2 Text3 Text4 Text5

Soll ebenfalls:

Text3

im Label erscheinen.

Aber bitte unter Verwendung einer Funktion, das ist ein Teil von dem, was Du üben und verstehen sollst.

Bei mir ist der Code übrigens 13 Zeilen lang, das nur als Anhaltspunkt. Es gibt noch andere Wege, dann können es auch ein paar Zeilen mehr werden. Eine andere Lösung, die mir einfällt wäre dann 15 Zeilen lang.

Gruß Rainer

OT Split und Vb5.0

Bei mir ist der Code übrigens 13 Zeilen lang, das nur als
Anhaltspunkt. Es gibt noch andere Wege, dann können es auch
ein paar Zeilen mehr werden. Eine andere Lösung, die mir
einfällt wäre dann 15 Zeilen lang.

Hallo Rainer,

nur als Hinweis, in VB5.0 ist Split() nicht vorhanden.

Gruß
Reinhard

Hallo Rainer,

wie ich sehe hat Rolf dennoch imenze Schwierigkeiten damit. Eine FileSuche zu realisieren ist ja relativ simple und fix gemacht. Aber eine Suche nach dem Inhalt naja das scheinbar nicht.

Was haelst du davon, wenn wir die Klasse um 2 Eigenschaften erweitern.

1.Eigenschaft -> SearchContent also True oder False was festlegt das der Inhalt des gefundenen Files durchsucht wird

2.Eigenschaft Content als String was den Suchstring festlegt.

Dann in der Klasse bevor das Ereignis MatchFound ausgelöst wird, einfach SearchContent abfragen und wenn das True ist, so durchsuchen wir das File, wird es gefunden dann lösen wir das Erergnis aus, wenn nicht dann nicht.

Sollte schnell realisiert werden und die Klasse und macht sie noch felexibler. Was haelst du davon und wenn ja implementierst du oder ich das ? Ist ja nur noch nen Zusammensetzen :wink:

MfG Alex

Hallo Alex,

wie ich sehe hat Rolf dennoch imenze Schwierigkeiten damit.
Eine FileSuche zu realisieren ist ja relativ simple und fix
gemacht. Aber eine Suche nach dem Inhalt naja das scheinbar
nicht.

ja, Rolf hat ein erhebliches Problem mit VB.

Was haelst du davon, wenn wir die Klasse um 2 Eigenschaften
erweitern.

1.Eigenschaft -> SearchContent also True oder False was
festlegt das der Inhalt des gefundenen Files durchsucht wird

2.Eigenschaft Content als String was den Suchstring festlegt.

Der String reicht doch aus. Ist er leer, muss nicht nach einem Inhalt gesucht werden.

Dann in der Klasse bevor das Ereignis MatchFound ausgelöst
wird, einfach SearchContent abfragen und wenn das True ist, so
durchsuchen wir das File, wird es gefunden dann lösen wir das
Erergnis aus, wenn nicht dann nicht.

Ja, korrekt.

Sollte schnell realisiert werden und die Klasse und macht sie
noch felexibler. Was haelst du davon und wenn ja
implementierst du oder ich das ? Ist ja nur noch nen
Zusammensetzen :wink:

Bist Du so nett und realisierst das? Ich habe Deinen Code nur oberflächlich betrachtet, wenn Du das selbst einbaust, geht das sehr viel schneller.

Nimm bitte die FAQ:3000 als Basis, ich ersetze den Code dort dann durch den Neuen.

Gruß Rainer

Hallo Reinhard,

nur als Hinweis, in VB5.0 ist Split() nicht vorhanden.

*gg* das ist dann die 15-Zeilen-Variante. :smile: Stimmt, ich habe Split verwendet.

Gruß Rainer

*gg* das ist dann die 15-Zeilen-Variante. :smile: Stimmt, ich habe
Split verwendet.

Hallo Rainer,

an sowas kann ich nicht vorbei :smile:

Ich habe diese Zeilenanzahlen: (Logo ohne Tricks mit Doppelpunkt o.ä.)
Vorausgestzt wird ein Leerzeichen als Trenner im Textfeld.

Achja, Replace kennt VB5.0 auch nicht.

Tabellenblatt: [Mappe1]!Tabelle2
 │ A │ B │ C │ D │ E │ F │
──┼─────────────────┼───────┼─────────────────┼───────────────┼────────────┼────────┤
1 │ Option Explicit │ Split │ Option Explicit │ comman1\_click │ Function() │ Zeilen │
──┼─────────────────┼───────┼─────────────────┼───────────────┼────────────┼────────┤
2 │ Ja │ Ja │ 1 │ 3 │ 5 │ 9 │
──┼─────────────────┼───────┼─────────────────┼───────────────┼────────────┼────────┤
3 │ Nein │ Ja │ 0 │ 3 │ 4 │ 7 │
──┼─────────────────┼───────┼─────────────────┼───────────────┼────────────┼────────┤
4 │ Ja │ Nein │ 1 │ 3 │ 8 │ 12 │
──┼─────────────────┼───────┼─────────────────┼───────────────┼────────────┼────────┤
5 │ Nein │ Nein │ 0 │ 3 │ 8 │ 11 │
──┴─────────────────┴───────┴─────────────────┴───────────────┴────────────┴────────┘
Benutzte Formeln:
F2: =SUMME(C2:E2)
F3: =SUMME(C3:E3)
F4: =SUMME(C4:E4)
F5: =SUMME(C5:E5)

A1:F5
haben das Zahlenformat: Standard

Tabellendarstellung erreicht mit dem Code in FAQ:2363

Gruß
Reinhard

Hallo Reinhard,

Ich habe es jetzt mit dem Befehlsumfang von VB5 gebaut, OK, es sind 18 Zeilen geworden. Ich bin mal auf Deine Lösung gespannt, bei mir ist die Funktion jetzt 14 Zeilen lang.

Ohne Doppelpunkte natürlich aber mit Komma beim ‚Dim‘. Leerzeilen nicht mitgezählt, aber in der ersten Zeile steht nur ‚Option Explicit‘, die zählt mit.

Wenn Code von Rolf kommt, poste ich meinen auch.

Gruß Rainer

Ich habe es jetzt mit dem Befehlsumfang von VB5 gebaut, OK, es
sind 18 Zeilen geworden. Ich bin mal auf Deine Lösung
gespannt, bei mir ist die Funktion jetzt 14 Zeilen lang.

Ohne Doppelpunkte natürlich aber mit Komma beim ‚Dim‘.
Leerzeilen nicht mitgezählt, aber in der ersten Zeile steht
nur ‚Option Explicit‘, die zählt mit.

Hallo Rainer,

ja, Komma bei Dim ist natürlich erlaubt.

Sorry, ich bin Exceltabellen gewöhnt, ich formulier es mal so:

Wenn ich Option Explicit nutze und Split() nutze so habe ich insgesamt 9 Codezeilen
Wenn ich Option Explicit nutze und Split() nicht nutze so habe ich insgesamt 12 Codezeilen
Wenn ich Option Explicit nicht nutze und Split() nutze so habe ich insgesamt 7 Codezeilen
Wenn ich Option Explicit nicht nutze und Split() nicht nutze so habe ich insgesamt 11 Codezeilen

Da ich ja Vb5.0 habe fiel es mir leicht nur VB% Befehle zu nutzen *gg*
Die Split()-Funktion bei mir ist ein Nachbau.

Gruß
Reinhard

Ok, nachdem ich nun Stunden damit verbrachte es über die Splitfunktion zu versuchen und es scheinbar nicht geht, werde ich noch n Weilchen brauchen.

Aber da es heute nur noch 20% beim Praktiker gibt, kann es gut Nachmittag werden bis ich die Lösung habe. :smile:)))))))

Gruß Rolf

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

Nachgefragt zum Thema…
…was mich interessiert :smile:

Hallo Alex,

ich habe dir soeben gemailt. Schau bitte auch in deinem Spamordner oder sonstwo ob sie ankam.

Mail mir dann zurück ob sie ankam, also nicht hier antworten.
Dann kann ich diesen Beitrag löschen, das macht dann dies Beitragsfolge unheimlich kürzer *hihi*

Btw: Ich finde alle Dateien die zwar vorhanden sind, aber nicht geöffnet werden konnten weil sie Lesefehler haben oder der Zugriff nicht gestattet ist weil sie grad offen sind oder Rechte im Netzwerk fehlen o.ä. sollten auch mit entsprechendem Hinweis gelistet werden.

Gruß
Reinhard

Moin, moin,

ne, sorry, krieg ich ned hin. Keinen blasen Dunst wo, wie, was, wann ich hier wo ansetzten soll.
Die Wörter zählen geht, dass bekomm ich auch hin.
Also den Inhalt der Text1 ausgeben und die Wörter der text1 zählen geht. Nur wie ich dann eben hier nur das mittlere bzw dritte Wort ausgeben…sorry, check ich nicht.

Gruß Rolf

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

Hallo Rolf,

schade, denn das Beispiel würde Dich zwingen, Variablen zu verwenden, Werte zu übergeben und die Eigenschaften von Steuerelementen richtig zu lesen und zu setzen.

Ich versuche es dann mal mit meinem Code und damit, den zu kommentieren.

Wenn Du auch nur ein Zeichen davon nicht verstehst, bitte ich um Rückfragen. Anders kommen wir nicht zu dem Punkt, an dem Du Anregungen hier aufgreifen und selbst einbauen kannst.

Hast Du Dir nun schon den Debugger angesehen? Alle Fragen, die Du bisher gestellt hast, hätte der Debugger beantworten können.

Gruß Rainer

Option Explicit ' "" And InStr(Trim(Zeile), " ") 0 Then
 'Bedingung: Der übergebene String muss mindestens ein Zeichen enthalten.
 'Der String muss mindestens ein Leerzeichen enthalten.
 'Damit ist sicher, daß da mehr as ein Wort steht und die Funktion arbeiten kann. 
 ReDim Po(0) ' 0 '


Der Code noch einmal ohne Kommentare:



    
    
    Option Explicit
    
    Private Sub Command1\_Click()
     Label1.Caption = GetMiddle(Text1.Text)
    End Sub
    
    Private Function GetMiddle(ByVal Zeile As String) As String
     Dim Po() As Integer, n As Integer
     If Trim(Zeile) "" And InStr(Trim(Zeile), " ") 0 Then
     ReDim Po(0)
     While InStr(Po(n) + 1, Trim(Zeile), " ") 0
     n = n + 1
     ReDim Preserve Po(n)
     Po(n) = InStr(Po(n - 1) + 1, Trim(Zeile), " ")
     Wend
     GetMiddle = Mid(Trim(Zeile), Po((n + 1) \ 2), Po((n + 1) \ 2 + 1) - Po((n + 1) \ 2))
     Else
     GetMiddle = "Fehler"
     End If
    End Function