Если вы хотите, чтобы ваш список проверки находился в нескольких листах, вам нужно определить именованный диапазон для данных проверки. В Excel 2003 (если я правильно помню) вы определяете диапазоны имен в Вставка> Именованные диапазоны> Определить. Если вы хотите назначить проверку в коде, вы просто используете имя вашего диапазона в качестве адреса.
Cells.SpecialCells(xlCellTypeFormulas).Offset(0, 1).Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=TheNameOfYourRange"
.IgnoreBlank = True
.InCellDropdown = True
End With
Конечно, вам, вероятно, не придется делать это в коде - вам нужно будет определить правило проверки только один раз, а затем обновить именованный диапазон с этого момента. Чтобы обновить именованный диапазон для ссылки на непустые ячейки на определенном листе, вы можете использовать что-то вроде этого.
Dim addresses As Variant
addresses = Split(Sheets("Other sheet").Range("A2:A9999") _
.SpecialCells(xlCellTypeConstants).Address, ",")
Names("TheNameOfYourRange").RefersTo = _
"='Other sheet'!" & Join(addresses, ",'Other sheet'!")