Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1108to1112
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Fehlermeldung mit Inputbox abfangen

Fehlermeldung mit Inputbox abfangen
Wolfgang
Hallo,
den nachstehenden Code habe ich auszugsweise aus diesem Forum erhalten. Er funktioniert auch bedingt, solange Environ(Username) im Verzeichnis exisitert. Sobald aber der Zusatz vorkommt .Gest, dann erkennt Excel das Verzeichnis nicht mehr. Gibt es eine Möglichkeit, an der Stelle die Fehlermeldung abzufangen und den Username über eine Inputbox manuell einzugeben? - Wäre für weitere Hilfestellung sehr dankbar.
Gruß - Wolfgang
' Dein Teil für den UserNamen
'strUser = Environ("Username")
Dim strUser As String, strPath As String, strhelp As String
strUser = Trim$(Replace(strUser, ".GEST", ""))
' Zusammenbauen des Pfades aus Vorgabepfad und UserName
strPath = "C:\Dokumente und Einstellungen\" & strUser & "\Lokale Einstellungen\Temp\TempKD"
If Dir(strPath, vbDirectory) = "" Then
MsgBox "Das angegebene Verzeichnis existiert nicht!", vbCritical
Exit Sub
End If
AW: Fehlermeldung mit Inputbox abfangen
20.10.2009 04:26:46
mumpel
Hallo!
Müsste es nicht GUEST heissen?
Gruß, René
AW: Fehlermeldung mit Inputbox abfangen
20.10.2009 06:51:10
Wolfgang
Hallo Rene,
danke für Deine Rückmeldung; das ist wohl eine interne Abkürzung aus der "EDV-Zentrale", die nicht beeinflussbar ist. Das Problem ist ja auch, dass der Code mit diesem Zusatz, egal wie der wohl heißt, meldet, dass das angegebene Verzeichnis nicht existiert. Daher kam mir nun in den Sinn, ob ich dann den Pfad über eine Inputbox nicht zuweisen kann, wenn in diesem Ausnahmefall der Pfad nicht gefunden wird. In fast 80 % aller anderen Fälle klappt das ja auch über Environ(Username).
Gruß -Wolfgang
AW: Fehlermeldung mit Inputbox abfangen
20.10.2009 07:50:28
fcs
Hallo Wolfgang,
hier kommt leider die tatsache zum Tragen, dass Punkte im Dateinamen bei bestimmten VBA-Funktionen, wie zB. Dir, zu unbefriedigenden Ergebnissen führen. Statt Punkt hätte hier besser ein"_" als Trennzeichen verwendet werden sollen.
In deiner Prozedur kannst du wie folgt eine Verzeichnis-Auswahl einbauen.
Den Wert des Startverzeichnisses muss du ggf. anpassen, damit keine Fehlermeldung angezeigt wird.
Gruß
Franz
  ' Dein Teil für den UserNamen
'strUser = Environ("Username")
Dim strUser As String, strPath As String, strhelp As String
strUser = Trim$(Replace(strUser, ".GEST", ""))
' Zusammenbauen des Pfades aus Vorgabepfad und UserName
strPath = "C:\Dokumente und Einstellungen\" & strUser & "\Lokale Einstellungen\Temp\TempKD"
If Dir(strPath, vbDirectory) = "" Then
'MsgBox "Das angegebene Verzeichnis existiert nicht!", vbCritical
VBA.Beep
strPath = "C:\Dokumente und Einstellungen\" & strUser 'Startverzeichnis für Dialog
'strPath = "C:\Benutzer\" & strUser 'Startverzeichnis für Dialog
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Das angegebene Verzeichnis existiert nicht! - Bitte Verzeichnis wählen"
.InitialFileName = strPath
If .Show = 0 Then
Exit Sub 'Verzeichnisauswahl abgebrochen
Else
strPath = .SelectedItems(1)
MsgBox "Gewähltes Verzeichnis:" & vbLf & vbLf & strPath  'Testzeile
End If
End With
End If

Anzeige
AW: Fehlermeldung mit Inputbox abfangen
20.10.2009 08:05:05
Björn
Hallo Franz,
ich glaube das ist nicht das Problem.
Wolfgang macht doch mit Replace genau diesen Teil mit Punkt weg.
Was mir gerade noch auffällt, der erste Teil des Codes ist in der falschen Reihenfolge ist (Variablendeklaration muss als erstes kommen) und die Zeile, in der der Username ausgelesen wird ist auskommentiert. Ich hoffe jetzt mal, dass nicht das der Fehler war.
So müsste es meiner Meinung nach richtig heißen:

' Dein Teil für den UserNamen
Dim strUser As String, strPath As String, strhelp As String
strUser = Environ("Username")
strUser = Trim$(Replace(strUser, ".GEST", ""))

Gruß
Björn
Anzeige
AW: Fehlermeldung mit Inputbox abfangen
20.10.2009 08:28:42
fcs
Hallo Björn,
die Position der Variablendeklaration in der Prozedur spielt keine Rolle. Sinnvoll ist natürlich diese komplett am Beginn der Prozedur zu machen.
Die auskommentierte Zeile ist auch nicht das Problem, denn in der nächsten Zeile wird ihr ja der gewünscte Wert zugewiesen.
Ich hab mit meinem Schnippsel ein wenig experimentiert und wenn das vorgegebene Verzeichnis mit dem Usernamen existiert, dann wird der Verzeichnis-Auswahldialog nicht angezeigt.
Das Problem ist tatsächlich der "." im Verzeichnisnamen mit GEST. Ich hab mit dem "." in Verbindung mit Dir auch schon mit zu kämpfen gehabt. Liegt wahrscheinlich daran, dass historisch der "." immer das Trennzeichen zwischen Dateiname und Datei-Erweiterung war.
Gruß
Franz
Anzeige
stimmt einfach nicht...
20.10.2009 08:41:44
Björn
... wenn Du die Zeile
strUser = Environ("Username")

auskommentierst, dann steht in der Variablen strUser nichts drin.
wenn man dann aus einem leeren String etwas trimmt und ersetzt, dann ist er immer noch leer.
Lass Dir doch einfach mal die Variable in einer Msgbox ausgeben, wenn Du das weglässt.
Bei mir ist sie auf jeden Fall leer, weiß nicht, wie du das machst.
Du würdest also nach einem Verzeichnis suchen, das in etwas so aussieht
"C:\Dokumente und Einstellungen\\Lokale Einstellungen\Temp\TempKD" und das kann es nicht geben!!!
Und fast schon eine blödsinnige Aussage ist (sorry, nicht böse sein), dass es egal ist, wann eine Variable deklariert wird. Sie muss natürlich nicht am Anfang des Codes stehen, muss aber auf jeden Fall vor die Stelle, an der die Variable das erste Mal benutzt wird.
Dazu bitte diese beiden Codes testen:
Der erste bringt bei mir einen Fehler.
Sub test()
i = 9
Dim i As Integer
MsgBox i
End Sub
Sub test2()
Dim i As Integer
i = 9
MsgBox i
End Sub
Und nochmal: Wolfgang macht mit Replace das .GEST weg, also glaube ich nicht, dass dieser Teil im gesuchten Verzeichnis überhaupt vorkommt.
Ich weiß schon, dass Punkte nicht immer einfach sind (nicht nur bei Dateinamen), aber hier ist das nicht das Problem.
Gruß
Björn
Anzeige
AW: stimmt einfach nicht...
20.10.2009 19:28:43
fcs
Hallo Björn,
ok, Variablen müssen vor Verwendung deklariert werden und die Variable strUser muss mit Leben gefüllt werden.
Wolfgangs ursprüngliche Frage war ja den Pfad anzupassen wenn es Probleme gibt.
Franz
Dann etwa so:
  ' Dein Teil für den UserNamen
Dim strUser As String, strPath As String, strhelp As String
strUser = Environ("Username")
strUser = Trim$(Replace(strUser, ".GEST", ""))
' Zusammenbauen des Pfades aus Vorgabepfad und UserName
strPath = "C:\Dokumente und Einstellungen\" & strUser & "\Lokale Einstellungen\Temp\TempKD" _
If Dir(strPath, vbDirectory) = "" Then
'MsgBox "Das angegebene Verzeichnis existiert nicht!", vbCritical
VBA.Beep
strPath = "C:\Dokumente und Einstellungen\" & strUser 'Startverzeichnis für Dialog
'strPath = "C:\Benutzer\" & strUser 'Startverzeichnis für Dialog
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Das angegebene Verzeichnis existiert nicht! - Bitte Verzeichnis wählen"
.InitialFileName = strPath
If .Show = 0 Then
Exit Sub 'Verzeichnisauswahl abgebrochen
Else
strPath = .SelectedItems(1)
MsgBox "Gewähltes Verzeichnis:" & vbLf & vbLf & strPath  'Testzeile
End If
End With
End If

Anzeige
AW: Fehlermeldung mit Inputbox abfangen
20.10.2009 19:35:19
Wolfgang
Hallo Franz,
Hallo Björn,
Danke für Eure Rückmeldungen und Beiträge; Sorry, dass ich mich jetzt erst wieder melden kann. Ich habe mit meinen wenigen Möglichkeiten und Verstand in VBA die Codes bzw. Hinweise versucht, aufzugreifen. Der Code von Dir, Franz, kommt schon den Vorstellungen sehr nahe. Das Problem ist, das tatsächlich im Rahmen der Vernetzung nicht bei jedem Kollegen Environ(Username) - Format: MuellerW (wäre dann auch z.B. der WINDOWS-Anmeldename) erscheint, sondern dann auf einmal der Zusatz "MuellerW.Gest" enthalten ist. Mit der Inputbox, wie sie in Deinem Code, Franz, erscheint wird mir ja auch nun das Verzeichnis angezeigt, wenn Environ("Username") nicht in dem üblichen Format -ohne Gest- existiert. Wie gehe nun aber weiter vor? Ich kann in der Folge den Ordner des "Users.Gest" anklicken, es erfolgt aber keine Aktion. Ich würde darüber nun möglichst erreichen, dass der Pfad, wie beschrieben, verfolgt werden kann, bis ich im Ordner TempKD lande und dort alle .temp-Dateien ansteuern kann.Muß ich da evtl. noch etwas verändern oder ergänzen - mit dem Startverzeichnis habe ich das noch nicht verstanden, mag da noch das Problem liegen? - Danke schon jetzt wieder für die Antwort.
Danke auch nochmals Dir, Björn, für die Rückmeldung.
Gruß - Wolfgang
Anzeige
AW: Fehlermeldung mit Inputbox abfangen
21.10.2009 05:38:40
fcs
Hallo Wolfgang,
das Startverzeichnis ist das Verzeichnis, mit dem der Dialog für die Verzeichnisauswahl beginnen soll.
Wenn dieser Dialog abgeschlossen ist, dann steht in der Variablen strPath der Name des ausgewählten Verzeichnisses wo wenn alles reibungslos läuft ""C:\Dokumente und Einstellungen\" & strUser & "\Lokale Einstellungen\Temp\TempKD" drin steht.
Alle weiteren Aktionen, die du in deinem Code mit dem Verzeichnis vorhast, sind ja bis jetzt hier nicht bekannt.
In ähnlicher Weise, wie hier den Dialog zur Auswahl eines Verzeichnisses, kann man auch einen Dialog zur Dateiauswahl anzeigen.
Gruß
Franz
Sub aaatest()
' Dein Teil für den UserNamen
Dim strUser As String, strPath As String, strhelp As String
Dim fName As Variant, intI As Long
strUser = Environ("Username")
strUser = Trim$(Replace(strUser, ".GEST", ""))
' Zusammenbauen des Pfades aus Vorgabepfad und UserName
strPath = "C:\Dokumente und Einstellungen\" & strUser & "\Lokale Einstellungen\Temp\TempKD"
'strPath = "C:\Users\" & strUser & "\AppData\Local\Temp"
If Dir(strPath, vbDirectory) = "" Then
'MsgBox "Das angegebene Verzeichnis existiert nicht!", vbCritical
VBA.Beep
strPath = "C:\Dokumente und Einstellungen\" & strUser 'Startverzeichnis für Dialog
'strPath = "C:\Users\" & strUser 'Startverzeichnis für Dialog
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Das angegebene Verzeichnis existiert nicht! - Bitte Verzeichnis wählen"
.InitialFileName = strPath
If .Show = 0 Then
Exit Sub 'Verzeichnisauswahl abgebrochen
Else
strPath = .SelectedItems(1)
MsgBox "Gewähltes Verzeichnis:" & vbLf & vbLf & strPath  'Testzeile
End If
End With
End If
'Datei-Auswahl
fName = strPath & Application.PathSeparator & "*.*" 'Start Dateiname
With Application.FileDialog(msoFileDialogOpen)
.Title = "Bitte gewünschte Datei(en) wählen - Mehrfachauswahl ist möglich"
.InitialFileName = fName
.AllowMultiSelect = True
.ButtonName = "Auswählen"
If .Show = 0 Then
Exit Sub 'Dateiauswahl abgebrochen
Else
For intI = 1 To .SelectedItems.Count
fName = .SelectedItems(1)
MsgBox "Gewählte Datei Nr. " & intI & " :" & vbLf & vbLf & fName  'Testzeile
'ab hier dann den/die Filenamen ggf. weiter verarbeiten
Next
End If
End With
End Sub

