Среда, 13 июля 2022
  3 Ответы
  5.8 тыс. Посещений
Я изменил функцию темы, чтобы удалить существующие выделения при их повторном выборе и удалить лишние ;. Вот исправленный код:

Private Sub Worksheet_Change (ByVal Target As Range)
'Обновлено Extendoffice 2019/11/13
'Обновлено Кеном Гарднером 2022 июля 07 г.
Dim xRng как диапазон
Dim xValue1 как строка
Dim xValue2 как строка
Dim semiColonCnt как целое число
Если Target.Count > 1, то выйдите из Sub
On Error Resume Next
Установите xRng = Cells.SpecialCells (xlCellTypeAllValidation)
Если xRng ничего не значит, выйдите из Sub
Application.EnableEvents = False
'Если не Application.Intersect(Target, xRng) - ничто, то
Если Приложение.Интерсект(Цель, xRng) Тогда
xValue2 = Целевое.Значение
Приложение.Отменить
xValue1 = Целевое.Значение
Цель.Значение = xValue2
Если xValue1 <> "" Тогда
Если xValue2 <> "" Тогда
Если xValue1 = xValue2 или xValue1 = xValue2 & ";" Или xValue1 = xValue2 & ";" Тогда ' оставляем значение, если только одно в списке
xValue1 = Заменить(xValue1, "; ", "")
xValue1 = Заменить(xValue1, ";", "")
Цель.Значение = xValue1
ElseIf InStr(1, xValue1, "; " & xValue2) Тогда
xValue1 = Replace(xValue1, xValue2, "") 'удаляет существующее значение из списка при повторном выборе
Цель.Значение = xValue1
ИначеЕсли InStr(1, xValue1, xValue2 & ";") Тогда
xValue1 = Заменить (xValue1, xValue2, "")
Цель.Значение = xValue1
Еще
Target.Value = xValue1 & ";" & xValue2
End If
Целевое.Значение = Заменить(Целевое.Значение, ";;", ";")
Целевое.Значение = Заменить(Целевое.Значение, "; ;", ";")
Если InStr(1, Target.Value, ";") = 1 Then ' проверить наличие ; как первый символ и удалите его
Целевое.Значение = Заменить(Целевое.Значение, "; ", "", 1, 1)
End If
Если InStr(1, Target.Value, ";") = 1 Тогда
Целевое.Значение = Заменить(Целевое.Значение, ";", "", 1, 1)
End If
полустолбец = 0
Для i = 1 To Len(Target.Value)
Если InStr(i, Target.Value, ";") Тогда
полудвоеточиеCnt = полудвоеточиеCnt + 1
End If
Затем я
Если semiColonCnt = 1, то 'remove; если последний символ
Целевое.Значение = Заменить(Целевое.Значение, "; ", "")
Целевое.Значение = Заменить(Целевое.Значение, ";", "")
End If
End If
End If
End If
Application.EnableEvents = True
End Sub
1 год назад
·
#2872
Привет Кен Гарднер,

Спасибо, что поделились. Не возражаете, если мы добавим ваш код VBA в наш учебник: Как создать раскрывающийся список с несколькими вариантами выбора или значениями в Excel?

С нетерпением жду Вашего ответа. :)

Аманда
1 год назад
·
#2879
Привет Аманда, во что бы то ни стало, давай. Я получил исходный код от ExtendOffice.
Привет, Кен
1 год назад
·
#2882
Привет Кен :D
  • Страница:
  • 1
Там нет ответов, сделанные на этот пост пока нет.