Страницы: 1
RSS
Очистить содержимое ячейки при выполнении условия (VBA)
 
Здравствуйте. Нужно, чтобы при выборе определённого значения в ячейке А1, содержимое ячеек B1 и C1 удалялось. Подскажите, пожалуйста, с помощью какого макроса можно ето реализовать. Пробовал так:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
  If Range("A1") = "ERASE" Then
  Range("B1,C1").ClearContents
  Application.EnableEvents = True
  End If
End Sub
Срабатывает один раз. При вводе нужного значения в ячейку A1, контент очищается. После смены значения на другое и повторном выборе нужного ничего не происходит. Подскажите, пожалуйста, где ошибка...
 
То есть вы хотите, чтобы когда в A1 не "ERASE", то вернулись старые значения? Тогда вам надо запоминать эти значения где-нибудь и возвращать когда не "ERASE". Ж)
Изменено: Johny - 17.06.2015 13:35:55
There is no knowledge that is not power
 
Цитата
Oligarch написал:
После смены значения на другое и повторном выборе нужного ничего не происходит
А что должно произойти?
 
Так?
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
  If Range("A1") = "ERASE" Then
  Range("B1,C1").ClearContents
  Application.EnableEvents = True
  End If
  Next 
End Sub

Изменено: Екселист - 17.06.2015 14:32:19
 
Екселист, Вы свой код пробовали в деле? Чем он отличается от кода, показанного в стартовом сообщении? Разве, что только тем, что там есть строка Next? Зачем она?
 
Цитата
Юрий М написал: Зачем она?
Насколько я понял, юзеру нужно, чтобы при смене значения в ячейке A1 с нужного на другое, а потом обратно, содержимое ячеек B1 и C1 удалялось. А оно удаляется, только при ПЕРВИЧНОМ вводе нужного значения. Если так, то у меня мой вариант кода работает.
Изменено: Екселист - 19.06.2015 16:09:55
 
Цитата
Екселист написал: мой вариант кода работает.
Это вряд-ли. Невооруженным глазом видно что Next без For, аесли его убрать, то он идентичен коду ТС  :)
Согласие есть продукт при полном непротивлении сторон
 
Ну значит я ошибся, так как не силён в макросах.
 
Цитата
Екселист написал: мой вариант кода работает.
Чем он отличается от авторского?
 
Юрий М,
Процедурой Next . Но повторяю я ошибся.
 
Цитата
Oligarch написал: После смены значения на другое и повторном выборе нужного ничего не происходит
Потому что Application.EnableEvents = True надо вынести из условия. Ведь Application.EnableEvents = False у Вас срабатывает при любом изменении ячейки, а возвращается-то только если условие выполняется...Т.е. корректнее так:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    If Range("A1") = "ERASE" Then
        Range("B1,C1").ClearContents
    End If
    Application.EnableEvents = True
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Екселист написал: повторяю я ошибся.
Ещё раз: зачем повторять уже имеющийся код?
 
Юрий М,
Та я пытался допилить его. The_Prist,  тоже повторил
Цитата
Юрий М написал: уже имеющийся код
но по-другому чем я, и без ошибок.
 
Цитата
Екселист написал:
Та я пытался допилить его
И как же Вы его допилили? Вы просто его скопировали!
 
Юрий М,
Ну я Next  вставил - думал это решит проблему. Говорю же - ошибся.
 
Да хватит уже выяснять. Автор появится и все расскажет.
Скрытый текст
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Екселист написал:
Насколько я понял, юзеру нужно, чтобы при смене значения в ячейке A1 с нужного на другое, а потом обратно, содержимое ячеек B1 и C1 удалялось. А оно удаляется, только при ПЕРВИЧНОМ вводе нужного значения. Если так, то у меня мой вариант кода работает.
Да. Вы правы. Но вариант кода с Next не работает.  
 
Oligarch,
А отсюда?
 
Цитата
The_Prist написал: Потому что Application.EnableEvents = True надо вынести из условия.
Большое спасибо! То что нужно...
Еще один вопрос. Можно ли сделать так, чтобы значение ячейки D1 до выполнения команды  ClearContents додавалось к значению E1?
 
Додавалось...Прикольно, надо запомнить :)
Код
Range("E1").value = Range("E1").value & Range("D1").value

это если под "додавалось" подразумевается сцепление данных, а не их суммирование. Если суммирование:
Код
Range("E1").value = Range("E1").value + Range("D1").value
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, Имелось ввиду - суммировать)))). Ещё раз спасибо и последний вопрос. В ячейке D1 находится формула, которая состоит из нескольких переменных. Нужно сделать так, чтобы excel предложил ( например, в сплывающем окошке) внести (подкорректировать) значение одной из переменных, а уже потом выполнялась команда суммирования.  
 
Цитата
Oligarch написал: и последний вопрос
Уважайте правила форума. Конкретно - п.2.6. Перечитайте, вникните.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Читают тему
Наверх