Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2010, 18:59   #1
ELE-COM
Пользователь
 
Регистрация: 08.05.2010
Сообщений: 48
По умолчанию Условие в макросе от выбора кнопки

Есть проблема: на листе 2 кнопки, запускающие 2 почти одинаковых макроса. Разница в том, что первая выводит на печать заданную область, а вторая нет. Оставшаяся часть макросов выполняет одинаковые функции. Можно-ли создать условие в одном макросе, по которому при нажатии на первую кнопку печать будет, а при нажатии на вторую - нет (чтобы удалить лишний макрос).
Вариант: MsgBox("Распечатать ?", Buttons:=3) не подходит, хотелось бы в одно нажатие.
Посоветуйте, пожалуйста.
ELE-COM вне форума Ответить с цитированием
Старый 18.05.2010, 20:38   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Допустим с печатью МАКРОС1.
В обьявлении макроса добавляем параметр ПЕЧАТАТЬ as boolean.
С одной кнопки вызываем МАКРОС1 true, с другой МАКРОС1 false.
в теле макроса фрагмент, который выводит на печать заключаем в такие скобки
if ПЕЧАТАТЬ then
' фрагмент распечатывающий данные
end if
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 18.05.2010, 20:39   #3
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Может быть, объявить булеву переменную на уровне модуля. Что-то вроде этого:
Dim Бул As Boolen

Sub CommandButton1_Click()
Бул = False
Call ОсновнойМакрос
End Sub

Sub CommandButton2_Click()
Бул = True
Call ОсновнойМакрос
End Sub

А в основном макросе:
...
If Бул=False Then
печатаем
Else
не печатаем
End If
...
nilem вне форума Ответить с цитированием
Старый 18.05.2010, 20:40   #4
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Упс, опоздал на минуту.
nilem вне форума Ответить с цитированием
Старый 18.05.2010, 21:01   #5
ELE-COM
Пользователь
 
Регистрация: 08.05.2010
Сообщений: 48
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
Допустим с печатью МАКРОС1.
...
С одной кнопки вызываем МАКРОС1 true, с другой МАКРОС1 false.
Я правильно понял:
Код:
Sub спечатью()
Call МАКРОС1(true)
End Sub

Sub безпечати()
Call МАКРОС1(false)
End Sub
?
Просто принтера сейчас нет, проверить не могу. Без печати работает.

Последний раз редактировалось ELE-COM; 18.05.2010 в 21:05.
ELE-COM вне форума Ответить с цитированием
Старый 18.05.2010, 21:08   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Правильно.
Макрос был обьявлен
Sub МАКРОС1()
а теперь надо
Sub МАКРОС1(ПЕЧАТЬ as boolean)
и в теле макроса две строки добавить (описано уже выше как)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 18.05.2010, 21:16   #7
ELE-COM
Пользователь
 
Регистрация: 08.05.2010
Сообщений: 48
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
Правильно.
Макрос был обьявлен
Sub МАКРОС1()
а теперь надо
Sub МАКРОС1(ПЕЧАТЬ as boolean)
и в теле макроса две строки добавить (описано уже выше как)
Остальное я так и сделал сразу же.
Модуль сократился на 28 Кb
Спасибо!!!
ELE-COM вне форума Ответить с цитированием
Старый 18.05.2010, 21:19   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

ELE-COM,
проверить сейчас можно так:
закомментировать все что должно было печатать
поставить одну строку MsgBox "Тут должно было распечатываться..."
Не забыть потом все вернуть к правильному состоянию

nilem,
очень понравилось это:
If Бул=False Then
печатаем
Else
не печатаем

End If

Строго как в анекдоте о программисте. Ложится программист спать возле кровати ставит стакан с водой и пустой стакан. На вопрос:
- Зачем?
- А вдруг пить ночью захочу!
- А пустой???
- А вдруг не захочу!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 18.05.2010, 21:46   #9
ELE-COM
Пользователь
 
Регистрация: 08.05.2010
Сообщений: 48
По умолчанию

Код:
Dim стакан As Boolean
If Стакан > 0 Then
MsgBox "Хочу пить"
Else 
MsgBox "Не хочу пить"
End If
ELE-COM вне форума Ответить с цитированием
Старый 18.05.2010, 21:48   #10
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Да, не профессионал. Но подход-то верный!
nilem вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Условие в макросе на цвет заливки ячеек Chelentano Microsoft Office Excel 2 03.08.2009 23:44
Что неверно в макросе? Иванов_ДМ Microsoft Office Excel 11 22.05.2009 21:57
Функции в макросе. Rom1k06 Microsoft Office Excel 7 19.10.2008 11:22
Константы в Макросе valerij Microsoft Office Excel 2 03.02.2008 23:33
триггерные кнопки и кнопки переключатели в DELPHI MARGO Помощь студентам 3 12.11.2007 17:35