Я думаю, что это будет делать то, что вы просите.
Одно изменение, которое я сделал, заключается в том, что на листе "sql" я изменил содержимое ячейки, чтобы оно выглядело так:
="select count(*) from tablex where variable is null;"
поэтому я использовал " переменная " вместо " & a1 & ", как вы это делали изначально, а затем в коде заменяет это слово на правильное значение emp_id, emp_name и т. д.
Sub GenerateSheets()
Dim formulaRange As Range
Dim formula As String
Dim r As Range
Dim destloc As Range
Dim VariableRange As Range
Set formulaRange = Worksheets("sql").Cells(1, 1)
' get each formula
Do Until formulaRange.Value = ""
For Each r In formulaRange.Rows
' for each formula found, create a new sheet and move it to end
Worksheets.Add
ActiveSheet.Name = r.Offset(0, 1).Value
ActiveSheet.Move after:=Sheets(ActiveWorkbook.Sheets.Count)
Set destloc = ActiveSheet.Cells(1, 1)
Set VariableRange = Worksheets("values").Cells(1.1)
' Loop through all the variables
Do Until VariableRange.Value = ""
destloc.Value = Replace(formulaRange.Value, "variable", VariableRange.Value)
Set VariableRange = VariableRange.Offset(1, 0)
Set destloc = destloc.Offset(1, 0)
Loop
Next
Set formulaRange = formulaRange.Offset(1, 0)
Loop
End Sub