Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1684to1688
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Wert aus Funktion in Sub Übernehmen

Wert aus Funktion in Sub Übernehmen
16.04.2019 13:38:13
BLangmantl
Hallo, ich habe folgende Routine geschrieben:
Sub StartparameterSetzen()
On Error GoTo err
Dim i As Integer
Dim lngAllTab As Long, lngEntTab As Long, lngAdmTab As Long, lngUsrTab As Long
Dim strTWPath As String
strTWPath = ThisWorkbook.Path
'Einträge löschen
For i = 1 To Sheets.Count
With Parameter.Cells(1, 1)
.Offset(i, 0).Value = ""
.Offset(i, 1).Value = ""
.Offset(i, 1).Value = ""
End With
Next i
Parameter.Range("E2:E6").Value = ""
Parameter.Range("K2").Value = ""
Parameter.Range("K3").Value = ""
'Tabellenzähler zurücksetzen
'Tabellennamen in Tabelle schreiben
For i = 1 To Sheets.Count
lngAllTab = lngAllTab + 1
With Parameter.Cells(1, 1)
.Offset(i, 0).Value = Sheets(i).Name
.Offset(1, 4).Value = lngAllTab
Select Case Left(Sheets(i).Name, 2)
Case Is = "A_"
.Offset(i, 1).Value = "Administrationstabelle"
.Offset(i, 2).Value = "Nein"
lngAdmTab = lngAdmTab + 1
.Offset(3, 4).Value = lngAdmTab
Case Is = "E_"
.Offset(i, 1).Value = "Entwicklungstabelle"
.Offset(i, 2).Value = "Nein"
lngEntTab = lngEntTab + 1
.Offset(4, 4).Value = lngEntTab
Case Else
.Offset(i, 1).Value = "Benutzertabelle"
.Offset(i, 2).Value = "Ja"
lngUsrTab = lngUsrTab + 1
.Offset(2, 4).Value = lngUsrTab
End Select
End With
Next i
Parameter.Range("A:C").EntireColumn.AutoFit
Parameter.Range("K2").Value = Trim(strTWPath)
Parameter.Range("K3").Value = Trim(Environ("Username"))
Call fncDateinamenErstellen(lngAllTab, lngEntTab, lngAdmTab, lngUsrTab)
'Hier soll der Wert aus der Funktion übernommen werden
strDateiname = fncDateinamenErstellen
Exit Sub
err:
'Errorhandler
MsgBox "Es gab einen Fehler mit der Fehlernummer: " & err.code & vbLf & "und der Fehlerbeschreibung:" & vbLf & err.Description, vbOKOnly + vbCritical, strFM
End Sub
Private Function fncDateinamenErstellen(ByVal lngAnzAllTab As Long, lngAnzEntTab As Long,  _
lngAnzAdmTab As Long, lngAnzUsrTab As Long) As String
Const strDateiBez As String = "FR_Mitgliederliste", strUS As String = "_", strBL As String = "\" _
, strDot As String = ".", _
strDateiEndung As String = "xslm", strEMTAG As String = "qad", strVersion As String = "Ver"
Dim strDateiSuffix As String, strEMAbfrage As String, strDateinameBauVorne,  _
strDateinameBauHinten
strDateiSuffix = Format(Now(), "yymmdd")
strEMAbfrage = Parameter.Range("N1")
strDateinameBauVorne = strDateiSuffix & strUS & strDateiBez & strUS & strVersion & strUS &  _
lngAnzAllTab & strDot & lngAnzUsrTab & strDot & lngAnzAdmTab & strDot & lngAnzEntTab
strDateinameBauHinten = strDot & strDateiEndung
Select Case strEMAbfrage
Case Is = "Ja"
fncDateinamenErstellen = strDateinameBauVorne & strUS & strEMTAG &  _
strDateinameBauHinten
Case Else
fncDateinamenErstellen = strDateinameBauVorne & strDateinameBauHinten
End Select
End Function

strDateiname ist eine Globale Variable, deshalb nicht im Sub deklariert.
Meine Frage, wie übernehme ich den Wert der Funktion in diese Variable, so wie ich es geschrieben habe zeigt er mir immer die Fehlermeldung an: Fehler beim Kompilieren, Argument ist nicht optional.
Wer kann mir da helfen? Die Funktion macht genau das was sie soll, das habe ich bereits getestet, weiß nur nicht, wie ich den Wert ins sub bekomme
Danke schon mal

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wert aus Funktion in Sub Übernehmen
16.04.2019 13:57:04
Marco
Hallo,
habe jetzt nicht weiter geschaut - aber versuche einmal:
Public Function fncDateinamenErstellen ...
VG
Marco
AW: Wert aus Funktion in Sub Übernehmen
16.04.2019 14:04:33
BLangmantl
hallo Marko,
leider bringt das nicht den gewünschten Effekt, wenn ich folgenden Befehl eingebe strDateiname = fncDateinamenErstellen bringt mir auch nicht den Wert und die gleiche Fehlermeldung, also kann das nicht die Lösung sein
AW: Wert aus Funktion in Sub Übernehmen
16.04.2019 14:05:04
BLangmantl
Selbst wenn ich die Funktion auf Public ändere
AW: Wert aus Funktion in Sub Übernehmen
16.04.2019 14:42:25
Marco
Hallo,
Sorry ich habe jetzt momentan nicht wirklich Zeit um mir das genau anzuschauen.
Was mir jedoch direkt aufgefallen ist:
1. die Funktion erwartet 4 Variabeln - (ByVal lngAnzAllTab As Long, lngAnzEntTab As Long, _
lngAnzAdmTab As Long, lngAnzUsrTab As Long). Die musst Du natürlich übergeben. z.B.
strDateiname = fncDateinamenErstellen(1, 2, 3, 4)
2. Die Constanten und Variabeln würde ich immer ausserhalb am Anfang des Modules festlegen und aufgrund der Übersicht einzeln deklarieren.
Aber vielleicht hilft es Dir schon einen kleinen Schritt weiter.
VG
Marco
Anzeige
AW: Wert aus Funktion in Sub Übernehmen
16.04.2019 14:47:10
BLangmantl
Hallo Marko, danke, aber ich übergebe vier Variablen, die ja in der Funktion beareitet werden und daraus eine gemacht wird, muss ich dann trotzdem wieder alle vier übergben? macht das Sinn?
AW: Wert aus Funktion in Sub Übernehmen
16.04.2019 15:02:32
Zwenn
Hallo,
der zurückgegebene Wert einer Funktion wird direkt an eine Variable übergeben. den Call Ausdruck verwendest Du, wenn Du eine Sub aufrufst, die keinen Wert zurückgibt.
Statt:

Call fncDateinamenErstellen(lngAllTab, lngEntTab, lngAdmTab, lngUsrTab)
'Hier soll der Wert aus der Funktion übernommen werden
strDateiname = fncDateinamenErstellen

Schreibe folgendes:

strDateiname = fncDateinamenErstellen(lngAllTab, lngEntTab, lngAdmTab, lngUsrTab)

In der Zeile strDateiname = fncDateinamenErstellen rufst Du die Funktion noch einmal ohne Parameter auf. Das geht nicht. Der Bezeichner fncDateinamenErstellen speichert außerdem keine Werte, sondern es ist nur der Funktionsname.
Wenn Du den Wert einer Variable neu setzen willst, brauchst Du für Globale Variablen allerdings keine Funktion mit Rückgabewert. Du kannst den Wert einfach direkt in einer Sub schreiben.
Allerdings rate ich vom Einsatz globaler Variablen ab. Das sehen hier manche anders, auch von den erfahrenen Leuten. Es gilt jedoch, eine Variable wird nur in der Umgebung bekannt gemacht, in der sie auch benötigt wird. Beschäftige Dich einfach mal mit dem Gültigkeitsbereich von Variablen. Z.B. hier:
http://www.vba-tutorial.de/variablen/lebensdauer.htm
Viele Grüße,
Zwenn
Anzeige
AW: Wert aus Funktion in Sub Übernehmen
16.04.2019 14:48:16
EtoPHG
Hallo,
Da ist noch mehr Undefiniertes im Code.
Eine Function ruft man nicht mit einem Call auf, das macht man nur mit Sub (Proceduren), also lösche den Call und setze die Parameter hinter die Zuweisung!
strDateiname = fncDateinamenErstellen(lngAllTab, lngEntTab, lngAdmTab, lngUsrTab)
Gruess Hansueli
AW: Wert aus Funktion in Sub Übernehmen
16.04.2019 14:53:04
BLangmantl
Danke, dass hat mich weiter gebracht

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige