Помогите, пожалуйста решить задачу: нужно средствами VBA запретить ввод в поле с выпадающим списком значений не из списка. Заранее спасибо! Прикрепил файл, но на всякий случай код:
[vba]
Code
Private Sub ComboBox1_Change() Application.EnableEvents = False ActiveCell.Value = Me.ComboBox1.Value Application.EnableEvents = True End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Intersect(Target, [e1:e1000]) Is Nothing Or Target.Cells.Count > 1 Then HideCombo: Exit Sub Application.EnableEvents = False Me.ComboBox1.Top = Target.Top Me.ComboBox1.Left = Target.Left Me.ComboBox1.Width = Target.Width + 16 Me.ComboBox1.Height = Target.Height FillCombo Application.EnableEvents = True End Sub
Sub FillCombo() Const iRow = 65536: iClm = "A" iRws = Sheets(1).Columns(iClm).Rows(iRow).End(xlUp).Row ComboBox1.ListFillRange = "A1:A" & iRws Me.ComboBox1.Value = ActiveCell.Value Me.ComboBox1.Font.Size = 6 End Sub
Sub HideCombo() Me.ComboBox1.Top = 0 Me.ComboBox1.Left = 0 Me.ComboBox1.Width = 0 Me.ComboBox1.Height = 0 End Sub
[/vba]
Всем, Доброго времени суток!
Помогите, пожалуйста решить задачу: нужно средствами VBA запретить ввод в поле с выпадающим списком значений не из списка. Заранее спасибо! Прикрепил файл, но на всякий случай код:
[vba]
Code
Private Sub ComboBox1_Change() Application.EnableEvents = False ActiveCell.Value = Me.ComboBox1.Value Application.EnableEvents = True End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Intersect(Target, [e1:e1000]) Is Nothing Or Target.Cells.Count > 1 Then HideCombo: Exit Sub Application.EnableEvents = False Me.ComboBox1.Top = Target.Top Me.ComboBox1.Left = Target.Left Me.ComboBox1.Width = Target.Width + 16 Me.ComboBox1.Height = Target.Height FillCombo Application.EnableEvents = True End Sub
Sub FillCombo() Const iRow = 65536: iClm = "A" iRws = Sheets(1).Columns(iClm).Rows(iRow).End(xlUp).Row ComboBox1.ListFillRange = "A1:A" & iRws Me.ComboBox1.Value = ActiveCell.Value Me.ComboBox1.Font.Size = 6 End Sub
Sub HideCombo() Me.ComboBox1.Top = 0 Me.ComboBox1.Left = 0 Me.ComboBox1.Width = 0 Me.ComboBox1.Height = 0 End Sub
Если я правильно понимаю, что бы присвоить это свойство всему диапазону выпадающих списков (в моём случае [e1:e1000]) нужен именно макрос...может я ошибаюсь?
Если я правильно понимаю, что бы присвоить это свойство всему диапазону выпадающих списков (в моём случае [e1:e1000]) нужен именно макрос...может я ошибаюсь?Evgen83
Указал в свойствах Style = 2, стала вылетать ошибка "Run-time error `380`: Could not set the Value property. Invalid property value". Что-то про свойства ячейки? и стала выделенным жёлтым фоном 23 строка "Me.ComboBox1.Value = ActiveCell.Value"
Указал в свойствах Style = 2, стала вылетать ошибка "Run-time error `380`: Could not set the Value property. Invalid property value". Что-то про свойства ячейки? и стала выделенным жёлтым фоном 23 строка "Me.ComboBox1.Value = ActiveCell.Value"Evgen83
Убрал 23 строку - всё зарботало! Но как то странно: если "встать" на данную ячейку, таким образом, чтобы список не выпадал (звучит немного коряво)): свойство не работает, можно вставить, что угодно. Если же список выпал, то вставить можно только то, что есть в списке. Такая особенность.
Убрал 23 строку - всё зарботало! Но как то странно: если "встать" на данную ячейку, таким образом, чтобы список не выпадал (звучит немного коряво)): свойство не работает, можно вставить, что угодно. Если же список выпал, то вставить можно только то, что есть в списке. Такая особенность.Evgen83
Можно сделать комбо размером с лист. Тогда точно не промажешь! Вообще вижу 2 варианта не попасть в комбо. 1. Отключить макросы 2. Выделить несколько ячеек и редактировать значение в командной строке.
А можно так попробовать
Можно сделать комбо размером с лист. Тогда точно не промажешь! Вообще вижу 2 варианта не попасть в комбо. 1. Отключить макросы 2. Выделить несколько ячеек и редактировать значение в командной строке.