Страницы: 1
RSS
Создание массива элементов управления в VB Excel
 
Есть две группы элементов управления (не сгруппированы см. файл)  Label и CommandButton. Процедуры обработки событий ‘Private Sub CommandButton1..5_Click()’ одинаковы, при этом меняются соответствующие значения  Label1…5 и таблицы Лист1  А2…А6. Писать код для каждой кнопки громоздко (а если их 20 или больше). Как объединить кнопки в массивы, чтоб написать одну процедуру обработки событий и выполнять ее по индексу. Почему-то в VB Excel при копировании и вставке элементов управления массив не создается, даже нет свойства ‘Index’ у элементов управления.  
Спасибо!
 
это решается с помощью модуля класса и withevents..  
вот пример:  
 
в модуле класса:  
 
Public WithEvents CommandBarEvents As CommandBarButton  
 
Private Sub CommandBarEvents_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)  
   On Error Resume Next  
   If Ctrl.Tag = 256 Then  
       Application.Run Ctrl.OnAction  
       CancelDefault = True  
       Call Application.OnTime(Now + TimeValue("0:00:01"), "Auto_open", Now + TimeValue("0:00:05"))  
         
 
   End If  
End Sub  
 
в стандартном модуле:  
 
Global cm As C_event  
Sub Auto_open()  
   Call Register_Event_Handler  
end sub  
 
Sub Register_Event_Handler()  
   Set cm = New C_event  
   set cm.CommandBarEvents=comandbars(..).control  
End Sub  
 
правда, когда мне надо было разместить 500 кнопок, я почему то предпочел написать 500 обработчиков.. не вручную, конечно..  
 
от недостатка опыта
 
Слен, большое спасибо за участие. Но я ни чего не понял. Как этот пример можно адаптировать под мой вариант. Скорей всего я не очень соображаю в програмировании, потому что совсем не понятно (по примеру что и куда). Можно прокомментировать?    
И еще - думаю что Майкрософт не совсем кострировал VB Excel в отличии от VB. Наверняка можно создовать массивы элеменов управления и управлять одной процедурой по индексу. Но как????????  
Как сделеть чтоб Name = CommandButton у всех элементов массива кнопок? (все виснет при такой попытке).  
Как объявить, что массив кнопок CommandButton(11) содержит 12 элементов массива (начиная с 0).  
И т.д.  
С уважением kkk.
 
вот вам пример
Страницы: 1
Читают тему
Наверх