Anzeige
Archiv - Navigation
1352to1356
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

Verständnissfrage Arrays

Verständnissfrage Arrays
21.03.2014 09:43:50
Marcel
Hallo zusammen,
ich habe folgenden Code geschrieben

Private Sub cmdbtn_search_Click()
Dim a_myvalues As Variant
Dim testarray As Variant
Dim a_letztezeile As Integer
a_letztezeile = Cells(Rows.Count, 1).End(xlUp).Row
ReDim a_myvalues(a_letztezeile - 1)
c = 1
For i = 0 To UBound(a_myvalues)
a_myvalues(i) = Range("a" & c).Value
c = c + 1
Next
testarray = Split(txt_search.Text, vbCrLf)
Unload frm_search
'match arrays
a_counter = 0
For i = 0 To UBound(testarray)
x = Application.Match(testarray(i), a_myvalues, 0)
If Not IsNumeric(x) Then frm_result.lbl_result.Caption = frm_result.lbl_result.Caption  _
_
& testarray(i) & vbCrLf
Next
If frm_result.lbl_result.Caption = "" Then MsgBox "Alle Werte vorhanden", vbOKOnly Else  _
Load frm_result: frm_result.Show
End Sub
Das ganze ist ein AddIn, ich habs mal mit angehängt.
Da die Werte, in denen gesucht werden soll, immer in A1:An stehen - kann man jetzt testweise irgendwas in Spalte A eingeben ... das AddIn über das Ribon aufrufen und anschließend nach einem vorhandenen Wert suchen.
Selbst wenn der Wert in dem Array, erzeugt aus dem Inhalt der Spalte A, zufinden ist- läuft
x = Application.Match(testarray(i), a_myvalues, 0)
auf #NV.
Ich kann beim besten Willen nicht nachvollziehen warum?
Möglicherweise ist mein Code auch total umständlich, falls es also schlankere Möglichkeiten gibt, bin ich gern für Vorschläge offen.
Danke
Marcel
AddIn: https://www.herber.de/bbs/user/89773.xlam

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Verständnissfrage Arrays
21.03.2014 10:06:52
Beverly
Hi Marcel,
ich denke, du müsstest noch folgende Unterscheidung machen:
     For i = 0 To UBound(testarray)
If IsNumeric(testarray(i)) Then
x = Application.Match(CDbl(testarray(i)), a_myvalues, 0)
Else
x = Application.Match(testarray(i), a_myvalues, 0)
End If
If Not IsNumeric(x) Then frm_result.lbl_result.Caption = _
frm_result.lbl_result.Caption & testarray(i) & vbCrLf
Next


AW: Verständnissfrage Arrays
21.03.2014 10:12:02
Rudi
Hallo,
funktioniert bei mir
Würde ich aber so ändern:
Private Sub cmdbtn_search_Click()
Dim objValues As Object
Dim TestArray As Variant
Dim a_LetzteZeile As Long
Dim a_Counter As Long
Set objValues = CreateObject("Scripting.dictionary")
a_LetzteZeile = Cells(Rows.Count, 1).End(xlUp).Row
For a_Counter = 1 To a_LetzteZeile
objValues(Cells(a_Counter, 1).Value) = 0
Next
TestArray = Split(txt_search.Text, vbCrLf)
Unload frm_search
'match arrays
For a_Counter = 0 To UBound(TestArray)
If Not objValues.exists(TestArray(a_Counter)) Then
frm_result.lbl_result.Caption = frm_result.lbl_result.Caption & TestArray(a_Counter) &  _
vbCrLf
End If
Next
If frm_result.lbl_result.Caption = "" Then
MsgBox "Alle Werte vorhanden", vbOKOnly
Else
Load frm_result: frm_result.Show
End If
End Sub

Gruß
Rudi

Anzeige
Verbesserung
21.03.2014 10:49:35
Rudi
Hallo,
damit es keine Probleme mit Texten und Zahlen gibt.
Private Sub cmdbtn_search_Click()
Dim objValues As Object
Dim TestArray As Variant
Dim a_LetzteZeile As Long
Dim a_Counter As Long
Set objValues = CreateObject("Scripting.dictionary")
a_LetzteZeile = Cells(Rows.Count, 1).End(xlUp).Row
For a_Counter = 1 To a_LetzteZeile
objValues(CStr(Cells(a_Counter, 1).Value)) = 0
Next
TestArray = Split(txt_search.Text, vbCrLf)
Unload frm_search
For a_Counter = 0 To UBound(TestArray)
If Not objValues.exists(CStr(TestArray(a_Counter))) Then
frm_result.lbl_result.Caption = frm_result.lbl_result.Caption _
& TestArray(a_Counter) & vbCrLf
End If
Next
If frm_result.lbl_result.Caption = "" Then
MsgBox "Alle Werte vorhanden", vbOKOnly
Else
Load frm_result: frm_result.Show
End If
End Sub

Gruß
Rudi
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige