VBA - SVERWEIS mit zweiter Arbeitsmappe

Moderator: ModerationP

VBA - SVERWEIS mit zweiter Arbeitsmappe

Beitragvon tsimon » 11. Aug 2018, 22:34

Guten Abend zusammen :)

ich habe ein kleines Problem mit dem SVERWEIS in VBA und hoffe ihr könnt mir helfen es zu lösen. Es geht grob um folgendes: In Mappe1 stehen (Kunden-)Nummern, die auf Knopfdruck (daher VBA) mit einem SVERWEIS um die entsprechenden Namen aus einer Bestandsdatei (Mappe2) ergänzt werden sollen.

Hier erstmal mein Code:
Code: Alles auswählen
Sub Test()
   
    Dim i As Integer
   
    i = 2
   
    GetObject ("/Users/abcd/VBA/Mappe2.xlsx")
   
    Workbooks("Mappe1.xlsm").Activate
   
    Do Until Cells(i, 3) = ""
        Cells(i, 1) = Application.WorksheetFunction.VLookup(Cells(i, 3).Value, Workbooks("Mapp2.xlsx").Worksheets("Tabelle2").Range("A1:E10"), 5, False)
        i = i + 1       
    Loop
   
    Workbooks("Mappe2.xlsx").Close
   
End Sub


In Mappe1 stehen in Tabelle1 in den Zellen C1 abwärts die besagten (Kunden-)Nummern. Die Matrix in Mappe2 erstreckt sich von A1 bis E10.

Das Problem ist nun, dass die Do-Schleife nicht anfängt zu laufen, entsprechend bleiben alle Zellen leer. Wenn ich die Prozedur allerdings schrittweise mit dem Debugger ausführe und dabei Mappe1 im Vordergrund bleibt, funktioniert das Makro wie gewünscht. Ohne mein Einschreiten ist beim schrittweisen Durchlauf automatisch nach Öffnen Mappe2 im Vordergrund und es funktioniert ebenfalls nicht. Die Funktion arbeitet übrigens fehlerfrei, wenn die Bestandsliste in der gleichen Mappe liegt.
Ich habe daraufhin mit verschiedenen Methoden versucht, Mappe1 während des Prozedurverlaufs im Vordergrund zu halten, daher z.B. auch "getObject", was Mappe2 im Hintergrund öffnen sollte. Außerdem habe ich Zeitverzögerungen eingebaut, leider auch ohne den gewünschten Erfolg.

Weiß jemand, wo mein Fehler liegt? Ich sitze nun schon Stunden daran und kann keine Lösung finden. Daher wäre ich für jeden Tipp und Hinweis sehr dankbar :)

Vielen Dank!

Viele Grüße,
Tobias
tsimon
Neuling
 
Beiträge: 2
Registriert: 11. Aug 2018, 22:01

Re: VBA - SVERWEIS mit zweiter Arbeitsmappe

Beitragvon theoS » 11. Aug 2018, 22:54

wenn du mit getobject arbeitest, dann sollte davor eine Variable stehen, die das Objekt aufnimmt.
die kannst du dann anstatt der Mappe2.xls im Code verwenden.
Vielleicht solltest du aber hier besser mit workbooks.open arbeiten?
Schau dir die Befehle mal in der Hilfe von VBA an, da stehen zu beiden sehr gute Beispiele drin.
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4150
Registriert: 19. Apr 2008, 00:14

Re: VBA - SVERWEIS mit zweiter Arbeitsmappe

Beitragvon MisterBurns » 11. Aug 2018, 23:24

Hallo Tobias,

verwende Workbooks.Open, wie theoS schon geschrieben hat.
Außerdem ist in deinem Code ein Tippfehler. In der VLOOKUP-Anweisung verweist du auf "Mapp2.xlsx". Aber das ist vielleicht nur ein Fehler in deinem Beispiel.
Schöne Grüße
Berni
MisterBurns
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 310
Registriert: 28. Mär 2018, 13:13

Re: VBA - SVERWEIS mit zweiter Arbeitsmappe

Beitragvon Gast » 12. Aug 2018, 09:20

Sub Test()

Dim i As Long

i = 2

GetObject ("C:/Users/abcd/VBA/Mappe2.xlsx")

Workbooks("Mappe1.xlsm").Activate

Do Until Workbooks("Mappe1.xlsm").Worksheets("Tabelle1").Cells(i, 3) = ""
Workbooks("Mappe1.xlsm").Worksheets("Tabelle1").Cells(i, 1) = Application.WorksheetFunction.VLookup(Workbooks("Mappe1.xlsm").Worksheets("Tabelle1").Cells(i, 3).Value, Workbooks("Mapp2.xlsx").Worksheets("Tabelle2").Range("A1:E10"), 5, False)
i = i + 1
Loop

Workbooks("Mappe2.xlsx").Close

End Sub
Gast
 

Re: VBA - SVERWEIS mit zweiter Arbeitsmappe

Beitragvon Flotter Feger » 12. Aug 2018, 10:57

Hallo,

geht doch einfacher ...
Code: Alles auswählen
Sub Test()
Dim WB1 As Workbook
Dim WB2 As Workbook
Dim i As Long

Set WB1 = ThisWorkbook
Set WB2 = GetObject("C:/Users/abcd/VBA/Mappe2.xlsx")

With WB2
    WB1.Activate
   
    i = 2
    Do Until Workbooks("Mappe1.xlsm").Worksheets("Tabelle1").Cells(i, 3) = ""
        WB1.Worksheets("Tabelle1").Cells(i, 1) = Application.WorksheetFunction.VLookup(WB1.Worksheets("Tabelle1").Cells(i, 3).Value, .Worksheets("Tabelle2").Range("A1:E10"), 5, False)
        i = i + 1
    Loop
   
    .Close
End With
End Sub
VG Sabina

bei mir läuft Win 7 32-Bit - Office 2010 Pro Plus 32-Bit und Office 2016 Pro Plus 32-Bit
Wer auch weiter Hilfe erwartet, sollte sich nicht zu schade sein, ein kurzes Feedback zu geben.
Benutzeravatar
Flotter Feger
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1643
Registriert: 24. Okt 2016, 16:40

Re: VBA - SVERWEIS mit zweiter Arbeitsmappe

Beitragvon tsimon » 13. Aug 2018, 17:22

Hallo zusammen,

erst einmal vielen Dank für eure Antworten! Nach den Änderung von Gast bzw. Flotter Feger läuft es nun wie gewünscht.

@ theoS, MisterBurns: Ich habe es sowohl mit GetObject als auch mit Workbooks.Open versucht, beides funktioniert in meinem Fall (bei GetObject mit und ohne Variable)
tsimon
Neuling
 
Beiträge: 2
Registriert: 11. Aug 2018, 22:01


Zurück zu Excel Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: MisterBurns und 20 Gäste