2016-09-09 2 views
0

Мне нужно добавить комбинированный блок (ActiveX Control) или Data Validation в качестве выпадающего списка. У меня есть диапазон из 15 значений, таких как: высокий, низкий, средний и т. Д. Создал именованный диапазон под названием «priorityvalue».Добавление поля со списком через несколько ячеек

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

Но мое беспокойство, мне нужно выпадающий список для 58cells с теми же значениями, упомянутыми выше. Его утомительная работа по созданию комбинированного блока для всех ячеек. Пожалуйста, предложите мне лучший вариант здесь.

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

Пожалуйста, предложите

+0

думают, что это может иметь уже ответили ранее [перейдите по этой ссылке] (http://stackoverflow.com/questions/17675761/programatically-add-combobox-in-vba-excel) – DaveMac

+0

@DaveMac Как изменить код, указанный в предложенной вами ссылке, так что этот же поле со списком добавляется ко всем 58 ячейкам, доступным в столбце? Я запутался. Пожалуйста помоги!! – sady

+0

Являются ли ячейки в 1 столбце или находятся в нескольких столбцах? то есть они спускаются в одном столбце или пересекаются с несколькими столбцами, но с той же строкой – Zac

ответ

0

Вставьте следующий код в «ThisWokbook»

Private Sub Workbook_Open() 

    Dim oItem As Object 

    For Each oItem In Worksheets(1).OLEObjects 

     If TypeName(oItem.Object) = "ComboBox" Then 

      If Len(oItem.Object.Value) > 0 Then 
       oItem.Object.Value = "" 
      End If 

     End If 

    Next 

    Set oItem = Nothing 

End Sub 

ПРИМЕЧАНИЕ: Есть предостережения. Выше кода сбросит все выпадающие списки на вашем листе (также я установил рабочий лист на первый рабочий лист в книге, возможно, вы захотите сделать эту динамику). Если вы не хотите, чтобы сбросить все выпадающие списки и делать только те, которые вы добавили с помощью функции, вы можете использовать формат имя для фильтрации те, которые вы хотите очистить

Надеются, что это помогает

+0

Большое вам спасибо, что помогли! – sady

+0

Не беспокойтесь, рад помочь – Zac

0

Попробуйте это:

Sub AddComboBoxToColumns(ByVal oRange As Excel.Range) 

    Dim oOLE As OLEObject 
    Dim oCell As Object 

    ' Loop through all the cells in the range 
    For Each oCell In oRange.Cells 

     ' Add ComboBox in each cell 
     With oCell 

      Set oOLE = .Parent.OLEObjects.Add("Forms.combobox.1") 
      oOLE.Top = .Top 
      oOLE.Left = .Left 
      oOLE.Width = .Width 
      oOLE.Height = .Height 
      oOLE.Name = "ComboBox" & .Address(False, False) 
      oOLE.Object.List = Array("Test1", "Test2") 

     End With 

    Next 

    Set oOLE = Nothing 

End Sub 

ПРИМЕЧАНИЯ: Вызов выше функции с диапазоном ячеек, к которым вы хотите добавить ComboBox. Вам придется изменить массив использовать значения, которые вы хотите (вы можете ввести их там или дать диапазон, где ваши существующие значения)

+0

извините за задержку в ответе. У меня есть беспокойство. Вы попросили меня вызвать указанную выше функцию из ячейки. Я создал модуль, изменив код выше как публичную функцию, и я пытаюсь вызвать из ячейки с помощью формулы = cell = AddComboBoxToColumns (E1, E57). Но я знаю, что я делаю что-то не так здесь, как его работа. – sady

+0

Пожалуйста, помогите мне, если процедура, которую я соблюдаю, не то, что вы ожидали. Как мне позвонить с диапазоном ячеек Я хочу добавить поле со списком – sady

+0

@sady. Если вы хотите называть его со своего рабочего листа, вы всегда можете добавить кнопку на свой рабочий лист и называть его таким образом. В противном случае, как вы это сделали, добавьте его в модуль, а затем вызовите его из другой функции/sub. Дайте мне знать, если это работает – Zac

Смежные вопросы