Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
892to896
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
892to896
892to896
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

vlookup

vlookup
10.08.2007 16:39:00
Rainer
moin
ich habe folgende files. ich lade sie mal beide kurz rauf, da mir der fehler sehr dubios vorkommt und ich mir vorstellen kann, dass man nur mit dem code nicht drauf kommen könnte. falls doch umso besser ;-)
http://www.uploadagent.de/files/1186756569/TMS_01_Test.xls -> matrix
http://www.uploadagent.de/files/1186756715/TOTAL-Kundenklassifikation_Test.xls -> Primärschlüssel (Kundenklassifikation)
Das File Kundenklassifikation enthält folgenden code:
Option Explicit

Sub Transportdatenlesen()
' liest transportkosten ein
Dim wksQuelle As Worksheet
Dim wksZiel As Worksheet
Dim rngQuelle As Range
Dim lngZeile As Variant
Dim lngAbZeile As Long
Dim lngBisZeile As Long
Dim lngSpalteZielA As Long
Dim wksQuelleSpalteAnfang As Long
Dim wksQuelleSpalteZiel As Long
lngSpalteZielA = 1 ' =A
lngAbZeile = 2
wksQuelleSpalteAnfang = 3
wksQuelleSpalteZiel = 4
Dim wbkQuelle As Workbook
' fragt ab ob file schon geöffnet ist
On Error Resume Next
Set wbkQuelle = Workbooks("TMS_01_Test.xls")
On Error GoTo 0
If wksQuelle Is Nothing Then
Set wbkQuelle = Workbooks.Open("J:\FinanzControlling\Leitung\Kundenrentabilität\Projekt 2007\   _
_
_
Daten\TMS_01_Test.xls")
End If
Set wksQuelle = Workbooks("TMS_01_Test.xls").Worksheets("tabelle1")
Set wksZiel = Workbooks("TOTAL-Kundenklassifikation_Test.xls").Worksheets("Kundenklassifikation  _
_
_
")
lngBisZeile = wksZiel.Cells(Rows.Count, lngSpalteZielA).End(xlUp).Row
' macht schlaufe für sverweis
For lngZeile = lngAbZeile To lngBisZeile
If Application.WorksheetFunction.CountIf(wksQuelle.Range(wksQuelle.Columns( _
wksQuelleSpalteAnfang), wksQuelle.Columns(wksQuelleSpalteZiel)), wksZiel.Cells(lngZeile,  _
lngSpalteZielA)) > 0 Then
wksZiel.Cells(lngZeile, lngSpalteZielA + 6).Value = _
Application.WorksheetFunction.VLookup(wksZiel.Cells(lngZeile, lngSpalteZielA), wksQuelle. _
Range(wksQuelle.Columns(wksQuelleSpalteAnfang), wksQuelle.Columns(wksQuelleSpalteZiel)), 2,  _
False)
Else
wksZiel.Cells(lngZeile, lngSpalteZielA + 6).Value = "Hab da nix gefunden!"
End If
Next
' schliesst quelldatei
ActiveWorkbook.Close
End Sub


nun, sobald ich das makro starte, wird das andere file geöffnet und die funktion vlookup beginnt. irgendwann krieg ich dann den Laufzeitfehler 1004, Die Vlookupeigenschaft des Worksheetfunction-Objektes kann nicht zugeordnet werden.
zuvor hatte ich das selbe Problem, da gewisse spalten nicht als Zahlen formatiert wurden. dies ist jedoch jetzt behoben. Er hört mittendrin auf, bei einem Wert den er nicht findet. Falls dies passiert hab ich ihn aber angewiesen "Hab nix gefunden" zu sagen. ich bin nun seit stunden dran, es geht mir einfach nicht in den kopf...warscheinlich bin ich einfach zu doof dazu...
kann mir jemand helfen?
gruss
andy

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: vlookup
10.08.2007 17:25:49
Ramses
Hallo
"...Falls dies passiert hab ich ihn aber angewiesen "Hab nix gefunden" zu sagen...."
Wo ?
Du hast eine Else-Anweisung geschrieben, aber die kommt ja nicht zum tragen, weil die IF-Anweisung in einen Fehler läuft.
Also musst du den Fehler vorher abfangen und nicht hoffen EXCEL macht das schon richtig :-)

Sub Test()
For lngZeile = lngAbZeile To lngBisZeile
On error resume next
X= Application.WorksheetFunction.VLookup(wksZiel.Cells(lngZeile, lngSpalteZielA), wksQuelle. _
Range(wksQuelle.Columns(wksQuelleSpalteAnfang), wksQuelle.Columns(wksQuelleSpalteZiel)), 2,  _
False)
On Error goto 0
If X  "" Then
wksZiel.Cells(lngZeile, lngSpalteZielA + 6).Value = _
Application.WorksheetFunction.VLookup(wksZiel.Cells(lngZeile, lngSpalteZielA), wksQuelle. _
Range(wksQuelle.Columns(wksQuelleSpalteAnfang), wksQuelle.Columns(wksQuelleSpalteZiel)), 2,  _
False)
Else
wksZiel.Cells(lngZeile, lngSpalteZielA + 6).Value = "Hab da nix gefunden!"
End if
End Sub


Gruss Rainer

Anzeige
AW: vlookup
13.08.2007 08:53:00
Rainer
Guten Morgen
ich habe den code wie oben abgebildet eingefügt (D.h. Unter "macht schlaufe für Sverweis). Nun, einerseits hab ich jetzt ja keine CountIF Funktion mehr - hast du die absichtlich weggelassen?
Das grössere Problem das ich aber habe ist, dass er mir immernoch den selben Fehler ausgibt wie zuvor. Er rennt wieder in einen Fehler rein und sagt mir:
Laufzeitfehler 1004, Die Vlookupeigenschaft des Worksheetfunction-Objektes kann nicht zugeordnet werden, und das an dieser Stelle:
wksZiel.Cells(lngZeile, lngSpalteZielA + 6).Value = _
Application.WorksheetFunction.VLookup(wksZiel.Cells(lngZeile, lngSpalteZielA), wksQuelle. _
Range(wksQuelle.Columns(wksQuelleSpalteAnfang), wksQuelle.Columns(wksQuelleSpalteZiel)), 2, _
False)
Weisst du an was es liegt?
gruss andy

Anzeige
AW: vlookup
13.08.2007 08:53:56
Rainer
Guten Morgen
ich habe den code wie oben abgebildet eingefügt (D.h. Unter "macht schlaufe für Sverweis). Nun, einerseits hab ich jetzt ja keine CountIF Funktion mehr - hast du die absichtlich weggelassen?
Das grössere Problem das ich aber habe ist, dass er mir immernoch den selben Fehler ausgibt wie zuvor. Er rennt wieder in einen Fehler rein und sagt mir:
Laufzeitfehler 1004, Die Vlookupeigenschaft des Worksheetfunction-Objektes kann nicht zugeordnet werden, und das an dieser Stelle:
wksZiel.Cells(lngZeile, lngSpalteZielA + 6).Value = _
Application.WorksheetFunction.VLookup(wksZiel.Cells(lngZeile, lngSpalteZielA), wksQuelle. _
Range(wksQuelle.Columns(wksQuelleSpalteAnfang), wksQuelle.Columns(wksQuelleSpalteZiel)), 2, _
False)
Weisst du an was es liegt?
gruss andy

Anzeige
AW: vlookup
13.08.2007 23:57:27
Harry
Hallo,
ich beziehe mich mal auf den Code im Ursprungspost (nicht deine Änderungen vom heutigen Tag). Mit

If Application.WorksheetFunction.CountIf(wksQuelle.Range(wksQuelle.Columns( _
wksQuelleSpalteAnfang), wksQuelle.Columns(wksQuelleSpalteZiel)), wksZiel.Cells(lngZeile,  _
lngSpalteZielA)) > 0 Then


zählst du in Spalte CundD der TMS_01_Test, ob dein Suchwert überhaupt vorhanden ist.
Im folgenden Then-Teil führt du bei Zählergebnis >0 einen SVerweis duch


wksZiel.Cells(lngZeile, lngSpalteZielA + 6).Value = _
Application.WorksheetFunction.VLookup(wksZiel.Cells(lngZeile, lngSpalteZielA), wksQuelle.  _
_
Range(wksQuelle.Columns(wksQuelleSpalteAnfang), wksQuelle.Columns(wksQuelleSpalteZiel)), 2,   _
_
False)


letzter kann aber nur dann erfolgreich sein, wenn die gem. CountIf gefundene Zahl auch in Spalte C liegt. Deshalb fliegt dir dein Makro bei dem Wert 551 in Zeile 37xx um die Ohren, da dieser Wert in TMS_01_Test in Spalte D liegt und der Folgende SVerweis im Nirvana landet.
Aus meiner Sicht deshalb folgende Anpassung


If Application.WorksheetFunction.CountIf(wksQuelle.Range(wksQuelle.Columns( _
wksQuelleSpalteAnfang), wksQuelle.Columns(wksQuelleSpalteAnfang)), wksZiel. _
Cells(lngZeile,  _
lngSpalteZielA)) > 0 Then


Gruß
Harry

Anzeige
AW: vlookup
14.08.2007 09:24:00
Rainer
da kann ich nur sagen HERZLICHSTEN DANK!!!
das hat mich jetzt brutal erfreut. - bin zur arbeit und hab den Hund endlich. so jetzt kanns nun endlich weitergehn :) :) :) :)
cheers
andy

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige