vba variant type mismatch / Excel
sto.teac 15. Aug. 2018, 16:34

Hallo zusammen,

ich habe die unten stehende Funktion, um ein variant array wiederholt erstellen zu lassen.
Leider erhalte ich einen "type missmatch" Fehler den ich nicht verstehe.

Vielen Dank fuer eure Hilfe! 

Code:
Function SetFilterWrd(strFilterKey As String) As Variant
Dim tempAdd As String
Dim eRow As Long, sRow As Long, wCol As Long

tempAdd = FilterAddress(WSKeyWords, "A1:AA4", strFilterKey, True)
wCol = WSKeyWords.Range(tempAdd).Column
eRow = EmptyROW(WSKeyWords, tempAdd, wCol, False)
sRow = WSKeyWords.Range(tempAdd).Row + 1

SetFilterWrd (eRow - sRow)                              '<--| ReDim would cause the error "invalid redim"
For i = 0 To eRow - sRow
    SetFilterWrd(i) = WSKeyWords.Cells(i + sRow, wCol)  '<--| i causes the type missmatch
Next

End Function


Die Funktion wird ueber folgenden Code aufgerufen, der sich im selben Module befindet.
Den unwichtigen kram habe ich mal entfernt, um es (hoffentlich) etwas uebersichtlicher zu machen.

Code:
Sub filterWS(WSName As String)
Dim wWS As Worksheet
Dim arrWSfilterPool(2) As String, strFilterAddress As String, fltrKIFA As String, fltrProj As String, fltrPhase As String
Dim lngFilterRow As Long, lngFilterCol As Long, lngListEnd As Long, sCol As Long
Dim bolDelLine As Boolean: bolDelLine = True

' a bunch of not very interesting stuff

fltrProj = SetFilterWrd(WSadmin.Cells(lngFilterRow, sCol))
fltrPhase = SetFilterWrd(WSadmin.Cells(lngFilterRow, sCol + 1))
fltrKIFA = SetFilterWrd(WSadmin.Cells(lngFilterRow, sCol + 2))


End Sub



[Diese Nachricht wurde von sto.teac am 15. Aug. 2018 editiert.]

HenryV 16. Aug. 2018, 11:16

Hallo
Benutze einen Temp-Variant in deiner Funktion, das sollte das Problem lösen.

Code:
Function SetWord(txt As String) As Variant
    Dim i As Integer
    Dim tempVar() As Variant
    For i = 0 To 10
        ReDim Preserve tempVar(i)
        tempVar(i) = txt & ": " & CStr(i)
    Next
    SetWord = tempVar
End Function

Sub Tester()
    Dim x As Integer
    Dim testVar() As Variant
    testVar = SetWord("Hallo")
    For x = 0 To UBound(testVar)
        Debug.Print testVar(x)
    Next
End Sub


sto.teac 16. Aug. 2018, 14:37

Vielen Dank, ich werde den Code entsprechend anpassen und Rueckmeldung geben.

Aber kannst du mir den Hintergrund erklaeren? Ich verstehe nicht warum der Fehler entsteht und das mag ich nicht 

Danke,
sto

HenryV 16. Aug. 2018, 16:09

Das Zuweisen eines Wertes in der Funktion an die Funktion veranlasst VBA diesen Wert an die Aufrufende Prozedur zurückzugeben.

Code:
SetFilterWrd(i) = WSKeyWords.Cells(i + sRow, wCol)
d.H. diese Zeile entspricht z.B. in VB.net dieser
Code:
Return WSKeyWords.Cells(i + sRow, wCol)

How to Return a result from a VBA Function