PDA

Vollständige Version anzeigen : Pfad/Feldinhalt prüfen


Broom
29.10.2011, 19:49
Hallo,
iin meinem Formular gibt es das Feld „ThemaPfad“ wo der Pfad zu einem Ordner auf dem Laufwerk eingegeben werden kann. Mit der dahinter liegenden Schaltfläche soll der Ordner im Windows-Explorer geöffnet werden.
Beim Anklicken der Schaltfläche soll zuerst geprüft werden ob das Feld Zeichen enthält, wenn es leer ist soll der Hinweis „Keine Pfadangabe vorhanden!“ gegeben und der Vorgang abgebrochen werden.
Ist das Feld gefüllt, soll geprüft werden ob der eingetragene Pfad/Ordner existiert und geöffnet werden, wenn nicht soll der Hinweis „Pfad existiert nicht“ angezeigt werden.
Folgenden Code verwende ich:

If IsNull(Me.ThemaPfad.Value) Then MsgBox "Keine Pfadangabe vorhanden !"
If Dir("ThemaPfad") <> "" Then MsgBox "Pfad existiert nicht !"
End If
End If
Application.FollowHyperlink ThemaPfad


Ich erhalte jedoch den Fehlerhinweis „End If ohne If-Block“. Was habe ich da falsch gemacht?
Gruß
Heinrich

gpswanderer
29.10.2011, 20:00
Hallo,
entweder alle If einzeilig oder mehrzeilig.
Also entweder so:

If IsNull(Me.ThemaPfad) Then MsgBox "Keine Pfadangabe vorhanden !"
If Dir("ThemaPfad") <> "" Then MsgBox "Pfad existiert nicht !"
Application.FollowHyperlink ThemaPfad
oder so:
If IsNull(Me.ThemaPfad) Then
MsgBox "Keine Pfadangabe vorhanden !"
End If
If Dir("ThemaPfad") <> "" Then
MsgBox "Pfad existiert nicht !"
End If
Application.FollowHyperlink ThemaPfad

Value ist hier überflüssig.

Claypool
29.10.2011, 20:01
Hallo!

Mach die beiden "End If" weg. Die brauchst du nur dann, wenn du nach dem "Then" eine zweite Zeile innerhalb eines "If"-Blocks beginnst.
Steht alles in einer Zeile ist das nicht nötig.

Grüße
Ingo

ebs17
29.10.2011, 20:09
Ich würde vor allem prüfen, um nur sinnvolle Aktionen auszuführen.
MsgBox und dann weiter, als wäre nichts gewesen, ist ja etwas unorganisiert.
Ein verzeichnis sollte man als verzeichnis prüfen:
If Len("" & Me!ThemaPfad.Value) = 0 Then
MsgBox "Keine Pfadangabe vorhanden !"
End Sub
End If
If Dir("ThemaPfad", vbDirectory) > vbNullstring Then
MsgBox "Pfad existiert nicht !"
End Sub
End If
Application.FollowHyperlink ThemaPfad

entweder alle If einzeilig oder mehrzeilig
Das ist es aber auch nicht. Jede If-Anweisung zählt für sich.

gpswanderer
29.10.2011, 22:06
Zitat:
entweder alle If einzeilig oder mehrzeilig
Das ist es aber auch nicht. Jede If-Anweisung zählt für sich.
Stimmt, hatte ich auch so gemeint. Das hätte ich sorgfältiger formulieren sollen.

Broom
30.10.2011, 16:24
Hallo Klaus.
es funktioniert nicht richtig, ich erhalte folgende Fehlerhinweis:
Ordner nicht vorhanden: Laufzeitfehler ’490’, Die angegebene Datei konnte nicht geöffnet werden.
Feld leer: Hinweis „Keine Pfadangabe vorhanden!“, nach Klick auf OK -> Laufzeitfehler ’94’, Unzulässige Verwendung von Null.

Hallo Eberhard,
auch bei deiner Anweisung erhalte ich folgenden Fehlerhinweis:
Ordner nicht vorhanden: Laufzeitfehler ’490’, Die angegebene Datei konnte nicht geöffnet werden.
Feld leer: Laufzeitfehler ’94’, Unzulässige Verwendung von Null.

Gruß
Heinrich

Thomas Möller
30.10.2011, 16:40
Hallo Heinrich,

ich denke, Du musst, falls der Ordner nicht angegeben wurde oder nicht existiert noch die weitere Verarbeitung der Prozedur beenden:

If IsNull(Me.ThemaPfad) Then
MsgBox "Keine Pfadangabe vorhanden !"
Exit Sub
End If
If Dir("ThemaPfad") <> "" Then
MsgBox "Pfad existiert nicht !"
Exit Sub
End If
Application.FollowHyperlink ThemaPfad

HTH

Broom
30.10.2011, 17:43
Hallo Thomas,
das sieht schon besser aus, aber irgendwas stimmt mit dem
If Dir("ThemaPfad") <> "" Then
nicht. Exisitiert der Pfad/Ordner nicht erscheint der Fehler :
Laufzeitfehler ’490’, Die angegebene Datei konnte nicht geöffnet werden.
Gruß
Heinrich

ebs17
30.10.2011, 17:56
Ein verzeichnis sollte man als verzeichnis prüfen
Suche mal in diesem Deinen Thema den bereits vorhandenen Hinweis.

Liest Du Anworten, die Du erhältst? Mit Lesen meine ich verstehend lesen.

Broom
30.10.2011, 18:21
Hallo Eberhard,
wenn ich etwas nicht verstehe was ich lesen, dann nicht bewußt.
Ich wollte das erste Kriterium (Feld gefüllt) prüfen. Wenn leer dann Hinweis geben und Abbruch. Wenn gefüllt, dann
zweites Kriterium (Existiert Pfad) prüfen. Wenn nicht vorhanden, Hinweis geben und Abbruch. Wenn existent, dann öffnen.
Was verstehe ich da falsch?
Gruß
Heinrich

gpswanderer
30.10.2011, 18:29
Hallo,
dann lies mal #4 von Eberhard genau.

Broom
30.10.2011, 19:02
Hallo,
ich habe es mir mehrmals durchgelesen und ehrlich gesagt, ich bin nicht schlauer geworden. Ich weiß zwar was ich will und habe den Code zigmal umgestellt, jedoch alles ohne Erfolg. Es ist wohl nicht möglich. Nochmals Danke für Eure Hilfe.
Gruß
Heinrich

gpswanderer
30.10.2011, 19:20
Hallo,
dann zeige doch bitte mal alles, was Du jetzt hast.
Alle Codezeilen, vollständig, kopieren nicht abschreiben.

ebs17
30.10.2011, 19:24
ich habe es mir mehrmals durchgelesen
... und eine Codehervorhebung in Blau wird nicht bemerkt?

Broom
30.10.2011, 19:43
Hallo Eberhard,
sicherlich habe ich "vbDirectory" in blau gesehen. Es sagt mir aber nichts.
Gruß
Heinrich

Broom
30.10.2011, 19:51
Hallo Klaus,
so sieht mein Code aus:
If Len("" & Me!ThemaPfad.Value) = 0 Then
MsgBox "Keine Pfadangabe vorhanden !"
Exit Sub
End If
If Dir("ThemaPfad", vbDirectory) > vbNullString Then
MsgBox "Pfad existiert nicht !"
Exit Sub
End If
Application.FollowHyperlink ThemaPfad
Gruß
Heinrich

ebs17
30.10.2011, 19:55
Es sagt mir aber nichts.
Ein Interessierter würde nachfragen und besser vorher noch nachschlagen (Hilfe von Access, Google).

Wenn aber Hinweise in der von Dir gezeigten Weise ignoriert werden und somit umsonst sind, kann man es auch ganz lassen und besser einen Kaffee trinken oder eine Runde ums Haus laufen.

Broom
30.10.2011, 20:13
Hallo Eberhard,
draussen wird es langsam frisch. Besser wäre wenn Du mir bitte erläuterst was ich da falsch eingegeben habe oder nicht richtig beachtet habe.
Danke
Gruß
Heinrich

Arne Dieckmann
30.10.2011, 20:18
BTW: Mit

If Dir("ThemaPfad", vbDirectory) > vbNullString Then

wird momentan immer dasselbe geprüft, egal was im Feld ThemaPfad steht ...


Und dann sollte geprüft werden, was denn tatsächlich die Prüfung auf einen nicht existenten Pfad ausgibt. Dazu einfach mal
?Dir("C:\TEMP", vbDirectory) > vbNullString

und
?Dir("C:\IrgendEinFantasiepfad", vbDirectory) > vbNullString

im Direktfenster ausführen.

kama
30.10.2011, 20:43
Hallo, Entschuldigung das ich mich einmische ;)
Ich würde es so machen
Beim Anklicken der Schaltfläche soll zuerst geprüft werden ob das Feld Zeichen enthält, wenn es leer ist soll der Hinweis „Keine Pfadangabe vorhanden!“ gegeben und der Vorgang abgebrochen werden.
Das ist eine Aufgabe für die man die Gültikeitsregeln und -Meldung der Eigenschaften des Feldes unter Daten benutzen sollte.
Es bleibt eine nicht vorhandene Pfadangabe
Private Sub DeinButton_Click()
Dim TPfad
TPfad = Me!ThemaPfad

If Dir(TPfad) = TPfad Then Application.FollowHyperlink ThemaPfad: Exit Sub

MsgBox "Pfad existiert nicht !"
Me!ThemaPfad.SetFocus

End Sub

Broom
31.10.2011, 10:01
Hallo Elmar,
im Direktfenster wird beim ersten "wahr" und beim zweiten "falsch" ausgegeben. Setze ich "ThemaPfad" zur Prüfung ein wird immer falsch ausgegeben. Also wird der Inhalt von "ThemaPfad" nicht erkannt?
Und nun?
Gruß
Heinrich

kama
31.10.2011, 10:53
"ThemaPfad" nicht erkannt?
So sieht es wohl aus.:upps: Was steht konkret in ThemaPfad?
Dein Problem ist aber schon auf verschiedenste Weise gelöst worden, hier ein Beispiel. du brauchst nur me.Themapfad an die Function übergeben und schon kriegst du Falsch (existiert nicht) oder Wahr(existiert)

DirExists(me.Themapfad)

Public Function DirExists(ByRef sPath As String _
) As Boolean

On Error Resume Next
Dim enmFileAttribute As VBA.VbFileAttribute

enmFileAttribute = VBA.GetAttr(sPath)
DirExists = CBool( _
(Err.Number = 0) And _
(enmFileAttribute And VBA.VbFileAttribute.vbDirectory) _
= VBA.VbFileAttribute.vbDirectory _
)
End Function
?Direxists("C:/tempo")
Falsch
?Direxists("C:/temp")
Wahr

PS:vergiss den Vorschlag in #20

Broom
31.10.2011, 12:52
Hallo Kama,
mit “If DirExists(Me.ThemaPfad) = False Then” funktioniert es jetzt.
Vielen Dank Kama

Dennoch finde ich es schade, dass wir den vielleicht guten Ansatz mit
“If Dir("ThemaPfad", vbDirectory) > vbNullstring Then”
aufgrund meiner mangelnden IT-Kenntnisse nicht hinbekommen haben.

Gruß
Heinrich

Arne Dieckmann
31.10.2011, 17:12
Mit den jetzigen Kenntnissen solltest du aber darauf kommen, dass es nicht

If Dir("ThemaPfad", vbDirectory) ...

sondern

If Dir(Me!ThemaPfad, vbDirectory) ...

lauten muss. Der Rest ist dann nur noch ein wenig Logik ...

kama
31.10.2011, 17:27
Hallo
mit “If DirExists(Me.ThemaPfad) = False Then” funktioniert es jetzt.
Kommt es am häufigsten vor, das der Pfad nicht vorhanden ist?
Ich denke nicht, deshalb ist das IMHO besser.
If DirExists(Me.ThemaPfad) then Application.FollowHyperlink me!ThemaPfad : Exit sub
MsgBox "Pfad existiert nicht !"
Me!ThemaPfad.SetFocus

Broom
31.10.2011, 19:11
Hallo Elmar,
mit folgendem Code klappt es nun auch:
If Len("" & Me!ThemaPfad.Value) = 0 Then
MsgBox "Keine Pfadangabe vorhanden !"
Exit Sub
End If
If Dir(Me!ThemaPfad, vbDirectory) = wahr Then
MsgBox "Pfad existiert nicht !"
Exit Sub
End If
Application.FollowHyperlink ThemaPfad

Nachmals Danke für Deine Unterstützung.

Hallo Eberhard,
ich bin kein IT-Mann und sei mir bitte nicht böse wenn ich manchmal etwas Begriffstutzig bin. Du hast mich bisher immer gut unterstützt bei meinen Probleme und ich hoffe Du wirst es künftig tun.
Danke

Auch ein Danke an den Rest, die mit Hilfe gegeben und ertragen haben.
Ein schönes Halloween.
Gruß
Heinrich
Du hast mich bisher auch immer gut

Thomas Möller
01.11.2011, 09:45
Hallo Heinrich,

mit folgendem Code klappt es nun auch:
If Len("" & Me!ThemaPfad.Value) = 0 Then

Hier noch ein Vorschlag für eine kleine Ergänzung:
Du könntest diese Zeile noch so optimieren, dass auch die Eingabe von ein oder mehreren Leerzeichen zum Abbruch wegen fehlender Pfadangabe führt:

If Len(Trim$(Nz(Me!ThemaPfad, vbNullString))) = 0 Then

CU

Broom
02.11.2011, 10:02
Hallo Thomas,
Danke für den Vorschlag, klappt prima.
Gruß
Heinrich