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

Excel VBA Suche - Typen Unverträglich

Excel VBA Suche - Typen Unverträglich
20.06.2022 17:04:03
Gerwin
Hallo Liebes Forum,
bislang konnte ich dank des tollen Forums meine Probleme immer durch vorhandene Beiträge lösen, gegenwärtig weiß ich jedoch nicht mehr weiter.
Diese Frage baut auf dem tollen Code von Rudi auf, den ich im Archiv gefunden habe. https://www.herber.de/forum/archiv/1364to1368/1367192_Effiziente_Suchfunktion_fuer_Datenbank.html
Mein Problem ist gegenwärtig, dass egal wie ich es anstelle eine Fehlermeldung "Typen Unverträglich" für die Zeile

j = LBound(arrTmp, 2)
bekomme.
Wenn ich den Code in einer Blankoarbeitsmappe ausprobiere, läuft er. Bei mir jedoch nicht. Jeglicher Schutz ist deaktiviert und auch alle Events habe ich ausgeschaltet zum testen, aber auch nix.
Weiß hier jemand rat?
Viele Grüße
Gerwin

Option Explicit
Dim arrWerte, bolCode As Boolean, sLast
Private Sub Suchfenster_Initialize()
sLast = txtSuche
arrWerte = DasArray
txtSuche = ""
End Sub
Private Sub lbxFund_Click()
Dim Tabellenblatt As Worksheet
If Not bolCode Then
With lbxFund
On Error GoTo Errorhandler
Application.ScreenUpdating = False
Call AUFBlenden
Call S_AUS_DB
Sheets("DATENBANK").Range("B1").Value = "$B$7"
Call S_AN_DB
Sheets("ZELT 1").Visible = True
Sheets("ZELT 2").Visible = True
Sheets("ZELT 3").Visible = True
Sheets("CONTAINER").Visible = True
Application.ScreenUpdating = True
Worksheets(.Column(0)).Activate
Range(.Column(1)).Select
For Each Tabellenblatt In ThisWorkbook.Worksheets
If Tabellenblatt.Name  ThisWorkbook.ActiveSheet.Name Then
Tabellenblatt.Visible = xlSheetHidden
End If
Next Tabellenblatt
End With
lbxFund.ListIndex = -1
Hide
End If
Application.EnableEvents = True
Exit Sub
Errorhandler:
Application.EnableEvents = True
Call AUFBlenden_AUS
MsgBox "Kein Gültiger Datensatz ausgewählt", vbCritical, "Fehler"
Exit Sub
End Sub
Private Sub txtSuche_Change()
'Application.EnableEvents = False
Dim i As Long, j As Integer, oTmp As Object, arrList, oT, n As Long, arrTmp
bolCode = True
If txtSuche = "" Then
lbxFund.Clear
sLast = ""
'Application.EnableEvents = True
Exit Sub
End If
If sLast  "" Then
If txtSuche Like sLast & "*" Then
arrTmp = lbxFund.List
Else
arrTmp = arrWerte
End If
Else
arrTmp = arrWerte
End If
Set oTmp = CreateObject("Scripting.dictionary")
j = LBound(arrTmp, 2)
For i = LBound(arrTmp) To UBound(arrTmp)
If LCase(arrTmp(i, j + 2)) Like "*" & LCase(txtSuche) & "*" Then
oTmp(i) = Array(arrTmp(i, j), arrTmp(i, j + 1), arrTmp(i, j + 2))
End If
Next
If oTmp.Count Then
ReDim arrList(1 To oTmp.Count, 1 To 3)
For Each oT In oTmp
n = n + 1
arrList(n, 1) = oTmp(oT)(0)
arrList(n, 2) = oTmp(oT)(1)
arrList(n, 3) = oTmp(oT)(2)
Next
lbxFund.List = arrList
sLast = txtSuche
Else
lbxFund.Clear
sLast = ""
End If
bolCode = False
Application.EnableEvents = True
End Sub
Private Function DasArray()
Application.EnableEvents = False
Dim oCells As Object, wks As Worksheet, rngC As Range
Dim oKey, arrTmp, n As Long
Set oCells = CreateObject("Scripting.dictionary")
For Each wks In Worksheets
For Each rngC In wks.UsedRange.Cells
If rngC  "" Then
oCells(rngC) = rngC.Value
End If
Next
Next
ReDim arrTmp(1 To oCells.Count, 1 To 3)
For Each oKey In oCells
n = n + 1
arrTmp(n, 1) = oKey.Parent.Name
arrTmp(n, 2) = oKey.Address
arrTmp(n, 3) = oCells(oKey)
Next
DasArray = arrTmp
Application.EnableEvents = True
End Function

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel VBA Suche - Typen Unverträglich
20.06.2022 17:29:40
Daniel
Hi
wenn der Fehler kommt, ist arrTmp kein 2-Dimensionales Array.
füge mal direkt vor der Zeile: j = LBound(arrTmp, 2)
die Zeile Msgbox Vartype(arrTmp) ein.
das sollte auf jeden Fall ein Wert größer 8000 sein, sonst hast du kein Array.
Dann musst du dich auf die Suche machen, wo in deinem Code die Variable arrTmp erstellt und befüllt wird und schauen, was da passiert und ob da ein gültiges 2-Dimensionales Array erstellt wird.
wenn man nämlich bsp arrTmp = Range(...) also einen Zellbereich der Variable zuweist, entsteht nur dann ein zweidimensionales Array, wenn Range(...) aus mindestens zwei Zellen besteht. Ist der Zellbereich nur eine Zelle groß, wird arrTmp ein normales Array.
bei der Fehlersuche ist es auch hilfreich, alle On Error - Sprünge erstmal zu deaktivieren. Bei der Fehlersuche haben solche Fehlerbehandlungen den Nachteil, dass sie wichtige Informationen, die du zur Behebung der Fehlerursache benötigst, vernichten (wo passiert der Fehler, welche Werte haben die Variablen wenn der Fehler passiert)
und dann musst du mal schauen, wo die unterschiede liegen wenn du den Code mit deinen unterschiedlichen Varianten testest.
da es ziemlich aufwendig ist, solchen Code nur rein theoretisch durchzugehen und nach Fehlern zu analysieren (also nach meinem Verständnis dann nicht mehr unter die kostenfreie Nachbarschaftshilfe wie sie im Forum üblich ist, fällt, sondern eine kostenpflichtige Dienstleistung wäre) , solltest du immer eine Beispieldatei, in welcher man den Fehler nachvollziehen kann, mit hochladen.
Gruß Daniel
Anzeige

188 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige