Re: nochmal sverweis
15.05.2002 15:49:10
Daniel R.
Hallo Chris
Eine andere Möglichkeit besteht darin, die Sverweis-Funktion per VBA zu programmieren. Ich habe dies für eine eigene Anwendung so konzipiert und das funktioniert super. Die Überprüfung kann auch aus einer ungeöffneten Mappe vorgenommen werden. Allerdings müssen in meinem Falle nur zwei Blätter durchsucht werden. Für den Blattnamen habe ich 2 Variablen definiert: pfad1 und pfad2. Die If-Anweisung im nachstehenden Code könnte jedoch beliebig fortgesetzt werden. Diese Lösung funktioniert bei Zahlen und Text.
Die eigentliche Sverweis-Funktion habe ich aufgezeichnet, d.h. der Makrorecorder schreibt die Funktion mit. Diese muss übrigens lediglich für das erste Blatt ausgelegt werden. Alle anderen Blätter werden, wie gesagt, sozusagen mit "elseif" angehängt. Der gesuchte Wert wird übrigens 3 Zellen links von der aktiven Zelle eingelesen (ActiveCell.Offset(columnOffset:=-3).Activate).
Ob damit sogar 30 Blätter überprüft werden können vermag ich nicht zu beurteilen. Vielleicht bringt Dich dieser Ansatz dennoch weiter. Ansonsten kannst Du nochmals nachfragen.
Gruss Daniel R......
ActiveCell.Offset(columnOffset:=-3).Activate
'Sverweis auf Artikelliste Rohstoffe
ActiveCell.FormulaR1C1 = _
"=IF(RC[+3]>0,IF(ISERROR(VLOOKUP(RC[+3]," & pfad1 & "!R5C1:R5000C2,2,FALSE)),""Falsche Nummer"",VLOOKUP(RC[+3]," & pfad1 & "!R5C1:R5000C2,2,FALSE)),"""")"
wertverweis = ActiveCell.Value
'Wenn Artikelnummer in Rohstoffe nicht enthalten:
If wertverweis = "Falsche Nummer" Then
'Dann Sverweis auf Artikelliste Rohstoffe passiv
ActiveCell.FormulaR1C1 = _
"=IF(RC[+3]>0,IF(ISERROR(VLOOKUP(RC[+3]," & pfad2 & "!R5C1:R5000C2,2,FALSE)),""Falsche Nummer"",VLOOKUP(RC[+3]," & pfad2 & "!R5C1:R5000C2,2,FALSE)),"""")"
wertverweis = ActiveCell.Value
End If
'Sverweis setzt auch die Funktion in die betreffende Zelle ein
'deshalb muss diese wieder gelöscht werden
Selection.ClearContents
ActiveCell.Value = wertverweis
ActiveCell.Offset(columnOffset:=3).Activate
.....