Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Как определить какой контрол передал управление? Добавлено: 12.02.09 13:54  

Автор вопроса:  AngryBadger
Всем здрасьте!
Собственно, вопрос в теме.
Есть 2-а контрола, каторые при нажатии выполняют
Call Macros1
, а как определить из Macros1, какой из контролов его вызвал?

Заранее спасибо.

Ответить

  Ответы Всего ответов: 12  

Номер ответа: 1
Автор ответа:
 AngryBadger



Вопросов: 33
Ответов: 245
 Профиль | | #1 Добавлено: 12.02.09 14:09
Да, забыл сказать, сейчас я делаю это через глобальную переменную.

Ответить

Номер ответа: 2
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #2
Добавлено: 12.02.09 14:51
Сделай через локальную переменную - передай макросу это значение в параметре, либо можешь по ссылке на объект передать сам контрол.

  1. Option Explicit
  2.  
  3. Private Sub Macros1(Ctl As Control)
  4.     MsgBox Ctl.Name
  5. End Sub
  6.  
  7. Private Sub CommandButton1_Click()
  8.     Call Macros1(CommandButton1)
  9. End Sub
  10.  
  11. Private Sub CommandButton2_Click()
  12.     Call Macros1(CommandButton2)
  13. End Sub

Ответить

Номер ответа: 3
Автор ответа:
 AngryBadger



Вопросов: 33
Ответов: 245
 Профиль | | #3 Добавлено: 12.02.09 15:07
mc-black, в очередной раз, Спасибо.

Ответить

Номер ответа: 4
Автор ответа:
 AngryBadger



Вопросов: 33
Ответов: 245
 Профиль | | #4 Добавлено: 12.02.09 15:13
Правда,
Macros1(Ctl As Control)
- у меня не работает, работает -
  1. Ctl As Object

Ответить

Номер ответа: 5
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #5 Добавлено: 12.02.09 20:02
Не понимаю, над чем париться?
  1. Private Sub Macros1(I as long)
  2.     MsgBox i
  3. End Sub
  4.  
  5. Private Sub CommandButton1_Click()
  6.     Macros1 1
  7. End Sub
  8.  
  9. Private Sub CommandButton2_Click()
  10.     Macros1 2
  11. End Sub

Ответить

Номер ответа: 6
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #6 Добавлено: 12.02.09 20:06
Ctl As Control... не работает?
Попробуй Ctl As MSForms.Control

Ответить

Номер ответа: 7
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #7
Добавлено: 13.02.09 23:34
Не понимаю, над чем париться?

Чтобы потом сразу работать с объектом, передавшим управление, а не через Select..Case / If..ElseIf. Если до объекта нет дела, то конечно твой вариант.

Ответить

Номер ответа: 8
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #8 Добавлено: 14.02.09 08:36
Михаил, на основании твоего следующего вопроса (show.aspx?id=183250), диалога с abv (show.aspx?id=183112) и собственного дара ясновидения осмелюсь предположить, что CommandButton1 и CommandButton2 выполняют однотипные, но противополжные, взаимоисключающие действия типа Пуск-Стоп, Скрыть-Показать и т.п. В этом случае я бы не стал плодить лишние кнопки, а сделал что-то типа этого:
  1. Dim b_HasHiddenRows As Boolean
  2. Dim R As Long
  3.  
  4. Private Sub CommandButton1_Click()
  5. b_HasHiddenRows = Not b_HasHiddenRows
  6. For R = 1 To ActiveSheet.UsedRange.Rows.Count
  7.   If Cells(R, 1) = "" Then Rows(R).Hidden = b_HasHiddenRows
  8. Next R
  9. CommandButton1.Caption = IIf(b_HasHiddenRows, "Показать все", "Скрыть пустые")
  10. End Sub
  11.  
  12. Private Sub UserForm_Initialize()
  13. For R = 1 To ActiveSheet.UsedRange.Rows.Count
  14.   If Rows(R).Hidden Then b_HasHiddenRows = True: Exit For
  15. Next R
  16. CommandButton1.Caption = IIf(b_HasHiddenRows, "Показать все", "Скрыть пустые")
  17. End Sub

Извини, если х....й из меня экстрасенс.

Ответить

Номер ответа: 9
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #9 Добавлено: 14.02.09 10:12
не, вполне нормальный экстрасекс. мне тож кажеццо, что чел не подумав дважды, подумал 1 раз..)

Ответить

Номер ответа: 10
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #10 Добавлено: 14.02.09 15:00
AgentFire, насчет
экстрасекс
не нам с тобой судить(почему-то уверен, что по маленькому ты ходишь стоя). А за поддержку спасибо!!! И все же хотелось бы услышать мнение Михаила или AngryBadgerа на худой конец...

Ответить

Номер ответа: 11
Автор ответа:
 AngryBadger



Вопросов: 33
Ответов: 245
 Профиль | | #11 Добавлено: 16.02.09 10:58
Ну чтож, раскрою карты, fAndOrIn, ты практически угадал, но. На листе Excel, есть n-ное количество СпинБаттонов, которые выполняют абсолютно одинаковые действия - в зависимости от значения счетчика, скрывают или показывают ряды, а делают они это с разными диапазонами. Вся заморочка с тем, чтобы определить какой диапазон взять, мне нужно знать какой счетчик покрутили. Поэтому, по совету mc-black(с твоими дополнениями), делаю для каждого контрола так:
call HideRows(SpinButton1, Range("top1";).Row)

Где top1 - именованая первая ячейка в таблице, ряды которой скрываем или открываем, от неё потом и пляшем.
Вот и фсё.
Возможно, все можно сделать через массив контролов, но я НЕ ЗНАЮ, как его создать(. Если кто-нибудь поможет - буду очень признателен.

mc-black, fAndOrIn - спасибо за помощь.

Ответить

Номер ответа: 12
Автор ответа:
 Newbie88



Вопросов: 0
Ответов: 1
 Профиль | | #12 Добавлено: 17.03.09 16:43
Все это очень верно, но как такую вещь сделать в PowerPoint во время показа слайдов? На слайде лежит куча кнопок и надо в макросе узнать надпись на нажатой кнопке.
Пока есть только:

Sub select_group()
SlideShowWindows(1).View.Next
End Sub

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам