Option Explicit
Private Sub Worksheet_Activate()
' constants
Const ksName = "NameList"
Const ksWSName = "Sheet4"
Const ksDataVal = "DataValCell"
Const ksComma = ","
' declarations
Dim rng As Range
Dim I As Integer, J As Long, A As String
' start
A = ""
' process
' collect
With ActiveWorkbook
For I = 1 To .Worksheets.Count
With .Worksheets(I)
If .Name <> ksWSName Then
Set rng = .Range(ksName)
If Not rng Is Nothing Then
For J = 1 To rng.Rows.Count
If A <> "" Then A = A & ksComma
A = A & rng.Cells(J, 1).Value
Next J
End If
End If
End With
Next I
End With
' assign
With Range("DataValCell").Validation
On Error Resume Next
.Delete
On Error GoTo 0
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=A
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
' end
Set rng = Nothing
End Sub