Вопрос снят.
Зато появились другие вопросы...
Тоже столкнулся с ошибкой макрорекордера (когда он пишет ; вместо ,)
В этом топике обнаружил решение проблемы, заменил в коде
Formula1:="Выполнено; Не выполнено" на
Formula1:="Выполнено, Не выполнено", и всё заработало.
Получился такой код:
Код: Выделить всё
Sub FormatConfirmationCell(ByRef ce As Range)
With ce
.HorizontalAlignment = xlCenter
With .Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation, Operator:= _
xlBetween, Formula1:="Выполнено, Не выполнено"
.IgnoreBlank = True: .InCellDropdown = True
End With
.FormatConditions.Delete
.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=""Выполнено"""
.FormatConditions(1).Interior.ColorIndex = 35 '4
.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=""Не выполнено"""
.FormatConditions(2).Interior.ColorIndex = 38 '3
End With
End Sub
Но радость была недолгой.
Я случайно проверил несколько ячеек на предмет работы выпадающего списка.
Выяснилось, что если список разделять символом "," , то в первых нескольких ячейках, для которых он применяется, выпадающий список состоит из 2 элементов (как и должно быть), а во всех остальных - из одного "Выполнено, Не выполнено"
Если же использовать разделитель ";" (как пишет макрорекордер), то всё происходит с точностью до наоборот - в первых ячейках один элемент "Выполнено; Не выполнено", а в остальных - всё как надо.
Проблемы с выпадающим списком
появляются с того места, где в той же строке присутствует гиперссылка.
Со следующей после гиперссылки строки и меняется поведение VBA, формирующего выпадающий список.
Кто-нибудь может объяснить, как с этим бороться?
Вот пример кода. Запустите макрос
test
Если в строке
Formula1:=ce.Value & ", Выполнено, Не выполнено"
поменять "," на ";" - происходит всё наоборот.
Код: Выделить всё
Sub [B]test[/B]()
Workbooks.Add
For i = 3 To 30
Cells(i, 2) = "Строка " & i
FormatConfirmationCell Cells(i, 2)
If i Mod 10 = 0 Then
Cells(i, 5).Value = "www.ya.ru"
Convert_Range_into_HLinks_test Cells(i, 5)
End If
Next
End Sub
Sub FormatConfirmationCell(ByRef ce As Range)
With ce
.HorizontalAlignment = xlCenter
With .Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation, Operator:= _
xlBetween, Formula1:=ce.Value & ", Выполнено, Не выполнено"
.IgnoreBlank = True: .InCellDropdown = True
End With
.FormatConditions.Delete
.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=""Выполнено"""
.FormatConditions(1).Interior.ColorIndex = 35 '4
.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=""Не выполнено"""
.FormatConditions(2).Interior.ColorIndex = 38 '3
End With
End Sub
Sub Convert_Range_into_HLinks_test(ByRef ra As Range)
'преобразует текст всех непустых ячеек диапазона в гиперссылки
Dim selcell As Range
On Local Error Resume Next
For Each selcell In ra.Cells
If Len(selcell.Value) > 0 Then
HLaddr = "http://" & Trim$(selcell.Value)
selcell.Parent.HyperLinks.Add Anchor:=selcell, Address:=HLaddr
End If
Next
End Sub