2010-08-23 2 views
2

Я заполняю таблицу своими значениями базы данных. Теперь, если я заполнял 30 строк, я хочу создать динамическую кнопку, например, 31-я или 32-я строка для выполнения некоторых действий. Количество строки, которые будут заполнены, не фиксированы. Как я могу это сделать.Как создать динамическую кнопку в excel

+0

Что означает «заселение ... значениями базы данных»? вы заполняете пользовательский ввод или с помощью кода VBA? – MikeD

+0

Через VBA.Sorry, если я получил жаргон неправильно. Я делаю DB-соединение через VBA, а затем выполняю команду Select для получения данных в электронной таблице. – gizgok

ответ

4

Я предполагаю, что вы пройдете цикл по записям после того, как запрос заполнит ваш стол, найдите условие и «сделайте материал». Поэтому я предполагаю, что место, где вы хотите разместить кнопку представлен объект Range() в ActiveSheet()

Так давайте создавать динамические кнопки ActiveX в этом месте:

Sub CreateDynamicButton() 
Dim MyR As Range, MyB As OLEObject 
Dim MyR_T As Long, MyR_L As Long 


    Set MyR = Range("C110") 'just an example - you get that from your own script 
    MyR_T = MyR.Top   'capture positions 
    MyR_L = MyR.Left  '... 
    'create button 
    Set MyB = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False, DisplayAsIcon:=False) 

    'set main button properties 
    With MyB 
     .Name = "MyPrecodedButton"  'important - code must exist ... see below 
     .Object.Caption = "MyCaption" 
     .Top = MyR_T 
     .Left = MyR_L 
     .Width = 50 
     .Height = 18 
     .Placement = xlMoveAndSize 
     .PrintObject = True   'or false as per your taste 
    End With 

End Sub 

Если - заранее - вы создали следующую процедуру в активном листе

Private Sub MyPrecodedButton_Click() 
    MsgBox "Co-Cooo!" 
End Sub 

то хорошее появится сообщение, как только вы нажмете на кнопку, созданную выше (протестировано под XP/SP2 + Excel 2003).

Процедура Create не спрашивает, существует ли кнопка с таким же именем, вам необходимо принять меры для ее создания только один раз с тем же именем. Если вы дважды вызовете эту процедуру, то .Name = "..." бесшумно проиграет и начнет называть кнопку «CommandButton1» и вверх.

Итак, у вас должно быть все ингредиенты, чтобы создать свою кнопку (и). Каждому из них потребуется предварительная процедура, если им нужно действовать по-разному. Я должен упомянуть, что вы не можете отлаживать (переходить) процедуру Create после разбиения объекта OLE, потому что управление передается вне Excel - «это не ошибка, это особенность!»

Я должен признать, что это звучит немного необычно, и я бы предпочел не устанавливать динамические кнопки, действующие на предварительно закодированные Sub, вместо этого я бы сделал начальное диалоговое окно перед тем, как задать параметры, используя флажки, такие как «Truncate after X строк (Y/N) "и тому подобное - но у вас будут веские причины для этого.

Надеюсь, что это поможет - удачи

+0

Я заполнил свою таблицу сразу после этого, я выбираю ячейку, поэтому, когда я выбираю ячейку, я должен получить кнопку, чтобы обновить мои изменения. Я бы попробовал ваш фрагмент кода и дал вам знать. Спасибо за усилие – gizgok

+0

Получение ошибка 1004 ошибки времени выполнения не может вставить объект – gizgok

+0

Создана ли ссылка с VBA на «Библиотека объектов Microsoft Office Forms 2.0» или эквивалентная (Tools/References) ... эта библиотека находится в .../System32/FM20.DLL – MikeD

Смежные вопросы