Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1944to1948
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

Array - Filter-Funktion - Fehler 13 "Typen unverträglich"

Array - Filter-Funktion - Fehler 13 "Typen unverträglich"
28.09.2023 08:15:40
KaWi
Hallo liebe Community,

ich habe in Excel-VBA eine Funktion erstellt, um unterschiedliche Arrays nach unterschiedlichen Variablen filtern zu können - je nachdem, wie ich es grad brauche.
Am Ende benötige ich nur die Info: "ist vorhanden" oder "ist nicht vorhanden".
Beim Ausführen erhalte ich jedoch den Laufzeitfehler 13 "Typen unverträglich".

Um dem auf den Grund zu gehen, habe ich innerhalb der Funktion testweise ein weiteres Array erstellt - und hier tritt der Fehler nicht auf.
Also liegt es wohl an den unterschiedlichen Deklarationen des Arrays - in meinem Screenshot (s.u.) kann man die unterschiedlichen Typen von "Bereich" und "test" erkennen.
Ich habe keine Ahnung, was genau ich ändern muss, damit der Fehler nicht mehr auftritt.

Ehrlich gesagt bin ich außerdem sehr verwirrt darüber, dass es überhaupt Abweichungen bei der Deklaration gibt ... ich hätte das gar nicht erwartet.
Aber ich habe auch nicht viel Ahnung von VBA und "wurschtel" mich nur so durch.

Kann mir jemand helfen, mein Problem zu lösen?
Noch besser: Kann der- oder diejenige mir außerdem noch erklären, warum VBA die Arrays so unterschiedlich anlegt?
[Zur Info: Ich bin eigentlich eine Host-COBOL-Programmiererin und deshalb mit diesen vielen unterschiedlichen Datentypen überhaupt nicht vertraut. Mir kann man eher mit 88er Stufen kommen. Dann verstehe ich, worum es geht. ;-)]

Danke für eure Mühe :-)
Katrin

****************************

Hier alle imho notwendigen Informationen zu meinem Problem:
(Wenn ihr doch noch mehr wissen müsst, einfach Bescheid geben.)

(1) Deklaration des Arrays:
Public arrPrüfHO(3) As String

(2) Füllen des Arrays:
a = w_p.Range(Prüf_HO).Value
For subs = 1 To arrPrüfHOrows
arrPrüfHO(subs) = a(subs, 1)
Next subs

(3) Aufruf der Funktion:
If IsValid(arrHO(1), arrPrüfHO) = False Then

(4) Screenshot beim Durchlauf der Funktion inklusive der Überwachungsausdrücke:

Userbild

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array - Filter-Funktion - Fehler 13 "Typen unverträglich"
28.09.2023 08:38:30
MCO
Hallo Katrin!

Offensichtlich erwartet die Funktion "Filter" für die Variable "test" keine Typ VARIANT (nämlich dein Test-Array).
Die Funktion "Filter" sehe ich aber gerade nicht hier aufgeführt.

Vermutlich wird ein Einzelner Wert benötigt, daher schreib die funktion mal wie folgt aus:
Finden = Filter(test(1),inhalt,true,vbtextcompare)


Um den Array in seinen einzelnen Werten zu durchlaufen müsstest du eine Schleife vorsehen, die dann etwas so aussieht:
for i = lbound(test) to ubound(test)

Finden = Filter(test(i),inhalt,true,vbtextcompare)
'weiterverwenden des Ergebnisses
next i

Viel Erfolg!

Gruß, MCO
Anzeige
AW: Array - Filter-Funktion - Fehler 13 "Typen unverträglich"
28.09.2023 09:19:34
KaWi
Hallo MCO,

leider hilft mir deine Antwort nicht weiter:
Zum einen sieht die Filter-Funktion einen Array vor (s.u.)
und zum anderen soll mir diese Funktion die Schleife ja ersparen.

Trotzdem danke für deine prompte Antwort :-)
und einen schönen Tag!
Katrin

*********************************************************

Userbild
AW: Array - Filter-Funktion - Fehler 13 "Typen unverträglich"
28.09.2023 08:45:54
RPP63
Moin!
Wenn Du doch "nur" das Vorkommen eines Begriffs ermitteln willst, brauchst Du doch kein Filter()
Um ein eindimensionales Array (also einen Vektor) aus einem Bereich zu füllen, nehme ich:
arr = Application.Transpose(Range("A1:A4"))

Das Vorhandensein eines Strings überprüfe ich mittels Application.Match()
Wichtig ist die Übergabe von Match an einen Variant.
Nur so ist sicher gestellt, dass auch ein Fehler übergeben werden kann.
Mein Test:
 A
1Himbeere
2Birne
3Apfel
4Pfirsich

VBA:
Modul Modul1
Option Explicit 
Public arr As Variant 
Sub Arraytest() 
arr = Application.Transpose(Range("A1:A4")) 
Debug.Print IsValid("Kirsche", arr) 
Debug.Print IsValid("Apfel", arr) 
End Sub 
 
Function IsValid(Suche$, Vector) As Boolean 
Dim Fund As Variant 
Fund = Application.Match(Suche, Vector, 0) 
If IsError(Fund) Then IsValid = False Else IsValid = True 
End Function 
 

Ergibt im Direktfenster:
Falsch

Wahr

Gruß Ralf
Anzeige
AW: Array - Filter-Funktion - Fehler 13 "Typen unverträglich"
28.09.2023 11:04:04
snb
oder (ohne redundante Deklarationen):

Sub M_snb() 

sn = Application.Transpose([A1:A4])
msgbox format(ubound(filter(sn,"Kirsche"))>-1 ,"yes/no"),,"Kirsche"
msgbox format(ubound(filter(sn,"Apfel"))>-1 ,"yes/no"),,"Apfel"
End Sub


AW: Array - Filter-Funktion - Fehler 13 "Typen unverträglich"
28.09.2023 12:11:22
KaWi
Hallo sbn,

dein Vorschlag funktioniert ebenfalls.
Für meine Bedürfnisse habe ich es etwas abgeändert und es funzt.

Danke für deinen Beitrag. :-)
Ich bin fasiniert davon, welche Möglichkeiten VBA so bietet ... nur verstehen tue ich das alles nicht so wirklich. :-D

Viele Grüße
Katrin

Function isTest(a As Variant, b As Variant) As Boolean
If UBound(Filter(a, b)) > -1 Then
isTest = True
Else
isTest = False
End If
End Function
Anzeige
AW: Array - Filter-Funktion - Fehler 13 "Typen unverträglich"
28.09.2023 09:33:18
KaWi
Hallo Ralf,

ich habe deinen Vorschlag umgesetzt - und er klappt einwandfrei!
Dein Vorschlag ist auch viel eleganter ... mein Code wurde beim Hangeln von Fehler zu Fehler (diese verd*ammten Deklarationen sind andauernd mein Problem) immer komplizierter.
Jetzt ist es mit wenigen Zeilen getan. Das gefällt mir.

Danke! :-)))

Weißt du das einfach so oder hast du eine gute Quelle zum Nachschlagen, die für mich auch interessant sein könnte?

Viele Grüße
und auch dir einen schönen Tag!
Katrin
Danke für die nette Antwort
28.09.2023 09:55:18
RPP63
Prima, dass Du flexibel bist und nicht auf Deinem Ansatz bestehst, Katrin.
Zu Deiner Frage:
Ja, das weiß ich einfach so. ;)
Irgendwo müssen > 20 Jahre Umgang mit VBA ja ihre Spuren hinterlassen.
Hilfreich ist jedenfalls das Mitlesen in Foren wie diesem.
On top dann selbständig Lösungen entwickeln und sie mit denen der Helfer vergleichen.
Oder gleich selbst antworten (mit der Gefahr, sich eine blutige Nase zu holen).
Glaub mir, das motiviert ungemein!

Gruß Ralf
Anzeige
AW: Array - Filter-Funktion - Fehler 13 "Typen unverträglich"
28.09.2023 12:06:09
daniel
Hi
die Idee von Ralf lässt sich noch auf eine Zeile verkürzen:

Function IsValid(Suche$, Vector) As Boolean 

IsValid = IsNumeric(Application.Match(Suche$, Vector, 0))
End Function


und dann stellt sich die frage, ob man überhaupt noch eine neue Funktion dafür erstellt.
Gruß Daniel
AW: Array - Filter-Funktion - Fehler 13 "Typen unverträglich"
28.09.2023 12:31:13
KaWi
Hallo Daniel,

auch deine Variante funktioniert. Ich habe es getestet.
Danke! :-)

VBA hat sehr viel Potential, um sich dort zu verwirklichen ...
Ich muss nur aufpassen, weil - je nach Variante - meine Funktion manchmal bei einem Treffer zu "true" und manchmal bei einem Treffer zu "false" führt.
Nicht dass ich das durch mein Rumprobieren noch verwechsle. :-D

Du hast übrigens Recht: Bei nur einer Zeile Code könnte man das auch ohne Funktion machen. Man spart dadurch ja nix.

Viele Grüße
Katrin
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige