#excel #vba #validation
Вопрос:
Я использую макрос для создания временного листа в своей книге, заполнения данных в нескольких ячейках на этом листе, экспорта этого листа в новую книгу и закрытия новой книги.
Все это прекрасно работает. То, что я пытаюсь сделать, — это добавить раскрывающийся список на временный лист (и, следовательно, новую книгу), в котором содержится список значений ячеек, которые были добавлены на указанный лист. Поэтому я погуглил, как это сделать, и наткнулся на этот код:
Sub main()
'replace "J2" with the cell you want to insert the drop down list
With Range("J2").Validation
.Delete
'replace "=A1:A6" with the range the data is in.
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:= xlBetween, Formula1:="=Sheet1!A1:A6"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub
Я включил это в свой проект, внес необходимые изменения в ссылки и опробовал его, но когда я открываю новые книги, выпадающего меню там нет. Есть какие-нибудь предложения о том, как заставить это работать?
Комментарии:
1. Является ли лист активным
Sheet1
? Даже если нет, есть ли какие-либо данные в диапазонеSheet1!A1:A6
?2. Ага. Это активная таблица, и в ячейках действительно есть данные.
3. Пожалуйста, попробуйте следующую строку кода тестирования (поместите ее в первую строку):
Debug.Print ActiveSheet.Name, ActiveSheet.CodeName: Stop
. Что он возвращает,Immediate Window
когда код останавливается на этой строке?4. Если новая книга содержит только 1 лист, являются ли значения раскрывающегося списка в A1:A6 на этом листе ?
5.
Range("J2").Validation
ссылается на активный лист при запуске кода — вы должны использовать явную ссылку, например, wsTemp.Range(«J2»), где wsTemp-это лист, который вы добавили ранее. Кроме того: вы также должны скопировать Лист1 в новую книгу, так как вы берете оттуда значения списка проверки. Скопируйте этот лист перед копированием временного листа — на всякий случай.
Ответ №1:
Range("J2").Validation
ссылается на активный лист при запуске кода — вы должны использовать явную ссылку, например, wsTemp.Range(«J2»), где wsTemp-это лист, который вы добавили ранее.
Кроме того: вы также должны скопировать Лист1 в новую книгу, так как вы берете оттуда значения списка проверки. Скопируйте этот лист перед копированием временного листа — на всякий случай.