Инициализировать Excel 2007 ComboBox на диаграмме

Я хотел бы инициализировать ComboBox, который существует на диаграмме (автономная диаграмма, а не диаграмма, встроенная в лист), чтобы иметь два значения: «Расходы» и «Доход».

Я попытался ввести буквальный список ('={"Расходы", "Доход"}' или '=("Расходы", "Доход")'), но попытка любого из них привела к ошибке "Ссылка недействительна". (Место, где я пытался ввести литералы, было полем «Входной диапазон», доступ к которому можно получить, щелкнув правой кнопкой мыши элемент управления> Управление форматом> Управление.)

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

Private Sub Chart_Activate()

    Dim expensesIncomeDropDown As Object

    Set expensesIncomeDropDown = Me.Shapes("Drop Down 1") 'Error here
    expensesIncomeDropDown.DropDownLines = 2
    expensesIncomeDropDown.AddItem "Expenses"
    expensesIncomeDropDown.AddItem "Income"

End Sub

(«Drop Down 1» — это индекс, используемый средством записи макросов, когда я записываю изменение элемента управления. Я также пробовал «DropDown1».) Но указанная строка выдает ошибку: «Ошибка времени выполнения '-2147024809 (80070057)': Элемент с указанным именем не найден." Использование окна locals VBA IDE для проверки свойства Shapes Me (диаграммы) указывает на то, что коллекция пуста. Я попытался получить доступ к элементу управления из события Chart_BeforeDoubleClick (предполагая, что коллекция Shapes не была инициализирована для события Activate), но получил тот же результат.

Другие сталкиваются с такой же проблемой. . Совет ценится.


person Carl G    schedule 08.08.2009    source источник


Ответы (1)


Из вашего описания контекстного меню вы используете элемент управления формы, а не элемент управления ActiveX.

Я не думаю, что вы можете вводить значения в раскрывающийся список, как в поле со списком ActiveX. Вы должны указать в раскрывающемся списке диапазон ввода, содержащий значения для списка, либо вручную, либо через VBA:

Dim shp As Shape

Set shp = chtTest.Shapes(1)
If shp.Type = msoFormControl Then
    If shp.FormControlType = xlDropDown Then
        shp.ControlFormat.ListFillRange = ThisWorkbook.Names("rngDDValues")
    End If
End If

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

Я бы предложил использовать элемент управления ActiveX, но, к сожалению, вы не можете добавить его на лист диаграммы.

person dendarii    schedule 09.09.2009