ich habe mich hier registriert, um endlich dieses nervige VBA-Problem vom Tisch zu bekommen, welches mir schon viel Zeit geraubt hat.
Vielleicht finde ich hier ja Hilfe.
Zur Sache:
Hier läuft ein Programm, welches Excel Listen generiert.
In dieser Listen stehen Personalnummern, Namen und Vornamen, sowie sich ändernde Zusatzinformationen, welche aber für die Problemlösung unberücktsichtigt bleiben können.
Der Aufbau der Listen ist zwar nicht statisch, aber die entscheidenen Spalten sind konstant (A=Personalnummer, B=Name, C= Vorname).
Die Zeilenposition kann sich unterscheiden (der erste Datensatz begint in Zeile 5 bis 10)
Einige dieser Namen werden aus datenschutzrechtlichen Gründen durch Falschnamen ersetzt. Um diese geht es bei meiner Anfrage.
Für bestimmte Auswertungen, soll ein Excel Makro erstellt werden, welches "auf Knopfdruck" die falschen Namen durch die Echtnamen ersetzt und die restlichen Namen unberücksichtigt lässt, da diese bereits stimmen.
In einer bereits vorhandenen Tabelle (schlüssel.xlsm), werden die Personalnummern und die echten Namen der in den Listen ausgegebenen Falschnamen gespeichert. (ebenfalls Spalte:(A=Personalnummer, B=Name, C= Vorname)
Das Makro müsste also nach dem Start in dem aktuell geöffeneten Tabellenblatt (dessen Name nicht immer gleich ist) in jedem Datensatz nach der Personalnummer aus Spalte A in der "Schlüssel"tabelle in Spalte A suchen.
Wenn eine identische Personalnummer gefunden wird, sollen die Spalten B und C durch die Werte in der Schlüsseltabelle (ebenfalls B und C) ersetzt werden.
Folgendes Script vergleicht die Tabellenblätter "Schlüssel" und "Mitarbeiter" in einer Tabelle und ersetzt die Namen wie gewollt. Das funktioniert soweit. Aber wie überrede ich VBA dazu, in einer anderen Datei, welche möglichst nur verdeckt geöffnet wird, nach der Personalnummer zu suchen und die falschen Namen in der aktuellen Tabelle durch Knopfdruck zu ersetzen?
Sub NameErsetzen()
Dim wksS As Worksheet, wksT As Worksheet
Dim vRow As Variant
Dim iRow As Integer
Set wksS = Worksheets("Schlüssel")
Set wksT = Worksheets("Mitarbeiter")
For iRow = 1 To WorksheetFunction.CountA(wksS.Columns(1))
vRow = Application.Match(wksS.Cells(iRow, 1).Value, wksT.Columns(1), 0)
If Not IsError(vRow) Then
wksT.Cells(vRow, 2).Value = wksS.Cells(iRow, 2).Value
wksT.Cells(vRow, 3).Value = wksS.Cells(iRow, 3).Value
End If
Next iRow
wksT.Select
End Sub
Ich bin für jeden Hinweis sehr dankbar.
LG
Henke