Страницы: 1
RSS
Макрос - один юзерформ для разных листов
 
Добрый день!
С разных листов кнопкой вызывается юзерформ с переключателями. Задача, чтобы в зависимости от текущего листа значение выбранного переключателя вставлялось в конкретную ячейку активного листа. Ячейки на разных листах могут не совпадать (как в примере это Лист1 ячейка A1, Лист2 ячейка B2, Лист3 ячейка C3). В примере всего два переключателя и три листа, но в оригинале их намного больше. Не могу понять как доработать код, чтобы заработало.
Спасибо.
 
Кто вызвал функцию или процедуру?
Application.Caller.Parent
Согласие есть продукт при полном непротивлении сторон
 
Код Кнопки (CommandButton) вызывающей юзерформ находится в модуле листа. Юзерформ по задумке подставляет значение в зависимости от выбранного переключателя (OptionButton) на текущий лист. Куда применить предложенную Application.Caller.Parent никак в толк не возьму.
 
Это нужно?
Код
Private Sub OptionButton1_Click()
Select Case ActiveSheet.Name
Case "Лист1"
    Range("A1") = "значение1"
Case "Лист2"
    Range("B2") = "значение1"
Case "Лист3"
    Range("C3") = "значение1"
End Select
End Sub
 
Создайте именованные диапазоны с областью действия на лист.
ФОРМУЛЫ - Диспетчер имен - Создать.
Код
Private Sub OptionButton1_Click()
    Range("переключатель") = "111"
End Sub

Private Sub OptionButton2_Click()
    Range("переключатель") = "222"
End Sub
Бонусом от такого решения будет возможность передвигать ячейки, не меняя код.
 
Цитата
написал:
Private Sub OptionButton1_Click()
Select Case ActiveSheet.Name
Case "Лист1"
   Range("A1") = "значение1"
Case "Лист2"
   Range("B2") = "значение1"
Case "Лист3"
   Range("C3") = "значение1"
End Select
End Sub
Благодарю, однако хотелось избежать прописывать условие для каждого OptionButton в отдельности, т.к. их на данный момент восемь штук, а листов для которых код выполняется и того больше (и это не предел, листы могут добавляться).
 
Цитата
написал:
Private Sub OptionButton1_Click()
   Range("переключатель") = "111"
End Sub

Private Sub OptionButton2_Click()
   Range("переключатель") = "222"
End Sub
Попробую и этот вариант, может получится, тогда позже отпишусь.
 
Цитата
Senya написал: Application.Caller.Parent никак в толк не возьму
Да, в Вашем случае он будет не особенно полезен
Если
Цитата
Senya написал: в оригинале их намного больше
присмотритесь к Классам
Работа с модулями классов
П.С. И еще. Элементы ActiveX(которыми Вы пользуетесь) очень плохо зарекомендовали себя в плане использования/копирования/и корректной работы в принципе. Используйте на листе Элементы управления формы или Кнопки-фигуры
Согласие есть продукт при полном непротивлении сторон
 
Цитата
написал:
Создайте именованные диапазоны с областью действия на лист.ФОРМУЛЫ - Диспетчер имен - Создать.
Способ рабочий, хоть и приходится в каждом листе нужные ячейки проименовать.
 
Цитата
написал:
Работа с модулями классов
Спасибо, поизучаю, может найду для себя решение по-проще.
Страницы: 1
Наверх