Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Typen unverträglich ?
#1
Hallo
ich habe eine Funktion im Netz gefunden, die mir das Datum des Montags einer angegebenen Kalenderwoche zurückmeldet.
Also ich gebe ein "39" (.KW) und bekommen zurück: "27.09.2021". So weit so gut.
Nun möchte ich die Funktion aber mit einer Variablen aufrufen:
hier die Funktion

Public Function MontagKW(myKW As Long, Optional myJahr)
               ' gibt den Montag der übergebenen Kalenderwoche im übergebenen oder aktuellen Kalenderjahrzurück
Dim KWMon As Date
Dim aktKalenderwoche As Long
    If IsMissing(myJahr) Then myJahr = Year(Date)
    MontagKW = DateSerial(myJahr, 1, 1) + (myKW - 1) * 7
    MontagKW = MontagKW + 1 - Weekday(MontagKW, 2)
    If Format(MontagKW, "ww", 2, 2) <> myKW Then MontagKW = MontagKW + 7
End Function


übergeben werden muss also ein Parameter im Long-Format.
Mache ich auch:
         aktKalenderwoche = CLng(WorksheetFunction.WeekNum(Date, 21))
          MsgBox TypeName(aktKalenderwoche)              ---> liefert "Long"
          MsgBox (MontagKW(aktKalenderwoche))           ----> liefert "Argumenttype ByRef unverträglich"


Die Variable aktKalenderwoche ist im Long - Format, so wie es die Funktion haben möchte; das zeigt mir die erste MsgBox auch an.
Die zweite MsgBox bringt aber den Fehler "Argumenttype ByRef unverträglich" ???
Wieso kommt diese Fehlermeldung?

Hat jemand eine Idee und kann helfen?

Gruß
Statler
Antworten Top
#2
Hallo,

dem kann leicht abgeholfen werden:
MsgBox MontagKW((aktKalenderwoche))

Du musst also nur die Variable aktKalenderwoche in zusätzliche runde Klammern setzen bei der Wert-Übergabe an die Funktion MontagKW(...)
Dadurch wird VBA gezwungen, die Variable im Funktionsparameter im ByVal-Übergabeverfahren zu übernehmen. Es wird dadurch verhindert, dass eine Übergabe im ByRef-Verfahren erfolgt, was er offenbar nicht will.

Du kannst natürlich auch anstelle der zusätzlichen Klammerung beim Funktionsaufruf die Funktionsdeklaration ändern in:
Public Function MontagKW(ByVal myKW As Long, Optional ByVal myJahr)
Mit lieben Grüßen
Anton.

Windows 10 64bit
Office365 32bit
Antworten Top
#3
Hallo,

da Du hier ByRef gar nicht benötigst und es auch nicht viel Sinn macht, würde ich lieber die Function ordentlich formulieren und anpassen als das Argument mit Klammern als ByRef zu erzwingen. Ich würde auch hier den Rückgabewert konkret definieren (da nichts anderes als ein Datum herauskommen kann):
Code:
Public Function MontagKW(ByVal myKW As Long, Optional ByVal myJahr) As Date
Gruß
Michael
Antworten Top
#4
Prima. Vielen Dank für Eure Hilfe :)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste