Microsoft Excel

Herbers Excel/VBA-Archiv

VBA Prozeduraufruffehler oder ein ungültiges Argum


Betrifft: VBA Prozeduraufruffehler oder ein ungültiges Argum von: SteinApfel
Geschrieben am: 19.01.2019 15:14:01

Hey liebe Community,
ich habe erneut ein Problem. Im Folgenden könnt ihr die beiden Funktionen einsehen. Die erste Funktion soll Daten an die zweite weitergeben, da das die einzigen Variablen sind, der Rest ist davon abhängig oder ergibt sich.

Die erste Funktion läuft ohne Probleme durch, die zweite jedoch "meckert" an der stelle von Var1V (Match-Funktion). Dort ist angeblich ein Prozeduraufruffehler oder ein ungültiges Argument, ich mir aktuell nicht vorstellen woran es liegt.

Ich hoffe Ihr könnt mir schnell helfen. Vielen Dank für eure Bemühungen.
Bei Fragen gerne an mich wenden, dann füge ich weitere Informationen hinzu.

Beste Grüße
Hendrik

Public Function LinInt_Linienlast()
    Dim ListeV As range
    Dim ListeH As range
    Dim intVert As Integer
    Dim intHori As Integer
    Dim ListEnde As Integer
    
    With WSFeldmeier
        Set ListeV = .range("I15:I28")
        Set ListeH = .range("J14:O14")
        intVert = 15
        intHori = 9
        ListEnde = 28
        Call LinInt_Linienlast_Hilfsfunktion(ListeV, ListeH, intVert, intHori, ListEnde)
        IntCf = IntC
    End With
End Function
Public Function LinInt_Linienlast_Hilfsfunktion()
    Dim Vert As Double
    Dim Hori As Double
    Dim X1 As Double
    Dim X2 As Double
    Dim Y1 As Double
    Dim Y2 As Double
    Dim Z1 As Double
    Dim Z2 As Double
    Dim Z3 As Double
    Dim Z4 As Double
    Dim H1 As Double
    Dim H2 As Double
    Dim ListeV As range
    Dim ListeH As range
    Dim Var1V As Double
    Dim Var2V As Double
    Dim Var1H As Double
    Dim Var2H As Double
    Dim VarV As Double
    Dim VarH As Double

    If WSEinst.CBLagerung = "allseitig liniengelagert" Then
        Vert = WSEinst.range("Breite") / WSEinst.range("Höhe")
        Hori = WSEinst.range("hHolm") / WSEinst.range("Höhe")
        
        With WSFeldmeier
            If Hori > 0.5 Then Hori = 0.5 - (Hori - 0.5)
            
            Var1V = Application.WorksheetFunction.Match(Vert, ListeV, 1) + intVert

.....
End Function

  

Betrifft: AW: VBA Prozeduraufruffehler oder ein ungültiges Argum von: Hajo_Zi
Geschrieben am: 19.01.2019 15:18:10

Die Variable ListeV ist nicht belegt.

GrußformelHomepage

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
Die Beiträge werden auch ignoriert, es erfolgt keine Antwort.


  

Betrifft: AW: VBA Prozeduraufruffehler oder ein ungültiges Argum von: SteinApfel
Geschrieben am: 19.01.2019 15:24:19

In wie fern ist diese nicht belegt? Oder genauer gefragt, was meinst du mit "belegt"?
"Set ListeV = ...." habe ich doch gemacht und wird anschließend weitergegeben!?


  

Betrifft: AW: VBA Prozeduraufruffehler oder ein ungültiges Argum von: Hajo_Zi
Geschrieben am: 19.01.2019 15:26:00

aber nicht in dieser Funktion, da steht nur die dimensionierung und damit ist es Leer.

Gruß Hajo


  

Betrifft: AW: VBA Prozeduraufruffehler oder ein ungültiges Argum von: SteinApfel
Geschrieben am: 19.01.2019 15:29:34

Oh habe die Deklaration nicht rausgenommen von ListeV und ListeH.

Nachdem ich die jetzt in der unteren/zweiten Funktion rausgenommen habe sollten diese nun nicht mehr leer sein.
Jetzt kommt an selber Stelle folgender Fehler:
"Die Match-Eigenschaft des WorksheetFunction-Objektes kann nicht zugeordnet werden."


  

Betrifft: AW: VBA Prozeduraufruffehler oder ein ungültiges Argum von: Luschi
Geschrieben am: 19.01.2019 15:36:24

Hallo SteinApfel,

Du übergibst zwar die Variablen:
Call LinInt_Linienlast_Hilfsfunktion(ListeV, ListeH, intVert, intHori, ListEnde)
aber die aufgerufene Function nimmt nicht entgegen:
Public Function LinInt_Linienlast_Hilfsfunktion()

wenn schon dann so:
Public Function LinInt_Linienlast_Hilfsfunktion(rgListeV As Range, _
rgListeH As Tange, _
iIntVert As Integer _
iIntHori As Integer, _
iListEnde As Integer)
Damit kennt diese HilfsFunktion auch die vorher definierten Variablen.
Oder Du mußt die Variablen auslagern und 'Public' machen.

Gruß von Luschi
aus klein-Paris


  

Betrifft: AW: VBA Prozeduraufruffehler oder ein ungültiges Argum von: SteinApfel
Geschrieben am: 19.01.2019 15:48:12

Auch dir Danke für deine Hilfe.

Nun funktioniert es. :)


  

Betrifft: AW: VBA Prozeduraufruffehler oder ein ungültiges Argum von: Zwenn
Geschrieben am: 19.01.2019 15:38:00

Hallo SteinApfel,

du deklarierst alle Variablen in der zweiten Funktion im Funktionsrumpf, auch die, die Du übergeben willst. Das ist falsch. Variablen, die Du übergeben willst gehören in die Klammern im Funktionskopf.

Wenn Du folgende Prozedur hast, aus der Du eine andere mit Parametern aufrufen willst:

Sub Test1()
  Dim variableFuerSub2 As Integer
  variableFuerSub2 = 100
  call TestSub2(variableFuerSub2)
End Sub

Dann muss die zweite Procedur NICHT so aussehen (Deine Variante):
(variableFuerSub2 wird lokal deklariert und mit 0 vorbelegt)
Sub ResrSub2()
  Dim variableFuerSub2 As Integer
  ... mach was mit der Variable
End Sub

Sondern so:
(variableFuerSub2 wird als Übergabeparameter deklariert und bekommt die 100 aus der aufrufenden Prozedur verpasst)
Sub ResrSub2(erwarteteZahl As Integer)
  ... mach was mit der übergebenen Variable
End Sub

Wie Du siehst, darf der Name der Variablen im Prozedurkopf von der übergebenen Variable abweichen. Wichtig ist, dass der Datentyp gleich ist. Im Beispiel Integer.

Ferner hast Du Funktionen geschrieben. Die sind dafür da, um in Tabellenblättern mit ihnen zu arbeiten oder wenn Du aus der aufgerufenen Funktion einen Wert an die aufrufende Funktion zurückliefern willst. Wenn das nicht der Fall ist, verwendet man Subs. Die können keine Werte zurückgeben.

Viele Grüße,

Zwenn


  

Betrifft: AW: VBA Prozeduraufruffehler oder ein ungültiges Argum von: SteinApfel
Geschrieben am: 19.01.2019 15:47:41

Danke für die ausführliche Antwort.
Habe es angepasst, ebenso habe ich Subs aus den Funktionen gemacht. Das lag noch daran, dass ich zuerst vorhatte Werte entsprechend zu übergeben, aber das hat sich jetzt doch wieder geändert :D

Nun funktioniert es.


  

Betrifft: AW: VBA Prozeduraufruffehler oder ein ungültiges Argum von: Nepumuk
Geschrieben am: 19.01.2019 15:31:40

Hallo,

damit die Parameter in der aufgerufenen Prozedur ankommen, musst du sie auch deklarieren. Also:

Public Function LinInt_Linienlast_Hilfsfunktion(ListeV As Range, _
    ListeH As Range, intVert As Integer, intHori As Integer, ListEnde As Integer)


Warum benutzt du eigentlich Funktionen wenn du keinen Rückgabewert erwartest? Dafr gibt es Sub - Prozeduren.

Gruß
Nepumuk


  

Betrifft: AW: VBA Prozeduraufruffehler oder ein ungültiges Argum von: SteinApfel
Geschrieben am: 19.01.2019 15:46:19

Okay, dann habe ich es jetzt. :)

Vielen Dank für die schnelle und ausführliche Antwort. Das hat mir sehr gut weitergeholfen.