September 24, 2020, 02:57:40

Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!


Anhang per Botton öffnen; Laufzeitfehler 87

Begonnen von mad, August 20, 2020, 19:23:18

⏪ vorheriges - nächstes ⏩

mad

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

derArb

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?



mad

Hallo,

habe das mal versucht, klappt soweit.


Danke für die unterstützung
mad