Thema Datum  Von Nutzer Rating
Antwort
13.09.2017 12:40:55 Roman
NotSolved
13.09.2017 12:43:28 Gast473
NotSolved
13.09.2017 13:00:39 Gast88200
NotSolved
13.09.2017 14:23:07 Gast26715
NotSolved
Rot So
13.09.2017 19:47:35 Gast20905
NotSolved
13.09.2017 19:48:36 Gast20905
NotSolved
19.09.2017 15:57:56 Gast26558
NotSolved

Ansicht des Beitrags:
Von:
Gast20905
Datum:
13.09.2017 19:47:35
Views:
646
Rating: Antwort:
  Ja
Thema:
So

ich habe ein Problem beim erstellen einer eigenen Funktion in VBA.
Der Einfangsparameter meiner eigenen Funktion is vom Typ eine Datei.
Ich bekomme nicht raus, wie ich im Konstruktor der Funktion den Typ des Eingangsparameters richtig angebe.

Der Ausschnitt aus dem Code:

For monatstag_int = 1 To 31

    Dim myObj As Object
    Set myObj = CreateObject("Scripting.FileSystemObject")

    Dim verzeichnisRohdaten As Object
    Set verzeichnisRohdaten = myObj.GetFolder(verzeichnisDerRohdaten)
    
    For Each file In verzeichnisRohdaten.Files

        Dim dateiname As String
        dateiname = file.Name
        Dim tagesKennung_string As String
        tagesKennung_string = Mid(dateiname, 7, 2)
        Dim tagesKennung_int As Integer
        tagesKennung_int = CInt(tagesKennung_string)
        Dim tagesKennung_stringOhneNull As Integer
        tagesKennung_stringOhneNull = CStr(tagesKennung_int)

        If tagesKennung_int = monatstag_int Then
            ' Öffnen der aktuellen Rohdaten-Datei
            Workbooks.Open (file)
            ' Markieren und löschen der gesamten Spalte E
            ' Spalte E ist eine leere Spalte die nicht gebraucht wird
            Columns("E:E").Select
            Selection.Delete Shift:=xlToLeft
            ' Markieren des gesamten Zellenbereiches mit Daten
            ' Der Datenbereich ist von Zelle A2 bis Zelle E2017
            Dim zellenbereich As Range
            Set zellenbereich = Worksheets(1).Range("A:E")
            zellenbereich.Select
            [...]
        End If

Nun ist diese If-Schleife recht lang. Daher möchte ich die Ausführungen in eine eigene Funktion packen.
Das Problem dabei ist nun, wie man im Konstruktor der Funktion den Eingangsparameter als File deklariert.

Der Versuch (klappt leider nicht - es heißt dass ein Object fehlt).
Habe die Funktion außerhalb des Sub geschrieben.


Function Durchlauf(datei As Object)
    
            ' Öffnen der aktuellen Rohdaten-Datei
            Workbooks.Open (file)
            ' Markieren und löschen der gesamten Spalte E
            ' Spalte E ist eine leere Spalte die nicht gebraucht wird
            Columns("E:E").Select
            Selection.Delete Shift:=xlToLeft
            ' Markieren des gesamten Zellenbereiches mit Daten
            ' Der Datenbereich ist von Zelle A2 bis Zelle E2017
            Dim zellenbereich As Range
            Set zellenbereich = Worksheets(1).Range("A:E")
            zellenbereich.Select
            [...]

End Function

For monatstag_int = 1 To 31

    Dim myObj As Object
    Set myObj = CreateObject("Scripting.FileSystemObject")

    Dim verzeichnisRohdaten As Object
    Set verzeichnisRohdaten = myObj.GetFolder(verzeichnisDerRohdaten)
    
    For Each file In verzeichnisRohdaten.Files

        Dim dateiname As String
        dateiname = file.Name
        Dim tagesKennung_string As String
        tagesKennung_string = Mid(dateiname, 7, 2)
        Dim tagesKennung_int As Integer
        tagesKennung_int = CInt(tagesKennung_string)
        Dim tagesKennung_stringOhneNull As Integer
        tagesKennung_stringOhneNull = CStr(tagesKennung_int)

        If tagesKennung_int = monatstag_int Then
            Durchlauf (datei = file)
        End If



Wäre super wenn jemand helfen kann. Habe schon lange gesucht ob irgendwo erklärt ist wie man ein File als Eingangsparameter definieren kann.


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
13.09.2017 12:40:55 Roman
NotSolved
13.09.2017 12:43:28 Gast473
NotSolved
13.09.2017 13:00:39 Gast88200
NotSolved
13.09.2017 14:23:07 Gast26715
NotSolved
Rot So
13.09.2017 19:47:35 Gast20905
NotSolved
13.09.2017 19:48:36 Gast20905
NotSolved
19.09.2017 15:57:56 Gast26558
NotSolved