Hallo,
ich habe eine Access-Datenbank zur Verwaltung von Dokumenten. Über ein Formular möchte ich über einen Button den Dateiexplorer aufrufen, eine Datei suchen, und dann den Pfad als Link in ein Textfeld schreiben.
Wie kann ich das mit VBA realisieren. Ich habe schon verschiedene Möglichkeiten gefunden, kriege aber leider die Lösung nicht hin.
Vielen Dank
Hallo,
was hast Du denn ausprobiert?
https://www.vba-tutorial.de/applikation/dateidialog.htm
Den Code
Private Function OrdnerDialog() As String
Dim oShell As Object
Dim oOrdner As Object
Set oShell = CreateObject("Shell.Application")
Set oOrdner = oShell.BrowseForFolder( _
Me.hWnd, "Bitte einen Ordner auswählen", 1)
If Not oOrdner Is Nothing Then
OrdnerDialog = oOrdner.Self.Path
End If
Set oOrdner = Nothing
Set oShell = Nothing
End Function
hab' ich gefunden. Der läßt aber nur einen Ordner auswählem, keine Datei.
Beim nächsten Coe
Private Sub Befehl27_Click()
With Application.FileDialog(msoFileDialogFilePicker)
.InitialFileName = Nz(Me.Text1, "")
.Show
If .SelectedItems.Count Then
Me.Text1 = .SelectedItems(1) & "\"
Else
Me.Text = ""
End If
End With
End Sub
passiert gar nichts.
Leider sind meine VBA-Kenntnisse nicht so prickelnd.
Danke schon mal.
Hallo,
aber wenigstens fdebuggen solltest Du können:
Haltepunkt an den anfang des Code setzen und mit F8 den Code durchlaufen. Dabei prüfst >Du bei jedem Schritt die die Inhalte der Variablen.
Und absolut wichtig:
In JEDEN Modulkopf "Option Explicit" schreiben!
Beim 2. Code ist der Verweis auf die MS Office Library erforderlich.
Hallo Franz,
danke für die Antwort.
"Option Explicit" hab' ich gesetzt.
Beim Debuggen wird keine Meldung ausgegeben.
Soll das heißen, dass der Code paßt?
Wie setze ich den Verweis auf die MS Office Library?
Danke
Hallo,
es heißt nur, dass keine undeklarierten Variablen verwendet werden. Ob der Code passt, siehst Du erst dann, wenn er richtig abläuft.
Hast Du nun mal "debuggt"?
Hallo,
ja, ich hab' debuggt. Da passiert aber gar nichts.
Und die Library krieg ich auch nicht hin.
Danke
Hallo,
was heißt, es passiert nichts?
Läuft der Code überhaupt durch? Steht unter Ereignisse in der Eigenschaft des Butoons "Beim Klicken" der Text [Ereignisprozedur] drin ?
Verweise werden gesetzt im VBA-Editor unter Extras/Verweise.
Hallo Franz,
der Verweis auf die Library passt jetzt.
Der 2. Code funktioniert jetzt sehr gut.
Bis hier ist mein Problem gelöst.
Vielen Dank für die Hilfe.
Ich kämpfe mich jetzt weiter durch, um den Pfad als Link in einem Suchformular aufrufen zu können.
Evtl. melde ich mich später wieder.
Schönen Gruß
Hallo,
Zitatum den Pfad als Link in einem Suchformular aufrufen zu können.
was heißt das genau?
Hallo,
bei der Erfassung der Daten wird zu jedem Datensatz ein Link zu einem Dokument erfaßt.
Im Suchformular wird jetzt dieser Link mit aufgezeigt.
Eigentlich wollte ich aus der Trefferliste das Dokument direkt über den Link aufrufen.
Das geht ja offensichtlich nicht, zumindest habe ich nichts darüber efunden.
Eine weitere Idee ist, den Link aus dem akiven Datensatz in einem eigenen Textfeld anzuzeigen und daraus per Button aufzurufen.
Oder gibt es eine andere Möglichkeit?
Boernie
Hallo,
ändere die Link-Felder in normale Textfelder und speichere den kompletten Pfad-Dateinamen in diesen Textfeldern.
Im Formular kann dann durch Doppelklick auf das Feld oder auch per Button die Datei in der passenden Ereignisprozedur mit
-- Followhyperlink
-- Shellexecute (empfohlen)
geöffnet(aufgerufen) werden.
Hallo,
danke, das hört sich sehr gut an.
Ich werde das probieren.
Melde mich wieder, wenn ich soweit bin.
Danke
Boerni
Hallo Franz,
vielen Dank für die Hilfe.
Mein Problem ist gelöst!
Als Info für die Community:
- Verweis auf MS Office Library gesetzt
- Code zur Erfassung ergänzt
Private Sub Befehl27_Click()
With Application.FileDialog(msoFileDialogFilePicker)
.InitialFileName = Nz(Me.Text25, "")
.Show
If .SelectedItems.Count Then
Me.Text25 = .SelectedItems(1) & "\"
Else
Me.Text25 = ""
End If
End With
End Sub
- ShellExecute deklariert
Declare PtrSafe Function ShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" ( _
ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long
- Ereignisprozedur Doppelklick auf das Pfadfeld in Treffergrid gesetzt
Private Sub Rechnung_DblClick(Cancel As Integer)
Dim strPath As String
Dim stDocName As String
Dim Doc As String
Dim ufrmDatensatzsuchen As String
stDocName = ufrmDatensatzsuchen
Doc = Me!Rechnung
strPath = stDocName & Doc
ShellExecute 0, "open", strPath, "", "", 1
End Sub
Das Dokument kann direkt aus dem Treffergrid mit Doppelklick aufgerufen werden.
Schönen Gruß und danke
Boerni