Проверка выпадающего на условие - PullRequest
1 голос
/ 09 апреля 2009

Писать мою идею немного сложно, но я попробую. Вот что я смог сделать. У меня есть выпадающий список моих вертикальных ячеек, поэтому у меня есть список имен, из которых можно выбрать [name] -> [define] и [data] -> [validation]. то, что я хотел бы, это еще одна вертикальная ячейка, чтобы заполнить еще один выпадающий список в зависимости от состояния первого.

например, у меня есть список фруктов и овощей. Мое первое выпадающее меню спрашивает тип, поэтому я выбираю фрукты. Из-за такого выбора мой второй выпадающий список даст мне список только фруктов (без овощей) и наоборот. +

Ваша помощь очень ценится.

спасибо, банда!


если я хочу назвать клетку вместо овоща, но в 2009 и фрукте 2010 я получаю ошибку. есть ли способ обойти? спасибо

Ответы [ 3 ]

4 голосов
/ 09 апреля 2009

Давайте работать с некоторыми именованными диапазонами.

Название E7 "опция"

Поместите "овощи" в E4 и "фрукты" в E5;

в E7, Данные> Проверка> Список, источник $ E $ 4: $ E $ 5;

положить немного овощей в H4: H7; назовите этот диапазон "овощи";

положить несколько фруктов в J4: J7; назовите этот диапазон "фрукты";

Теперь в E8: Данные> Проверка> Список, источник "= INDIRECT (опция)".

Когда вы делаете выбор в E7, опции для E8 устанавливаются соответственно.

0 голосов
/ 09 апреля 2009

Вы не можете назвать диапазон «2009» - потому что Excel будет трудно отличить его от целочисленного значения 2009. Также есть некоторые другие ограничения - вы не можете назвать диапазон «A1», потому что Excel запутается с ячейкой А1. Вместо этого вы можете поместить в таблицу таблицы 2009 и 2010 годов, а рядом с ними поставить имена диапазонов, а затем выполнить VLOOKUP, чтобы получить имя диапазона. С другой стороны, вы можете использовать, скажем, «_2009» и иметь вашу формулу как

= НЕПОСРЕДСТВЕННО ("_" & опция)

0 голосов
/ 09 апреля 2009

Вот мой код для выполнения именно того, что вы просите.

Я определил независимый столбец как именованный диапазон с именем Major_Category и установил проверку в раскрывающемся списке на список данных. Затем у меня есть несколько других списков данных с именем cat_subItems. Итак, для вашего примера основная категория будет иметь элементы

  • фрукты
  • 1010 * растительное *

тогда я определил другие списки под названием

  • cat_fruit
  • cat_vegetable

который будет содержать названия фруктов или овощей. Затем на основе выбора основной категории событие Worksheet_change изменит проверку раскрывающегося списка в следующем столбце на cat_fruit или cat_vegetable.

Примечание: Этот код не очень удобен, если вы используете рабочую таблицу Excel. См. в этом вопросе о работе с таблицей Excel / защитой книги.

Public Sub Worksheet_Change(ByVal target As Range)
On Error GoTo ErrHandler:

Dim VRange As Range, cell As Range
Dim msg As String
Dim validateCode As Variant
Dim modCell As Range
Set VRange = Range("Major_Category")

If Intersect(VRange, target) Is Nothing Then Exit Sub

For Each cell In Intersect(VRange, target)
    b = cell.Value
    curRow = target.Row

    Set modCell = cell.Offset(0, 1) 'cell to modify the validation'

    If Not (b = "") Then
        modCell.Validation.Delete
        modCell.Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _

        'sets the validation formula to the list/range name'
        xlBetween, Formula1:="=cat_" & b 

        modCell.Validation.IgnoreBlank = True
        modCell.Validation.InCellDropdown = True
        modCell.Validation.InputTitle = ""
        modCell.Validation.ErrorTitle = ""
        modCell.Validation.ErrorMessage = ""
        modCell.Validation.ShowInput = True
        modCell.Validation.ShowError = True

    End If
Next cell


Cleanup:

Exit Sub

ErrHandler:
MsgBox Err, vbOKOnly, "Error Occurred"
Resume Cleanup:

End Sub
...