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

SVERWEIS VBA

SVERWEIS VBA
12.06.2008 11:50:00
Stephan
Hallo Excelperten,
ich habe mal wieder ein Problem:
ich habe folgenden SVERWEIS in VBA erstellt und bekomme in der Fett markierten Zeile den "Laufzeitfehler 424 - Objekt erforderlich". Könnt Ihr mir vielleicht weiterhelfen, was fehlt? Vielen Dank im Voraus! Grüße, Stephan
Dim Fso
Dim strLinie As String
Dim strPA As String
Dim strwks As String
Dim strDatei As String
Set Fso = CreateObject("Scripting.FileSystemObject")
strLinie = Range("C4")
strPA = Range("C7")
strwks = Range("A99")
strDatei = "H:\Bon\Zeit\planning productie.xls"
Select Case Range("C4").Value
Case "3"
If Fso.FileExists(strDatei) Then
Application.ScreenUpdating = False
Workbooks.Open Filename:=strDatei
Sheets(strwks).Activate
With Application
strPA = .VLookup(Target.Value, Worksheets(strwks).Columns("D : P"), 2, 0)
Target.Value.Copy
Windows("BDE-Bon.xls").Activate
Range("C8").Select
ActiveSheet.Paste
Windows("planning productie.xls").Activate
Application.CutCopyMode = False
ActiveWindow.Close
Application.ScreenUpdating = True
End With
End If
End Select
End Sub

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: SVERWEIS VBA
12.06.2008 11:53:00
Tobias
strPa.FormulaR1C1 = "=VLOOKUP(R[6]C[2],R[7]C[4]:R[14]C[5],2)"
Am schnellsten ist es, wenn Du den SVERWEIS als Makro aufzeichnest und dann den Syntax - sinnvoll - in VBA übernimmst.
Schönen Gruß, Tobias
http://www.tobiasschmid.de/

AW: SVERWEIS VBA
12.06.2008 12:07:00
Stephan
Hallo Tobias,
vielen Dank für Deine superschnelle Antwort!! Deinen Tipp habe ich genauso übernommen, aber nun markiert er den Ausdruck "strPA" und mosert "Fehler beim kompilieren - Falscher Bezeichner". Was hat er nu schon wieder? Grüße, Stephan

Sub Daten_abrufen()
Dim Fso
Dim strLinie As String
Dim strPA As String
Dim strwks As String
Dim strDatei As String
Set Fso = CreateObject("Scripting.FileSystemObject")
strLinie = Range("C4")
strPA = Range("C7")
strwks = Range("A99")
strDatei = "H:\Bon\Zeit\planning productie.xls"
Select Case Range("C4").Value
Case "3"
If Fso.FileExists(strDatei) Then
Application.ScreenUpdating = False
Workbooks.Open Filename:=strDatei
Sheets(strwks).Activate
With Application
strPA.FormulaR1C1 = "=VLOOKUP(R[6]C[2],R[7]C[4]:R[14]C[5],2)"
Target.Value.Copy
Windows("BDE-Bon.xls").Activate
Range("C8").Select
ActiveSheet.Paste
Windows("planning productie.xls").Activate
Application.CutCopyMode = False
ActiveWindow.Close
Application.ScreenUpdating = True
End With
End If
End Select
End Sub


Anzeige
Falsche Variablendeklaration...
12.06.2008 12:12:52
Tobias
Sorry, ich dachte strPA ist ein Range. Und so geht das natürlich gar nicht.
Dim strPA As String
...
strPA = Range("C7")
Du musst schon ein Range-Objekt verwenden.
Dim rng as Range
Set rng = Range("C7")
...
rng.FormulaR1C1 = "=VLOOKUP(R[6]C[2],R[7]C[4]:R[14]C[5],2)"
Wenn Du aber wirklich den Rückgabewert des SVERWEISes in eine stringVariable speichern wolltest geht das so:
strPA = application.WorksheetFunction.VLookup(........)
Schönen Gruß, Tobias
http://www.tobiasschmid.de/

AW: Falsche Variablendeklaration...
12.06.2008 13:08:31
Stephan
Hallo Tobias,
Danke für die fixe Antwort!
Deinen Rat habe ich folgendermaßen (s. Code) umgesetzt. Nun markiert er "Target.Value.Copy" mit Fehlermeldung "Laufzeitfehler 424 - Objekt erforderlich"
Und müsste hinter VLOOKUP nicht noch "strDatei" und "strwks" weil der Rückgabewert ja aus einer anderen Datei kommt? Gruß, Stephan