Anzeige
Danke Franz, habe nun verstanden.
21.10.2009 18:29:08
Wolfgang
Hallo Franz,
erneut wieder recht herzlichen Dank für Deine Rückmeldung und dem ergänzenden Code. Ich habe nun verstanden, was mit Startverzeichnis Dialog gemeint ist. Habe den Code auch schon so eingebaut. Er reagiert und läuft genauso, wie ich es mir vorgestellt hatte. Die weiteren Anpassungen werde ich weiter vornehmen, sollte ich noch Fragen haben, werde ich mich erneut melden. Soweit nochmals recht herzlichen Dank.
Gruß - Wolfgang
AW: Fehlermeldung mit Inputbox abfangen
20.10.2009 07:28:55
Björn
Guten Morgen,
wo genau kommt welcher Fehler?
Wie genau ist der Pfad des Verzeichnisses, das Du einstellen möchtest?
Gruß
Björn
Ergänzung
20.10.2009 07:34:27
Björn
Also ich vesteh das mit dem ".GEST" nicht.
Du hast evtl. einen Username der z.B. Hans.GEST heißt und dann möchtest Du das ".GEST" entfernen, richtig?
Dein Verzeichnis würde dann:
"C:\Dokumente und Einstellungen\Heinz\Lokale Einstellungen\Temp\TempKD" heißen.
Normalerweise ist aber der Username gleich dem Verzeichnisnamen. Außer man pfuscht da manuell drin rum.
Gruß
Björn B.
Anzeige
AW: Fehlermeldung mit Inputbox abfangen
20.10.2009 21:02:14
mumpel
Wenn ich Dich richtig verstehe, dann möchtest Du auf den persönlichen Ordner des angemeldeten Anwenders zugreifen. Es gibt noch die Möglichkeit, mit Hilfe von API-Code auf den Userpath zuzugreifen. Jedoch benötigt man in Windows Vista und 7 einen anderen API-Code als in XP. Hat den Vorteil das es auch garantiert funktioniert. Das Beispiel zeigt den API-Code für "Eigene Dateien". Kann ich aber nicht testen da ich Windows 7 habe.
Zuerst den API-Code. Diesen in ein allgemeines Modul.
Dann die Funktion in ein allgemeines Modul:
Und nun das Makro, mit welchem man dann auf den Ordner zugreifen kann. Müsste nur noch an den von Dir gewünschten Userpath angepasst werden. Allerdings kenne ich nicht alle Namen der Anwenderordner.
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige