none
A07: Einer Funktion den Namen des Fo 'mitgeben'?

    Frage

  • Hallo zusammen,
    mit der Modul-Funktion AufrufDatei() unten (klaro, nicht von mir ...) wird nach der entsprechenden Datei im Verzeichnis und deren Unterverzeichnisse gesucht. Nun möchte ich diese Funktion auch von anderen Fo'en starten lassen und müsste so jedesmal die ganze Funktion kopieren damit der Fo-Name entsprechend angepasst werden kann. Ist es möglich den Fo-Namen - aus der diese Funktion aufgerufen wird - der Funktion 'mitzugeben ?
    Danke für Eure Hilfe. Gruß Steffen

    Option Compare Database
    Option Explicit

    Dim db As Database, rs As DAO.Recordset
    Dim SucheInVerzeichnisDatei As String
    Dim SucheDatei As String

    Public Enum SORT_BY
        Sort_by_None
        Sort_by_Name
        Sort_by_Path
        Sort_by_Size
        Sort_by_Last_Access
        Sort_by_Last_Modyfy
        Sort_by_Date_Create
    End Enum

    Public Enum SORT_ORDER
        Sort_Order_Ascending
        Sort_Order_Descending
    End Enum

    Public Type FILEINFO
        strFilename As String
        strPath As String
        lngSize As Long
        dmtLastAccess As Date
        dmtLastModify As Date
        dmtDateCreate As Date
    End Type


    Public Function AufrufDatei()

        Dim objFileSearch As clsFileSearch
        Dim lngIndex As Long
       
           
        If IsNull(Forms!PROT_Fo01.Dateiname01) Or IsNull(Forms!PROT_Fo01.Text24) Or Forms!PROT_Fo01.Text24 = "" Then
        MsgBox "Kein Dateiname und/oder kein Projektverzeichnis vorhanden"
        Exit Function
        End If
       
        SucheDatei = Forms!PROT_Fo01.Dateiname01
        SucheDatei = SucheDatei & "*"
       
        Set objFileSearch = New clsFileSearch
       
        With objFileSearch
            .CaseSenstiv = True
            .Extension = "*.*"
            .FolderPath = Forms!PROT_Fo01.Text24
            .SearchLike = SucheDatei
            .SubFolders = True
            If .Execute(Sort_by_Size, Sort_Order_Descending) > 0 Then
                For lngIndex = 1 To .FileCount
                    With .Files(lngIndex)
                        SucheInVerzeichnisDatei = .strPath
                        Application.FollowHyperlink SucheInVerzeichnisDatei

                    End With
                Next
            End If
        End With
       
        Set objFileSearch = Nothing

    End Function

    Sonntag, 21. Oktober 2012 11:58

Antworten

  • Hallo,

    Steffen Brose wrote:

    mit der Modul-Funktion AufrufDatei() unten (klaro, nicht von mir ...)
    wird nach der entsprechenden Datei im Verzeichnis und deren
    Unterverzeichnisse gesucht. Nun möchte ich diese Funktion auch von
    anderen Fo'en starten lassen und müsste so jedesmal die ganze Funktion
    kopieren damit der Fo-Name entsprechend angepasst werden kann. Ist es
    möglich den Fo-Namen - aus der diese Funktion aufgerufen wird - der
    Funktion 'mitzugeben ?
    [...]
    Public Function AufrufDatei()

    Public Function AufrufDatei(strForm As String)

        Dim objFileSearch As clsFileSearch
        Dim lngIndex As Long

    Dim Frm As Form

    Set Frm = Forms(strForm)

        If IsNull(Forms!PROT_Fo01.Dateiname01) Or IsNull(Forms!PROT_Fo01.Text24) Or Forms!PROT_Fo01.Text24 = "" Then

    If IsNull(Frm!PROT_Fo01.Dateiname01) 'usw.

    Musst natuerlich darauf achten, dass die angesprochenen Controls auf allen
    Formularen unter gleichem Namen existieren.

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    • Als Antwort markiert Steffen Brose Montag, 22. Oktober 2012 08:37
    Sonntag, 21. Oktober 2012 14:51
    Moderator

