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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2009, 10:28   #1
serafim09
Пользователь
 
Регистрация: 28.08.2009
Сообщений: 47
По умолчанию Макрос на проверку значений

Добрый день всем гуру VBA!
я новичок в макросах....
Помогите советом или примером.

Есть баланс. Необходим макрос, чтобы если баланс не сходился, то выскакивало сообщение "В таком то месяце, разница между активом и пассивом составляет такую то величину".

Я пытался сделать, но мало знаний.... вот пытался накидать на первую ячейку....

Код:
Private Sub Worksheet_Calculate()
Sheets("Лист1").Select
If Round(Range("С20").Value, 0) - Round(Range("С39").Value, 0) > 1 Then

    MsgBox "Баланс не сходится на величину " & Application.Round(Range("С20").Value, 0) - Round(Range("С39").Value, 0) & "руб.", vbInformation

    End If
End Sub
Вложения
Тип файла: rar Макрос на проверку.rar (9.1 Кб, 18 просмотров)
serafim09 вне форума Ответить с цитированием
Старый 08.09.2009, 10:44   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Для ячеек "C20" и C39" можно так:
Код:
Private Sub Worksheet_Calculate()
    Dim a As Long: a = Round([C20]) - Round([C39])
    If a <> 0 Then MsgBox "Баланс не сходится на величину " & a & "руб."
End Sub
Этот код должен находиться в модуле соответствующего листа.
А вот что делать, если требуется проверять несколько пар ячеек на листе? Придумайте и сформулируйте требования.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 08.09.2009, 10:51   #3
serafim09
Пользователь
 
Регистрация: 28.08.2009
Сообщений: 47
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Для ячеек "C20" и C39" можно так:
Код:
Private Sub Worksheet_Calculate()
    Dim a As Long: a = Round([C20]) - Round([C39])
    If a <> 0 Then MsgBox "Баланс не сходится на величину " & a & "руб."
End Sub
Этот код должен находиться в модуле соответствующего листа.
А вот что делать, если требуется проверять несколько пар ячеек на листе? Придумайте и сформулируйте требования.

Уважаемый SAS888. Требования я написал выше. Но наверное не понятно...

Мне нужно, чтобы если в каком то месяце есть различие между пассивом и активом, то выскакивало сообщение, с содержанием названия месяца в котором баланс не сходится и величина разницы.

Например "08/2009 г. баланс не сходится на величину в 100 руб."

иначе мне на каждый столбец с датой придется ставить a = Round([XX]) - Round([CXX]), при этом если мне нужно будет увеличить период баланса, то опять вручную вписывать эти ячейки в макросе.

Мне бы по проще данную процедуру проверки.

p.s. Кстати ваш вариант кода на много проще и лучше моего )) Сенкс. Жду дальнейших наставлений )

Последний раз редактировалось serafim09; 08.09.2009 в 11:03.
serafim09 вне форума Ответить с цитированием
Старый 08.09.2009, 11:23   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Мне нужно, чтобы если в каком то месяце есть различие между пассивом и активом, то выскакивало сообщение...
Вот по этому поводу я и задал Вам вопрос, на который Вы так и не ответили.
Спрошу по-другому:
1. Что делать, если баланс не сходится в нескольких месяцах?
2. Кто и как заполняет лист? Т.к. если применять "выскакивание" сообщений, то при заполнении листа, например, "врурную", они (сообщения) Вас замучают.
3. Строки результатов активов и пассивов на листе фиксированы, или могут изменяться?

P.S.
Может быть лучше написать макрос "Проверка" и запускать его вручную по мере надобности? Во-первых, процедура проверки не будет происходить каждый раз при пересчете листа (изменении значений в формулах). Во-вторых, по окончании работы можно вывести очень подробный результат проверки.
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 08.09.2009 в 11:30. Причина: Добавлено
SAS888 вне форума Ответить с цитированием
Старый 08.09.2009, 11:35   #5
serafim09
Пользователь
 
Регистрация: 28.08.2009
Сообщений: 47
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Вот по этому поводу я и задал Вам вопрос, на который Вы так и не ответили.
Спрошу по-другому:
1. Что делать, если баланс не сходится в нескольких месяцах?
2. Кто и как заполняет лист? Т.к. если применять "выскакивание" сообщений, то при заполнении листа, например, "врурную", они (сообщения) Вас замучают.
3. Строки результатов активов и пассивов на листе фиксированы, или могут изменяться?
1. Если баланс не сходится в нескольких месяцах - то сообщение с перечнем месяцев и величинами расхождений наверное я так понимаю сделать не реально... тогда сообщение с расхождением в первый месяц, в котором произошло расхождение.
2. Заполняется лист на основании данных, которые он берет из других строчек, в которых произошли расчеты. Т.е. непосредственно каждую строку в ручную не забиваю.
3. Кол-во строк результатов активов и пассивов фиксировано, но не диапазон временной, я его могу менять от 3-ох месяцев и далее до бесконечности....

вот как то так


Кстати у меня на листе есть проверка = ЕСЛИ((Пассив - Актив)>1;1;0).
Наверное проще сделать в макросе поиск этой 1 при расхождении и тогда в месяце в котором расхождение чтоб выскакивало сообщение о величине расхождения и самом месяце.

Последний раз редактировалось serafim09; 08.09.2009 в 11:40.
serafim09 вне форума Ответить с цитированием
Старый 08.09.2009, 12:00   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

= ЕСЛИ((Пассив - Актив)>1;1;0)
стартовая логика не верна (или я ошибаюсь). допустим пассив=100, актив=1000, пассив-актив=-900, для меня это знак, что они не сходятся абсолютно принципиально, а ваша формула вернет 0 - вроде как все ок!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 08.09.2009, 12:37   #7
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Посмотрите вложение. Запустите макрос "Проверка".
Вложения
Тип файла: rar Макрос на проверку_2.rar (10.0 Кб, 59 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 08.09.2009, 12:39   #8
serafim09
Пользователь
 
Регистрация: 28.08.2009
Сообщений: 47
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
= ЕСЛИ((Пассив - Актив)>1;1;0)
стартовая логика не верна (или я ошибаюсь). допустим пассив=100, актив=1000, пассив-актив=-900, для меня это знак, что они не сходятся абсолютно принципиально, а ваша формула вернет 0 - вроде как все ок!
Согласен, тогда прошу помощи
serafim09 вне форума Ответить с цитированием
Старый 08.09.2009, 12:50   #9
serafim09
Пользователь
 
Регистрация: 28.08.2009
Сообщений: 47
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Посмотрите вложение. Запустите макрос "Проверка".
....нет слов!!!

Вышло просто изумительно!

Сейчас буду разбираться в Вашем коде,

Буду Вам очень признателен, если у Вас будет свободное время, то небольшое описание к строчкам в коде напишете о последовательности действий.
serafim09 вне форума Ответить с цитированием
Старый 08.09.2009, 13:22   #10
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Во вложении тот же файл. В коде макроса подробные комментарии.
Вложения
Тип файла: rar Макрос на проверку_2_comments.rar (11.0 Кб, 90 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос постоянно обрабатывает события. При открытии другой книги макрос обрывается. Ples Microsoft Office Excel 8 17.12.2016 18:15
Макрос для формата значений segail Microsoft Office Excel 3 13.06.2009 20:54
Pascal задача на проверку условия werser Помощь студентам 1 21.12.2008 00:34
Помогите проверку ввода сделать Panda Помощь студентам 3 01.07.2008 20:50
Делать проверку при спрятонной форме AngelOfDeath Общие вопросы Delphi 8 02.05.2008 15:35