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

application.match application.vlookup Fehler 2042

application.match application.vlookup Fehler 2042
05.02.2016 12:38:12
Timm
Hallo zusammen,
Ich versuche aus einem Array ein bestimmtes Wort zu suchen, um danach einen Wert aus der selben Zeile zu übernehmen.
Mein Array (vnt_Ausgabe) hat die Dimension (4000,3).
In der ersten Spalte steht ein Begriff, also ein String. in der 2. und 3. Spalte können Strings oder Zahlen stehen.
Ich habe es mit Application.Vlookup versucht. Gebe ich als letztes Argument True ein, funktioniert der Code an sich, jedoch findet er nicht das gesuchte Wort. Ich habe es mit dem Suchwort "Datei" (Im Array Zeile 2) versucht, jedoch findet er dann so was wie "3S_HIST_Zeit_z3" (Im Array Zeile 1475). "Datei" kommt auf jedenfall in dem Array in der ersten Spalte vor! Setze ich das letzte Argument auf "FALSE" (0) um den exakten String zu finden, gibt er mir bei erg den Fehler 2042 aus. Ich bin völlig ratlos. Ich habe schon 2 Stunden gegoogelt, meine Variablen als Variant deklariert, nichts hat geholfen.
Ich habe auch versucht, aus dem Array die erste Spalte zu übernehmen und darin mit Application.Match zu suchen. Da ist der selbe Fehler. Sobald ich False eingebe, gibt er mir bei erg1 den Fehler 2042 zurück.
Dim erg As Variant
Dim erg1 As Variant
Dim arrtmp As Variant
Dim gesucht As variant
gesucht = "Datei"
arrtmp = WorksheetFunction.Index(vnt_Ausgabe, 0, 1) 'übernimmt Spalte1
'hiermit sehe ich, wie die Arrays aussehen, die gesuchten Wörter sind definitiv dabei
'ActiveSheet.Range(Cells(1, e + 2), Cells(2000, e + 2)) = arrtmp
'ActiveSheet.Range(Cells(1, e + 4), Cells(2000, e + 7)) = vnt_Ausgabe
'würde mir die Zeile ausgeben:
erg1 = Application.Match(gesucht, arrtmp, 0)
'würde mir den Zelleninhalt ausgeben:
erg = Application.VLookup(gesucht, vnt_Ausgabe, 1, 0)
Kann mir jemand helfen?

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: application.match application.vlookup Fehler 2042
05.02.2016 12:55:47
Daniel
Hi
kannst du mal die Datei hochladen?
Gruß Daniel

AW: application.match application.vlookup Fehler 2042
05.02.2016 13:49:42
Timm
Hallo,
es handelt sich um vertrauliche Daten, ich hab das Ganze etwas verändert, die Zusammensetzung der Daten (Zahlen,Buchstaben) jedoch so gelassen (erg würde noch weiter verwendet werden). Mit "True" findet er wieder einen falschen Eintrag, mit "False" wieder gar keinen. vnt_Ausgabe wird aus einer Text-Datei generiert, die habe ich hier gekürzt. Das hochladen wird verhindert, hier ist der angepasste Code:
Sub test()
Dim Arr
Dim datei
Dim FSO
Dim L As Long
Dim Tmp As Variant
Dim vnt_Ausgabe As Variant
Dim i As Integer
Dim Str_String, document, pfad As String
Dim e As Integer
Dim c As Range
'Textdatei auslesen
Set FSO = CreateObject("Scripting.FilesystemObject")
pfad = ""   'Anpassen
document = Dir(pfad & "*.txt")
Do While document  ""
Set datei = FSO.OpentextFile(pfad & document)
Str_String = datei.readall
datei.Close
'Nach Datensätzen splitten:
Arr = Split(Str_String, vbCrLf)
ReDim vnt_Ausgabe(UBound(Arr), 10) '10 Spalten reichen ?
For L = 0 To UBound(Arr)
'Jeden Datensatz nach Werten splitten:
Tmp = Split(Arr(L), vbTab)
For i = 0 To UBound(Tmp)
'Jeden Wert in das Array vnt_Ausgabe umschaufeln:
vnt_Ausgabe(L, i) = Tmp(i)
Next
Next
'Ausgeben. Anpassen.
'erste freie Spalte in Zeile 2:
e = Application.ActiveWorkbook.ActiveSheet.Cells(2, Columns.Count).End(xlToLeft).Column + 1
'suchen ob die datei schon in der tabelle vorhanden ist
Set c = ActiveSheet.Range("2:2").Find(document, LookIn:=xlValues, LookAt:=xlWhole)
If Not c Is Nothing Then
GoTo Next_doc_2
End If
'### Gesuchte Variablen in Array suchen
Dim erg As Variant
Dim erg1 As Variant
Dim arrtmp As Variant
Dim gesucht As Variant
gesucht = "Datei"
arrtmp = WorksheetFunction.Index(vnt_Ausgabe, 0, 1) 'Spalte1
'hiermit sehe ich, wie die Arrays aussehen, die gesuchten wörter sind definitiv dabei:
'ActiveSheet.Range(Cells(1, e + 2), Cells(2000, e + 2)) = arrtmp
'ActiveSheet.Range(Cells(1, e + 2), Cells(2000, e + 6)) = vnt_Ausgabe
erg1 = Application.Match(gesucht, arrtmp, 1)           'Zeile
erg = Application.VLookup(gesucht, vnt_Ausgabe, 1, 1)     'Zelleninhalt
Next_doc_2:
document = Dir$()
Loop
End Sub

so sieht die txt Datei aus: (leider gehen die Leerzeichen/Tabs verloren)
Ver 1.2.6.107
Datei 2016.20160201-0720
LIAR-Datei 8j3505lumr.dia
Datum 01.02.2016
Zeit 07:20
Programmstand 8j3616
Prog_MZG 8j35616
Ort Paris
Bearbeiter Max,Mustermann
Benutzer maxmus
Kommentar Paris
Auftrag Nr
Beschreibungsdatei 8j35050
DTC_CLEAR 1
:
DiagmeRA-Grundwerte:
INFO5 8j36160iv73220v 2056
MT_NR_DATA 2901037700
DATA_BGS 0F2E12
Diagtest 06BB1C
SGtddNr 0000000000
A_fbs_serie 0.00
N_kl17 13.00
Odo_Rel_Lang 102008.00
Odo_Rel 3208.00
kmubmclr_w 318.00
BLTPT_Odo_Rel_Frz 102008.100
Lu_w 144.5703
bk_w 0.0000
tjsn 30.00
nk 10.152
bnzez_w 0.000
knte_w 0.000
qsa 11.75
ctjenxtted 12.50
Kannst du damit was anfangen?
LG

Anzeige
AW: application.match application.vlookup Fehler 2042
05.02.2016 14:26:02
Daniel
Hi
der Code müsste eigentlich funktionieren.
der Suchbegriff muss aber in der Spalte vorhanden sein, in genau dieser Schreibweise.
die Variante mit letztem Parameter = 1 darfst du nur verwenden, wenn die Liste aufsteigend sortiert ist, das die Grundvoraussetztung für diese Variante.
du musst also schauen, ob datsächlich nur "Datei" dort steht und nicht irgendwasanderes (auch nicht "Datei ")
vielleicht ist es einfacher, wenn du das Array selber mit einer Schleife durchsuchst.
dann musst du zwar die Suchschleife programmieren, aber das kannst du dann direkt mit dem 2-D-Array machen.
Da du direkt mit dem Array arbeitest, ist das auch nicht viel langsamer als die Application.Match-Funktion (diese sucht nach dem gleichen Prinzip)
das Verwenden von Application.Match ist beim Arbeiten mit Arrays nur dann sinnvoll, wenn die Listen sortiert sind und du mit dem 3. Parameter = 1 arbeitest, weil dann aufgrund der Sortierung ein wesentlich schnellerer Suchalgorythmus verwendet wird als bei der unsortierten Suche und dieser etwas auswendiger zu programmieren ist als eine einfache Schleife mit einer Abfrage.
Gruß Daniel

Anzeige
AW: application.match application.vlookup Fehler 2042
05.02.2016 14:34:56
Timm
Hallo,
ich habs grad mal mit "Datei*" ausprobiert. Es hat funktioniert. DANKE!!
Manchmal ist VBA zum verfluchen.
LG

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige