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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2015, 15:19   #1
Оксана33
Форумчанин
 
Аватар для Оксана33
 
Регистрация: 24.11.2014
Сообщений: 156
По умолчанию Ошибка в макросе

Почему макрос не работает?

Код:
Private Sub Worksheet_Change(ByVal Target As Range)
    i = Target.Row

    If Cells(i, 2) = 200 Then
    Cells(i, 1) = Date
    Else: Cells(i, 1).ClearContents
    End If
    
    If Cells(i, 8) <> Empty Then
    Cells(i, 9) = Date
    ElseIf Cells(i, 8) = ClearContents Then
    Cells(i, 9).ClearContents
    End If

End Sub
Знание надмевает, а любовь назидает

Последний раз редактировалось Оксана33; 20.12.2015 в 15:23.
Оксана33 вне форума Ответить с цитированием
Старый 20.12.2015, 15:31   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

напишите вверху модуля:
Код:
Option Explicit
и этот код вообще перестанет выполняться, как и должно быть
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 20.12.2015, 15:42   #3
Оксана33
Форумчанин
 
Аватар для Оксана33
 
Регистрация: 24.11.2014
Сообщений: 156
По умолчанию

так что же с ним не так? с одним условием выполняется, значит дело в конфликте условий...но где же там конфликт?
Знание надмевает, а любовь назидает
Оксана33 вне форума Ответить с цитированием
Старый 20.12.2015, 15:47   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

я не уверен, что понимаю что Вы хотите добиться от этого макроса
но вооружившись методом дедукции предлагаю написать такой
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
  i = Target.Row
  If Cells(i, 2) = 200 Then Cells(i, 1) = Date Else Cells(i, 1).ClearContents
  If IsEmpty(Cells(i, 8)) Then Cells(i, 9) = Date Else Cells(i, 9).ClearContents
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 20.12.2015, 15:51   #5
Оксана33
Форумчанин
 
Аватар для Оксана33
 
Регистрация: 24.11.2014
Сообщений: 156
По умолчанию

кажется разобралась сама, ща напишу

Код:
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 2 Then

    i = Target.Row

    If Cells(i, 2) = 200 Then
    Cells(i, 1) = Date
    Else: Cells(i, 1).ClearContents
    End If
    
End If
 
If Target.Column = 8 Then

    i = Target.Row
 
    If Cells(i, 8) <> Empty Then
    Cells(i, 9) = Date
    ElseIf Cells(i, 8) = ClearContents Then
    Cells(i, 9).ClearContents
    End If
    
End If

End Sub
Знание надмевает, а любовь назидает

Последний раз редактировалось Оксана33; 20.12.2015 в 15:56.
Оксана33 вне форума Ответить с цитированием
Старый 20.12.2015, 16:07   #6
Оксана33
Форумчанин
 
Аватар для Оксана33
 
Регистрация: 24.11.2014
Сообщений: 156
По умолчанию

IgorGO, 2-е условие должно начинаться по всей видимости If Not IsEmpty

но и с этим кодом тоже что-то не так
Знание надмевает, а любовь назидает
Оксана33 вне форума Ответить с цитированием
Старый 20.12.2015, 16:22   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

видите-ли, пока Вы не рассказали простыми словами что должно происходить на листе (чего Вы добиваетесь)
написать корректный код Вам может только очень опытный экстрасенс,
а когда расскажете - любой начинающий программист (видимо, кроме Вас)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 20.12.2015, 16:30   #8
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Цитата:
Сообщение от Оксана33 Посмотреть сообщение
Почему макрос не работает?
Потому что зацикливается. Добавьте
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
   Application.enableevents = false
  on error resume next
'...
   Application.enableevents = true
End Sub
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 20.12.2015, 16:48   #9
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Семен Семеныч...

стандартные строки в Worksheet_Change
отключить обработку событий
и...
включить как было

но даже при вовремя отключенной обработке событий
это
Else: Cells(i, 1).ClearContents
и это
ElseIf Cells(i, 8) = ClearContents
будет работать так как написано, а это может сильно отличаться от того, что Вы хотели
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 20.12.2015, 16:52   #10
Оксана33
Форумчанин
 
Аватар для Оксана33
 
Регистрация: 24.11.2014
Сообщений: 156
По умолчанию

всем спасибо за внимание)
Знание надмевает, а любовь назидает
Оксана33 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в макросе Арианна Microsoft Office Excel 15 14.10.2013 15:06
Ошибка в макросе runik Microsoft Office Excel 5 19.11.2012 17:28
ВПР в макросе (где-то ошибка) Флина Microsoft Office Excel 3 26.01.2011 04:55
Ошибка в макросе по переносу данных Richard123 Microsoft Office Excel 2 19.01.2011 09:16
Почему, ошибка в макросе valerij Microsoft Office Excel 8 27.02.2010 01:48