Инициализация Excel 2007 ComboBox на графике - PullRequest
0 голосов
/ 09 августа 2009

Я хотел бы инициализировать 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 ) ': Элемент с указанным именем не найден. " Использование локального окна VBA IDE для проверки свойства Shapes объекта Me (Диаграмма) указывает на то, что коллекция пуста. Я попытался получить доступ к элементу управления из события Chart_BeforeDoubleClick (предположив, что коллекция Shapes не была инициализирована для события Activate), но у меня был тот же результат.

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

1 Ответ

0 голосов
/ 09 сентября 2009

Из описания меню, вызываемого правой кнопкой мыши, вы используете элемент управления формой, а не элемент управления 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, но, к сожалению, вы не можете добавить его на лист диаграммы.

...