Sub Daten_abrufen()
Dim Fso
Dim strLinie As String
Dim rng As Range
Dim strwks As String
Dim strDatei As String
Set Fso = CreateObject("Scripting.FileSystemObject")
strLinie = Range("C4")
strwks = Range("A99")
strDatei = "H:\Bon\Zeit\planning productie.xls"
Set rng = Range("C7")
Select Case Range("C4").Value
Case "3"
If Fso.FileExists(strDatei) Then
Application.ScreenUpdating = False
Workbooks.Open Filename:=strDatei
Sheets(strwks).Activate
With Application
rng.FormulaR1C1 = "=VLOOKUP(R[6]C[2],R[7]C[4]:R[14]C[5],2)"
Target.Value.Copy
Windows("BDE-Bon.xls").Activate
Range("C8").Select
ActiveSheet.Paste
Windows("planning productie.xls").Activate
Application.CutCopyMode = False
ActiveWindow.Close
Application.ScreenUpdating = True
End With
End If
End Select
End Sub


Anzeige
Was ist eigentlich Dein Target?
12.06.2008 13:21:00
Tobias
Hallo Stephan!
Ich hatte mich vorhin schon gefragt, was Dein Target ist. Vielleicht auch ein Range? Also eine Zelle die Du kopieren möchtest?

Sub Unschön()
Dim Target As Range
Set Target = Range("A1")
Target.Copy
Sheets(2).Paste
End Sub


Im übrigen funktioniert auch folgender Code:


Sub Besser()
Sheets("Tabelle2").Range("A1") = Sheets("Tabelle1").Range("A1")
End Sub


Im Allgemeinen kann ich etwas Literatur zu VBA und den VBA-Objekten empfehlen. Dann wird einiges klarer.
Schönen Gruß, Tobias
http://www.tobiasschmid.de/

Anzeige
AW: Was ist eigentlich dein Target?
12.06.2008 13:51:00
Stephan
Hallo Tobias,
Ja, es handelt sich um einen Wert, der kopiert werden soll. Ich hol mal ein wenig weiter aus:
In meinem TabBlatt "Eingabe" Zelle C4, wird eine Zahl (3,4,7,8,9,10,11 oder 12) eingegeben. In Zelle C7 wird eine Auftrags-Nr. eingegeben. Wird nun z. B. in Zelle C4 eine 3 eingegeben, soll in der externen Datei "H:\Bon\Zeit\planning productie.xls", Tabellenblatt "Lijn 3", Bereich "D5:P65536" nach der Auftrags-Nr. gesucht werden und die in der rechten Nachbarspalte angegebene Artikel-Nr. ausgeworfen werden.
Wäre mein Code da der richtige Ansatz oder hättest du vielleicht einen anderen Vorschlag? Ich hab da leider keine bessere Idee. Gruß, Stephan

Anzeige
Lösung ohne VBA
12.06.2008 14:20:27
Tobias
=SVERWEIS(C7;INDIREKT("'[planning productie.xls]Lijn " & C4 & "'!$D$5:$E$65536");2;FALSCH)
Schönen Gruß, Tobias
http://www.tobiasschmid.de/

AW: Funktioniert, aber....
12.06.2008 15:03:22
Stephan
Hallo Tobias,
das funktioniert einwandfrei, so lange die Datei im Hintergrund geöffnet ist. Ist es auch machbar, wenn die Datei "planning productie.xls" geschlossen ist? Wenn ich einfach den Pfad davor setze
=SVERWEIS(C7;INDIREKT("'H:\Bon\Zeit\[planning productie.xls]Lijn " & C4 & "'!$D$5:$E$65536");2; FALSCH)
klappt es nicht. Gruß, Stephan

AW: Funktioniert, aber....
12.06.2008 15:25:53
Tobias
Hallo Stephan,
um eine Datei zu lesen, muss man sie öffnen. Mit VBA kann ich mir schon eine Lösung vorstellen in der Du nicht merkst, dass die Datei geöffnet ist. Deutlich einfacher ist es aber die 2. Datei auch zu öffnen.
Schönen Gruß, Tobias
http://www.tobiasschmid.de/

Anzeige
AW: Funktioniert, aber....
12.06.2008 16:52:00
Stephan
Hallo Tobias,
vielen Dank für Deine Unterstützung! Ich versuche, dass Ganze jetzt mal mit deinem SVERWEIS abzuwickeln. Ansonsten werde ich vielleicht noch mal auf VBA zurückkommen müssen, da diese Datei später sehr wahrscheinlich geschlossen sein wird. Vielen Dank nochmals!! Gruß, Stephan

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige