Anzeige
Archiv - Navigation
1708to1712
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

Über VBA einen SVERWEIS mit variabler Bezugs-Datei

Über VBA einen SVERWEIS mit variabler Bezugs-Datei
05.09.2019 16:51:15
Jasper
Hallo zusammen,
folgende Situation:
Ich habe zwei Dateien - ein Export und eine Datei voller Speditionsinformationen.
Beide Dateien werden jede Woche neu geschickt bzw exportiert.
Ich muss aus der Datei "Export" einen SVERWEIS eintragen, der sich auf die Datei der Speditionsfirma bezieht. Der Sverweis prüft drei Tabellenblätter ab. Falls der Wert etwas findet, erscheint "Treffer", sonst "Kein Treffer". Die Formel sind in ganz normaler Formel so aus (I know, wäre auch mit ner Und-Formel schöner aussehen können):
=WENN(ISTNV(SVERWEIS(A2;'[Speditiondat.xlsm]Spedition1'!$A:$B;2;0))=WAHR;
WENN(ISTNV(SVERWEIS(A2; '[Speditiondat.xlsm]Spedition2'!$A:$B;2;0))=WAHR;
WENN(ISTNV(SVERWEIS(A2; '[Speditiondat.xlsm]Spedition3'!$A:$B;2;0))=WAHR;
"Kein Treffer";"Treffer");"Treffer);"Treffer")
So weit so gut, quick and dirty. Ich möchte das aber alles automatisieren und ein "Tool" mit einem Makro bauen, wo ich die beiden Excel-Dateien als Variable anspreche. Weiter unten im Makro füge ich mit dem Makro einen SVERWEIS ein und hier ist mein Problem:
Wie bekomme ich den SVERWEIS im Makro so hin, dass die angesprochene Datei im SVERWEIS variabel ist?
Das ist mein Code soweit mit starrem SVERWEIS, der auch soweit funktioniert (wird noch einiges dran getan, einige Logiken einfach ignorieren):
Option Explicit
Sub Zolldaten_aktualisieren()
Dim Anzahl_Aufträge As Integer
Dim Anzahl_Aufträge_NB As Integer
Dim Export As Variant
Dim DHL_Schenker_Kuehne As Variant
Dim MTO As Variant
MsgBox "Bitte wähle deine Zieldatei/ den Export", vbInformation
Export = Application.GetOpenFilename()
MsgBox "Bitte wähle die Datei, welche die Information von Speditionen enthält", vbInformation
DHL_Schenker_Kuehne = Application.GetOpenFilename()
Application.ScreenUpdating = False
Application.EnableEvents = False
Workbooks.Open (Export)
With ActiveWorkbook.Sheets(1)
.Range("$A$1:$F$5000").RemoveDuplicates Columns:=1, Header:=xlYes
Anzahl_Aufträge = WorksheetFunction.CountA(.Range("A1:A5000"))
.Range(.Cells(2, "L"), .Cells(Anzahl_Aufträge, "L")).FormulaR1C1 = "=MID(RC[-9],9,3)"
.Range(.Cells(2, "G"), .Cells(Anzahl_Aufträge, "G")).FormulaR1C1 =
"=IF(ISNA(VLOOKUP(RC[-6],'[Speditiondat.xlsm]Spedition1'!C1:C2,2,0))=TRUE,_
IF(ISNA(VLOOKUP(RC[-6],'[Speditiondat.xlsm]Spedition2'!C1:C2,2,0))=TRUE,_
IF(ISNA(VLOOKUP(RC[-6],'[Speditiondat.xlsm]Spedition3'!C1:C2,2,0))=TRUE,_
""Kein Treffer"",""Treffer""),""Treffer""),""Treffer"")"
End With
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Über VBA einen SVERWEIS mit variabler Bezugs-Datei
05.09.2019 18:51:10
Werner
Hallo,
stellt sich die Frage, was für dich variabel ist. Irgendwoher muss der Name deiner Datei ja kommen. Entweder du hast die in irgendeiner Zelle stehen auf die du dich in Der Formel beziehst, oder du benutzt eine Variable.
Im Beispiel mal die SVERWEIS-Formel mit dem Namen der Datei aus der Zelle A1. Statt einer Zelle kannst du natürlich auch eine Variable benutzen. Die könntest du z.B. über eine Iputbox füllen. Dann einfach statt .Range("A1") halt den Namen der Variablen einsetzen.
.Range(.Cells(2, "G"), .Cells(Anzahl_Aufträge, "G")).FormulaR1C1 = _
"=IF(ISNA(VLOOKUP(RC[-6],'[" & .Range("A1") & "]Spedition1'!C1:C2,2,0))=TRUE," _
& "IF(ISNA(VLOOKUP(RC[-6],'[" & .Range("A1") & "]Spedition2'!C1:C2,2,0))=TRUE," _
& "IF(ISNA(VLOOKUP(RC[-6],'[" & .Range("A1") & "]Spedition3'!C1:C2,2,0))=TRUE," _
& """Kein Treffer"",""Treffer""),""Treffer""),""Treffer"")"
Eine Formel ist in VBA zunächst mal ein String. Siehst du ja auch an den Gäsefüßchen am Anfang und am Ende. Erst mit dem Eintragen in eine Zelle erkennt Excel an den =, dass es eine Formel ist und wandelt sie entsprechend in eine Formel um.
Wenn du in der Formel Variable oder Zellwerte verwenden willst, dann mußt du Excel mitteilen, wann die Formel (der String) endet. Das macht man mit Gänsefüßchen. Die Variable verküpfst du dann mit & als String mit der Formel. danach muß Excel jetzt wieder wissen, wo es mit der eigentlichen Formel (dem String) weitergeht. Das machst du ebenfalls mit & gefolgt von einem Gänsefüßchen.
Das sieht dann so aus:
,'[" & .Range("A1") & "]Spedition1
Nach der eckigen Klammer endet der eigentliche Formelstring also Gänsefüßchen. Dann wird mit & die Variable bzw. der Zellwert in den Formelstring eingefügt. Danach wird mit & " der eigentliche Formelstring weitergeführt.
Gruß Werner
Anzeige
AW: Über VBA einen SVERWEIS mit variabler Bezugs-Datei
06.09.2019 06:16:34
Jasper
Hallo Werner,
meine Variable für die Bezugsdatei ziehe ich durch "Application.GetOpenFilename()". Sollte doch funktionieren, oder?
Danke für deine ausführliche Erklärung, werde es nachher bei der Arbeit ausprobieren :)
MfG Jasper
AW: Über VBA einen SVERWEIS mit variabler Bezugs-Datei
06.09.2019 08:34:34
Jasper
Hallo Werner,
deine Code Erklärung hat geholfen :)
Die Datei ziehts perfekt Variabel rein, nur die verschiedenen Tabellenblätter muss ich noch lösen.
Ich passe einfach meine Variablen an und statt nur 1 Variable für die Datei mache ich 3 variablen auf die verschiedenen Tabellenblätter.
MfG
Jasper
Gerne u. Danke für die Rückmeldung. o.w.T.
06.09.2019 10:03:34
Werner

189 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige