Forum:Excel
Thema:vba variant type mismatch
Möchten Sie sich registrieren?
Wer darf antworten? Registrierte Benutzer können Beiträge verfassen.
Hinweise zur Registrierung Sie müssen registriert sein, um Beiträge oder Antworten auf Beiträge schreiben zu können.
Ihr Benutzername:
Ihr Kennwort:   Kennwort vergessen?
Anhang:    Datei(en) anhängen  <?>   Anhänge verwalten  <?>
Grafik für den Beitrag:                                                
                                                       
Ihre Antwort:

Fachbegriff
URL
Email
Fett
Kursiv
Durchgestr.
Liste
*
Bild
Zitat
Code

*HTML ist AUS
*UBB-Code ist AN
Smilies Legende
Netiquette

10 20 40

Optionen Smilies in diesem Beitrag deaktivieren.
Signatur anfügen: die Sie bei den Voreinstellungen angegeben haben.

Wenn Sie bereits registriert sind, aber Ihr Kennwort vergessen haben, klicken Sie bitte hier.

Bitte drücken Sie nicht mehrfach auf "Antwort speichern".

*Ist HTML- und/oder UBB-Code aktiviert, dann können Sie HTML und/oder UBB Code in Ihrem Beitrag verwenden.

T H E M A     A N S E H E N
sto.teac

Beiträge: 66 / 0

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

Beiträge: 714 / 0

SolidWorks 2018 x64 SP4.0
Dell Precision 5820
Intel Xeon W-2125 4x4GHz
NVIDIA Quadro P2000 5GB
32GB RAM
2x Dell U2412M, 24" TFT
Windows 10 Enterprise x64 1703
Microsoft Office 365 ProPlus
Microsoft Visual Studio Enterprise 2019

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


------------------
21 ist nur die halbe Antwort.

sto.teac

Beiträge: 66 / 0

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

Beiträge: 714 / 0

SolidWorks 2018 x64 SP4.0
Dell Precision 5820
Intel Xeon W-2125 4x4GHz
NVIDIA Quadro P2000 5GB
32GB RAM
2x Dell U2412M, 24" TFT
Windows 10 Enterprise x64 1703
Microsoft Office 365 ProPlus
Microsoft Visual Studio Enterprise 2019

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

------------------
21 ist nur die halbe Antwort.