Hallo zusammen,
als Entschuldigung vorweg: Ich bin noch in einem Anfangsstadium meiner VBA-Entwicklung...
Ich möchte in meinem Makro die Funktion "Application.WorksheetFunction.VLookup" so universell gestalten, dass ich die Funktion für weitere Zwecke nutzen kann. Daher möchte ich über Variablen die Funktionsargumente dynamisch auslesen.
Trotz mehrstündiger Forensuche bin ich anscheinend nicht in der Lage, die Variablen so einzubinden, dass es funktioniert - obwohl ich mittels Debuggen überprüft habe, dass ich die richtigen Werte in den Variablen habe.
Nachfolgend mein Code mit Kommentarzeilen, die hoffentlich erklären, was ich möchte:
Private Function StatusUeberInventarnummerSpiderVonNach(quellblatt As String, zielBlatt As String)
Dim inventarNr As String, auswahl As String, zielSpalteABC As String, statusSpalteABC As String, _
letzteQuellspalteABC As String, rechnerSpalteABC As String, statusErgebnis As String, _
anzahlZielzeilen As Integer, zielSpalte As Integer, anzahlQuellzeilen As Integer
'Anzahl Zeilen im Quellblatt ermitteln
Sheets(quellblatt).Select
anzahlQuellzeilen = ActiveSheet.UsedRange.Rows.Count
'Suchmatrix definieren
letzteQuellspalteABC = Split(Cells(1, ErmittleSpaltenanzahl).Address, "$")(1)
auswahl = "A1:" & letzteQuellspalteABC & anzahlQuellzeilen ' daraus wird bspw. "A1:I3753"
'Statusspalte ausfindig machen
statusSpalteABC = ErmittlespaltenID("_Status", quellblatt) 'Funktion sucht in Zeile 1 nach der Überschrift - bspw. "G"
rechnerSpalteABC = ErmittlespaltenID("Inventarnummer", quellblatt) 'Funktion sucht in Zeile 1 nach der Überschrift - bspw. "A"
'Anzahl Zeilen im Zielblatt
Sheets(zielBlatt).Select
anzahlZielzeilen = Range("B65535").End(xlUp).Row 'von Spalte B65535 aus nach oben in die erste beschriebene Zeile springen
'Daten rechts neben letzter befüllter Spalte einfügen
zielSpalte = ErmittleSpaltenanzahl + 1 ' Funktion liefert die letzte gefüllte Spalte als Zahl zurück
zielSpalteABC = Split(Cells(1, zielSpalte).Address, "$")(1) ' Umwandlung der Spaltenangabe in die Buchstabenbezeichnung
'erste Zeile beschriften
Cells(1, zielSpalte).Value = "Status"
'nachfolgende Zeilen befüllen
For i = 2 To anzahlZielzeilen
inventarNr = Cells(i, 2).Value
Worksheets(zielBlatt).Cells(i, zielSpalte).Value = Application.WorksheetFunction.VLookup(inventarNr, Sheets(quellblatt).[auswahl], statusSpalte, False)
Next i
Der Aufruf erfolgt so
Call StatusUeberInventarnummerSpiderVonNach("Spider", "Rechner neu")
|