A maneira como fiz isso no passado é fazer exatamente o que você diz - eu armazeno as variáveis em outra planilha / livro.
Então, digamos que você crie uma pasta de trabalho chamada "Employees.xlsx" que se parece com isso:
| A | B
|-----------------|--------------------
1| Employee | Employee Num
2| Melvin Smith | 2878
3| David Gilmour | 1908
Depois, você cria dois subs: um que percorre sua tabela e outro que faz a cópia. Passamos o nome e o número do funcionário para o segundo sub e ele usará esses valores em vez dos valores codificados.
Sub CopyAllSheets()
' Store a reference to the workbook
Dim Wb As Workbook
Set Wb = Workbooks("Employees.xlsx")
' Start at row 2 to ignore the column headers
Dim Counter As Long
For Counter = 2 To Wb.Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
CopySingleSheet Wb.Sheets(1).Range("A" & Counter), Wb.Sheets(1).Range("B" & Counter)
Next Counter
End Sub
Sub CopySingleSheet(EmpName As String, EmpNumber As String)
' Using the AutoFilter on the workbook called NEW DD
Windows("NEW DD.xlsx").Activate
ActiveSheet.Range("$H$1:$H$3055").AutoFilter Field:=8, Criteria1:="=*" & EmpName & "*", Operator:=xlAnd
Selection.Copy
' Going back to Melvin’s workbook named 2878
Windows(EmpNumber & ".xlsx").Activate
Sheets("D dd N").Select
Range("A1").Select
ActiveSheet.Paste
End Sub
Espero que isso faça sentido