Hot News aus dem CAD.de-Newsletter:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Excel
  vba variant type mismatch

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:   vba variant type mismatch (442 mal gelesen)
sto.teac
Mitglied
CAD Designer / LV series production


Sehen Sie sich das Profil von sto.teac an!   Senden Sie eine Private Message an sto.teac  Schreiben Sie einen Gästebucheintrag für sto.teac

Beiträge: 66
Registriert: 23.07.2010

erstellt am: 15. Aug. 2018 16:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

HenryV
Mitglied
Konstrukteur, Engineering


Sehen Sie sich das Profil von HenryV an!   Senden Sie eine Private Message an HenryV  Schreiben Sie einen Gästebucheintrag für HenryV

Beiträge: 676
Registriert: 18.05.2005

SolidWorks 2018 x64 SP4.0
Dell T3600 Workstation
Intel XENON 6x3.2 GHz
NVIDIA Quadro 4000 2 GB
16GB RAM
2x Dell U2412M, 24" TFT
Windows 7 Professional x64 SP1
Microsoft Office Pro 2010 SP2
Kaspersky Anti-Virus 10.2.4.674
Microsoft VB 2010 Express
SpacePilot von 3Dconnexion

erstellt am: 16. Aug. 2018 11:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für sto.teac 10 Unities + Antwort hilfreich

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.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

sto.teac
Mitglied
CAD Designer / LV series production


Sehen Sie sich das Profil von sto.teac an!   Senden Sie eine Private Message an sto.teac  Schreiben Sie einen Gästebucheintrag für sto.teac

Beiträge: 66
Registriert: 23.07.2010

erstellt am: 16. Aug. 2018 14:37    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

HenryV
Mitglied
Konstrukteur, Engineering


Sehen Sie sich das Profil von HenryV an!   Senden Sie eine Private Message an HenryV  Schreiben Sie einen Gästebucheintrag für HenryV

Beiträge: 676
Registriert: 18.05.2005

SolidWorks 2018 x64 SP4.0
Dell T3600 Workstation
Intel XENON 6x3.2 GHz
NVIDIA Quadro 4000 2 GB
16GB RAM
2x Dell U2412M, 24" TFT
Windows 7 Professional x64 SP1
Microsoft Office Pro 2010 SP2
Kaspersky Anti-Virus 10.2.4.674
Microsoft VB 2010 Express
SpacePilot von 3Dconnexion

erstellt am: 16. Aug. 2018 16:09    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für sto.teac 10 Unities + Antwort hilfreich

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.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2019 CAD.de | Impressum | Datenschutz