Alle Antworten

  • Hallo,

    Steffen Brose wrote:

    mit der Modul-Funktion AufrufDatei() unten (klaro, nicht von mir ...)
    wird nach der entsprechenden Datei im Verzeichnis und deren
    Unterverzeichnisse gesucht. Nun möchte ich diese Funktion auch von
    anderen Fo'en starten lassen und müsste so jedesmal die ganze Funktion
    kopieren damit der Fo-Name entsprechend angepasst werden kann. Ist es
    möglich den Fo-Namen - aus der diese Funktion aufgerufen wird - der
    Funktion 'mitzugeben ?
    [...]
    Public Function AufrufDatei()

    Public Function AufrufDatei(strForm As String)

        Dim objFileSearch As clsFileSearch
        Dim lngIndex As Long

    Dim Frm As Form

    Set Frm = Forms(strForm)

        If IsNull(Forms!PROT_Fo01.Dateiname01) Or IsNull(Forms!PROT_Fo01.Text24) Or Forms!PROT_Fo01.Text24 = "" Then

    If IsNull(Frm!PROT_Fo01.Dateiname01) 'usw.

    Musst natuerlich darauf achten, dass die angesprochenen Controls auf allen
    Formularen unter gleichem Namen existieren.

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    • Als Antwort markiert Steffen Brose Montag, 22. Oktober 2012 08:37
    Sonntag, 21. Oktober 2012 14:51
    Moderator
  • Keine Ahnung was ein Fo sein soll, aber gehen wir mal davon aus, das du ein Formular meinst.. Aber ohne Formularbezug ist es eh besser:

    Public Sub AufrufDatei(AFolder As String, AFilePattern As String)
     
      Dim objFileSearch As clsFileSearch
      Dim lngIndex As Long
         
      If AFolder <> "" Then
        Set objFileSearch = New clsFileSearch     
        objFileSearch.CaseSenstiv = True
        objFileSearch.Extension = "*.*"
        objFileSearch.FolderPath = AFolder
        objFileSearch.SearchLike = AFilePattern & "*"
        objFileSearch.SubFolders = True
        If objFileSearch.Execute(Sort_by_Size, Sort_Order_Descending) > 0 Then
          For lngIndex = 1 To objFileSearch.FileCount
            With objFileSearch.Files(lngIndex)
              SucheInVerzeichnisDatei = .strPath
              Application.FollowHyperlink SucheInVerzeichnisDatei
            End With
          Next
        End If     
        Set objFileSearch = Nothing 
      Else
        MsgBox "Kein Dateiname und/oder kein Projektverzeichnis vorhanden"
      End If   
       
    End Function

    btw, achte darauf, das in jedem Modul ein Option Explicit am Anfang steht. Stelle es auch in den Optionen als Voreinstellung an. Dort heißt es Variablendeklaration erforderlich.


    Sonntag, 21. Oktober 2012 14:57
    Moderator
  • Hallo Stefan, danke für Deinen Tipp. Der Formularbezug soll aber erhalten werden, da die Funktion ja auch im Formular gestartet wird. Die Lösung von Peter funktioniert einwandfrei. Gruß Steffen  
    Montag, 22. Oktober 2012 08:31
  • Hallo Peter, vielen Dank dafür - funktioniert einwandfrei. Die Namen in den Formularen gleich zu halten ist für den Laien 'kein Problem'. Das erledige ich sehr gern.

    Noch ein kleiner Zusatz (habe ich auch nicht hinbekommen): Aktuell wird ja keine Meldung angezeigt, wenn die Datei nicht gefunden wurde. Wo müsste eine msg eigentlich für den Fall hin? Danke Dir.

    Gruß Steffen

    Public Function AufrufDatei2(strForm As String)


    Dim objFileSearch As clsFileSearch
    Dim lngIndex As Long

    Dim Frm As Form
    Set Frm = Forms(strForm)

      
       If IsNull(Frm!Dateiname01) Or IsNull(Frm!Text24) Or Frm!Text24 = "" Then

        MsgBox "Kein Dateiname und/oder kein Projektverzeichnis vorhanden"
        Exit Function
        End If
       
        SucheDatei = Frm!Dateiname01
        SucheDatei = SucheDatei & "*"
       
        Set objFileSearch = New clsFileSearch
       
      
      
        With objFileSearch
            .CaseSenstiv = True
            .Extension = "*.*"
            .FolderPath = Frm!Text24
            .SearchLike = SucheDatei
            .SubFolders = True
            If .Execute(Sort_by_Size, Sort_Order_Descending) > 0 Then
                For lngIndex = 1 To .FileCount
                    With .Files(lngIndex)
                        SucheInVerzeichnisDatei = .strPath
                        Application.FollowHyperlink SucheInVerzeichnisDatei

                    End With
                Next
            End If
        End With
       
        Set objFileSearch = Nothing

    End Function

    Montag, 22. Oktober 2012 08:37
  • Hallo,

    Steffen Brose wrote:

    Noch ein kleiner Zusatz (habe ich auch nicht hinbekommen): Aktuell wird
    ja keine Meldung angezeigt, wenn die Datei nicht gefunden wurde. Wo
    müsste eine msg eigentlich für den Fall hin? [...]
       If IsNull(Frm!Dateiname01) Or IsNull(Frm!Text24) Or Frm!Text24 = "" Then

        MsgBox "Kein Dateiname und/oder kein Projektverzeichnis vorhanden"
        Exit Function
       End If

    If Dir(Frm!Text24 & "\*")="" Then
      MsgBox "Keine Datei im Projektverzeichnis gefunden"
      Exit Function
    End If

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Montag, 22. Oktober 2012 10:35
    Moderator
  • Hallo Peter,

    das If Dir(Frm!Text24 & "\*")="" Then - prüft ja ob im Projektverzeichnis überhaupt Dateien vorhanden sind...wegen dem * - oder?

    Ich meinte so: Die Funktion sucht nacheinander alle Unterverzeichnisse nach dem Projektverzeichnis (Text24) durch. Wird die Datei angetroffen dann macht  Application.FollowHyperlink diese auf. Trifft sie keine - wird keine Meldung ausgegeben.

    Diese msg wollte ich da noch gern drinhaben, weiß aber nicht - nach probieren - wohin das Teil kommen muss.

    Geht das? Gruß Steffen

    Montag, 22. Oktober 2012 11:08