Hallo Zusammen,
bräuchte mal wieder eure fachfliche Hilfe.
Beim öffnen per Botton eines Anhanges der in einem Verzeichnis liegt, bekomme ich einen Laufzeitfehler 87 "Ein unerwarteter Fehler ist aufgetreten", obwohl es in mehreren ähnlichen Fällen Problemlos funktioniert.
Mit folgenden Code, nur das vordefinierte Verzeichnis und Feld ist immer verschieden, lege ich quasi die Datei ab:
Private Sub btnDatAnhang_Click()
' Requires reference to Microsoft Office 11.0 Object Library.
Dim fDialog As Office.filedialog, varFile As Variant
Set fDialog = Application.filedialog(msoFileDialogFilePicker)
With fDialog
.AllowMultiSelect = False
.Title = "Please select one or more files"
' Clear out the current filters, and add our own.
.Filters.Clear
'.Filters.Add "Access Databases", "*.MDB"
'.Filters.Add "Access Projects", "*.ADP"
.Filters.Add "All Files", "*.*"
' Verzeichnis vordefiniert
.InitialFileName = "P:\DB_Dokumentenablage"
If .Show = True Then
'in welches Feld der Wert gespeichert wird
Me!AnhDoku_VollDateiName = .SelectedItems(1)
s = Me!AnhDoku_VollDateiName
Me!AnhDoku_Dateiname = Right(s, Len(s) - InStrRev(s, "\"))
Else
MsgBox "You clicked Cancel in the file dialog box."
End If
End With
End Sub
Und mit diesem Code kann ich das Dokument dann wieder öffnen:
Private Sub btnDatÖffnen_Click()
FollowHyperlink "File://" & Me!AnhDoku_VollDateiName
End Sub
In dem Formular mit dem ich nun den Laufzeitfehler bekommen, lege ich wie folgt ab:
Private Sub btnDateiInv_Click()
' Requires reference to Microsoft Office 11.0 Object Library.
Dim fDialog As Office.filedialog, varFile As Variant
Set fDialog = Application.filedialog(msoFileDialogFilePicker)
With fDialog
.AllowMultiSelect = False
.Title = "Please select one or more files"
' Clear out the current filters, and add our own.
.Filters.Clear
'.Filters.Add "Access Databases", "*.MDB"
'.Filters.Add "Access Projects", "*.ADP"
.Filters.Add "All Files", "*.*"
' Verzeichnis vordefiniert
.InitialFileName = "G:\DB_Dokumentenablage_Inventar"
If .Show = True Then
'in welches Feld der Wert gespeichert wird
Me!PAA_VollDateiName = .SelectedItems(1)
s = Me!PAA_VollDateiName
Me!PAA_VollDateiName = Right(s, Len(s) - InStrRev(s, "\"))
Else
MsgBox "You clicked Cancel in the file dialog box."
End If
End With
End Sub
Und öffnen mit diesem Code:
Private Sub btnÖffnenINV_Click()
FollowHyperlink "File://" & Me!PAA_VollDateiName
End Sub
Nun verstehe ich den Laufzeitfehler nicht, da doch die Codes um Grundsatz gleich aufgebaut sind.
Hätte jemand ein Idee?
Gruss
mad
Hallo,
wieso kürzt Du denn den Pfad der per Filepicker gefundenen Datei auf den Dateinamen ein,
bevor Du abspeicherst?
Damit verkomplizierst Du doch unnötig alles.
Speichere den kompletten Pfad und rufe ihn auch wieder per Hyperlink auf, anstatt da erst
etwas wieder zusammenzustöpseln.
Die Anzeige des Dateinamens ohne lange Pfadangaben kann man über eine einfache Funktion sich anzeigen lassen.
Aber erst nach dem Abspeichern.
in einem allgemeinen Modul
Option Compare Database
Option Explicit
Public Function FnstrSeparatedPath(strFilename As String, _
Optional blnPath As Boolean = True) As String '(True = Dateiname mit Endung bzw. Ordnerpfad)
Dim lngPosition As Long
lngPosition = InStrRev(strFilename, "\")
If blnPath Then
FnstrSeparatedPath = Mid$(strFilename, lngPosition + 1) 'Dateiname mit Endung
'FnstrSeparatedPath = Left$(strFilename, lngPosition) 'Ordnerpfad
Else
FnstrSeparatedPath = Mid$(strFilename, lngPosition + 1)
FnstrSeparatedPath = Left(FnstrSeparatedPath, InStrRev(FnstrSeparatedPath, ".") - 1) 'Dateiname ohne Dateiendung
'alternativ von knobb38
'FnstrSeparatedPath = Mid$(strFilename, _
lngPosition + 1, _
InStrRev(strFilename, ".") - lngPosition - 1)
End If
End Function
Man könnte das in einer Abfrage einfach lösen mit einer berechneten Spalte
DateiNameOhnePfad: FnstrSeparatedPath(DateiNameMitPfad)
Wo ist denn die Variable s dimensioniert. Fehlt da etwa auch ein Option Explicit im Kopf des Formular-VBA Codes?
Hallo,
habe das mal versucht, klappt soweit.
Danke für die unterstützung
mad