Как скопировать комбинированный список, чтобы ссылка на ячейку изменялась автоматически - PullRequest
0 голосов
/ 16 февраля 2011

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

Я делаю эту работу с Excel 2007.

Пример: у меня есть комбинированный списокв A5 ссылка на ячейку указывает на B5.Я хочу скопировать поле со списком в ячейку A4 и ссылку на ячейку, чтобы указать на B4.

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

Я нашел один ответ, но VBA показал «Ошибка компиляции: пользовательский тип неопределены!»и "TypeOf cbo.Object Is msforms.ComboBox" выделен жирным шрифтом.

Макрос, который я нашел:

Sub Test()
    Dim cbo As OLEObject

    For Each cbo In ActiveSheet.OLEObjects
        If TypeOf cbo.Object Is msforms.ComboBox Then
            cbo.LinkedCell = cbo.TopLeftCell.Offset(, 1).Address
        End If
    Next
End Sub

Ответы [ 2 ]

1 голос
/ 12 марта 2014

Исходный ответ поставил меня на правильный путь и работает для «элемента управления ActiveX». Мне нужно было сделать то же самое со стандартным списком Excel «Управление формой», и он довольно похож, за исключением того, что это объект формы, и его нужно выбрать для манипулирования. Вот мой код, который работал для меня:

Sub AllocateLinkedCellsToComobBoxes()

Dim myShape As Shape

For Each myShape In ActiveSheet.Shapes
    If myShape.Type = msoFormControl Then
        If myShape.FormControlType = xlDropDown Then
            myShape.Select
            Selection.LinkedCell = Selection.TopLeftCell.Address
        End If
    End If
Next

End Sub
0 голосов
/ 17 февраля 2011

Reima,

Если вы используете элементы управления из панели инструментов «Панель инструментов управления», то должно работать следующее. Разница лишь в том, что это не MSForms.Combobox. :

Sub Test()
Dim cbo As OLEObject

For Each cbo In ActiveSheet.OLEObjects
    If TypeOf cbo.Object Is ComboBox Then
        cbo.LinkedCell = cbo.TopLeftCell.Offset(, 1).Address
    End If
Next    
End Sub

Если вы используете комбинированный список с панели инструментов «Формы», то я не уверен, что лучший подход. Я бы попробовал использовать метод выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...