можно ли создать поле со списком / раскрывающийся список внутри ячейки, которая в настоящее время активна? Я пробовал это, но ничего не вышло:
Программно добавить раскрывающийся список в определенную ячейку
мой клиент хочет, чтобы любая ячейка, которая была нажата в столбце A (кроме A1, потому что она служит заголовком столбца), имела раскрывающиеся списки со списком элементов.
Я также попытался скопировать это и посмотреть, работает ли он, но он всегда переходит в On Error Resume Next
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim str As String
Dim cboTemp As OLEObject
Dim ws As Worksheet
Set ws = ActiveSheet
On Error GoTo errHandler
If Target.Count > 1 Then GoTo exitHandler
Set cboTemp = ws.OLEObjects("TempCombo")
On Error Resume Next
If cboTemp.Visible = True Then
With cboTemp
.Top = 10
.Left = 10
.ListFillRange = ""
.LinkedCell = ""
.Visible = False
.Value = ""
End With
End If
On Error GoTo errHandler
If Target.Validation.Type = 3 Then
'if the cell contains a data validation list
Application.EnableEvents = False
'get the data validation formula
str = Target.Validation.Formula1
str = Right(str, Len(str) - 1)
With cboTemp
'show the combobox with the list
.Visible = True
.Left = Target.Left
.Top = Target.Top
.Width = Target.Width + 15
.Height = Target.Height + 5
.ListFillRange = ws.Range(str).Address
.LinkedCell = Target.Address
End With
cboTemp.Activate
End If
exitHandler:
Application.ScreenUpdating = True
Application.EnableEvents = True
Exit Sub
errHandler:
Resume exitHandler
End Sub
Кроме того, почти всегда плохая идея использовать On Error Resume Next
по многим причинам, и тем более при попытке устранить проблему. Ваше описание «ничего не произошло» бесполезно - если вы хотите точно выяснить, в чем заключается проблема, я бы предложил прохождение кода по одной строке за раз (с F8) следить за значениями связанных переменных и т. д. дополнительную информацию об этом см. Чип Пирсон Отладка VBA.
Вы уверены, что вашему клиенту нужен не только Проверка данных со списком?
на данный момент моя проблема состоит в том, чтобы создать поле со списком внутри ячейки, по которой щелкнули мышью, а затем заполнить это поле со списком списком элементов. Тот код, который я опубликовал, я понятия не имею, как это работает, я ищу упрощенный набор кодов, которые могут генерировать поле со списком, помещать его в ячейку и заполнять его. Я побеспокоюсь о проверках позже
@ashlee, если я это сделаю, означает ли это, что мне придется перетаскивать поля со списком для каждой ячейки в определенном столбце? нет другого способа просто пропустить его от A2 до последней строки? и мне все еще нужно знать, как поля со списком генерируются из кода и помещают его в ячейки
или, по крайней мере, создайте поле со списком в форме vb и скопируйте его внутри ячейки в excel
Вы пробовали проверку данных с опцией списка, прежде чем сказать, что это не то, что вам нужно? Потому что даже в опубликованном вами коде используется проверка данных.
поскольку я скопировал его из какого-то сообщения здесь, на SO, я собирался изучить его построчно, но поскольку он не генерировал поле со списком, я разместил здесь вопрос и скопировал этот код, который я использовал, надеясь, что кто-то сможет указать, где это я ошибаюсь и почему этот код работает для других, но не для меня
Может быть, вы могли бы дать ссылку на сообщение SO, где вы найдете код? Потому что я думаю, что здесь играют роль некоторые другие параметры. И, кстати, опубликованный вами код будет работать, только если для ячейки установлена проверка данных.
Вы можете добавить поля со списком ко всем соответствующим ячейкам и скрыть их все, установив свойство combobox
.Visible
наFalse
, а затем установив его наTrue
при щелчке по ячейке. Это, вероятно, было бы намного надежнее, чем пытаться сгенерировать их программно во время выполнения для пользователя. С другой стороны, может быть лучше сделать что-то подобное, но с использованием только одного поля со списком, перемещаясь при необходимости.