Программно позиционировать Excel ListBox

Мне нужно динамически создавать и удалять от 1 до N списков на листе. Поскольку страница будет меняться, я не могу заранее знать, где разместить элемент управления, поэтому оператор типа ... Слева: = 10, Сверху: = 10, Ширина: = 106,8, Высота: = 154,6 не будет работать. Мне нужно иметь возможность программно размещать элементы управления, например, на C1 или C55.

Проведенное мной исследование обнаружило только примеры статического создания в фиксированном месте, и я также не смог найти ничего, что дало бы мне координаты ячейки (например: C1 = слева: = 65, вверху: 87). .

Спасибо за вашу помощь.


person willlow1044    schedule 09.11.2015    source источник


Ответы (1)


Учти это:

Dim i&, n&, r As Range

n = 3
With ActiveSheet
    For i = 1 To n
        Set r = .Range("c1")(i)
        .ListBoxes.Add r.Left, r.Top, r.Width, r.Height
    Next
End With

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

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

person Excel Hero    schedule 09.11.2015
comment
Хороший ответ. Добавляет список FormControl. В качестве альтернативы, чтобы добавить список ActiveX, используйте .OLEObjects.Add(ClassType:="Forms.ListBox.1", ... - person chris neilsen; 10.11.2015