Vba, как создать поле со списком внутри ячейки, по которой щелкнули

можно ли создать поле со списком / раскрывающийся список внутри ячейки, которая в настоящее время активна? Я пробовал это, но ничего не вышло:

Программно добавить раскрывающийся список в определенную ячейку

мой клиент хочет, чтобы любая ячейка, которая была нажата в столбце 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

Вы можете добавить поля со списком ко всем соответствующим ячейкам и скрыть их все, установив свойство combobox .Visible на False, а затем установив его на True при щелчке по ячейке. Это, вероятно, было бы намного надежнее, чем пытаться сгенерировать их программно во время выполнения для пользователя. С другой стороны, может быть лучше сделать что-то подобное, но с использованием только одного поля со списком, перемещаясь при необходимости.

ashleedawg 27.09.2018 09:27

Кроме того, почти всегда плохая идея использовать On Error Resume Next по многим причинам, и тем более при попытке устранить проблему. Ваше описание «ничего не произошло» бесполезно - если вы хотите точно выяснить, в чем заключается проблема, я бы предложил прохождение кода по одной строке за раз (с F8) следить за значениями связанных переменных и т. д. дополнительную информацию об этом см. Чип Пирсон Отладка VBA.

ashleedawg 27.09.2018 09:31

Вы уверены, что вашему клиенту нужен не только Проверка данных со списком?

Vincent G 27.09.2018 09:43

на данный момент моя проблема состоит в том, чтобы создать поле со списком внутри ячейки, по которой щелкнули мышью, а затем заполнить это поле со списком списком элементов. Тот код, который я опубликовал, я понятия не имею, как это работает, я ищу упрощенный набор кодов, которые могут генерировать поле со списком, помещать его в ячейку и заполнять его. Я побеспокоюсь о проверках позже

Pamingkas Sevada 27.09.2018 09:47

@ashlee, если я это сделаю, означает ли это, что мне придется перетаскивать поля со списком для каждой ячейки в определенном столбце? нет другого способа просто пропустить его от A2 до последней строки? и мне все еще нужно знать, как поля со списком генерируются из кода и помещают его в ячейки

Pamingkas Sevada 27.09.2018 09:50

или, по крайней мере, создайте поле со списком в форме vb и скопируйте его внутри ячейки в excel

Pamingkas Sevada 27.09.2018 09:52

Вы пробовали проверку данных с опцией списка, прежде чем сказать, что это не то, что вам нужно? Потому что даже в опубликованном вами коде используется проверка данных.

Vincent G 27.09.2018 09:52

поскольку я скопировал его из какого-то сообщения здесь, на SO, я собирался изучить его построчно, но поскольку он не генерировал поле со списком, я разместил здесь вопрос и скопировал этот код, который я использовал, надеясь, что кто-то сможет указать, где это я ошибаюсь и почему этот код работает для других, но не для меня

Pamingkas Sevada 27.09.2018 10:00

Может быть, вы могли бы дать ссылку на сообщение SO, где вы найдете код? Потому что я думаю, что здесь играют роль некоторые другие параметры. И, кстати, опубликованный вами код будет работать, только если для ячейки установлена ​​проверка данных.

Vincent G 27.09.2018 10:09
ozgrid.com/forum/forum/help-forums/excel-general/… здесь
Pamingkas Sevada 27.09.2018 10:19
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
10
53
0

Другие вопросы по теме