Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Изменить значение в ячейке - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Изменить значение в ячейке
Vertep7 Дата: Вторник, 08.08.2023, 13:23 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 52
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Здравствуйте, подскажите как сделать, что бы исходное значение в ячейке автоматически перезаписывалось новым по условию при изменении входящих данных.
Я вот что-то навоял для примера, вроде начинает работать, а потом выскакивает ошибка и подвисает. И еще, в какой модуль книги его нужно вставлять.

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("A1").Value > 100 Then
Range("B10") = 12345
ElseIf Range("A1").Value < 100 Then
Range("B10") = 54321
Else: Range("B10") = 00000
End If
End Sub
[/vba]


Сообщение отредактировал Vertep7 - Вторник, 08.08.2023, 14:10
 
Ответить
СообщениеЗдравствуйте, подскажите как сделать, что бы исходное значение в ячейке автоматически перезаписывалось новым по условию при изменении входящих данных.
Я вот что-то навоял для примера, вроде начинает работать, а потом выскакивает ошибка и подвисает. И еще, в какой модуль книги его нужно вставлять.

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("A1").Value > 100 Then
Range("B10") = 12345
ElseIf Range("A1").Value < 100 Then
Range("B10") = 54321
Else: Range("B10") = 00000
End If
End Sub
[/vba]

Автор - Vertep7
Дата добавления - 08.08.2023 в 13:23
Serge_007 Дата: Вторник, 08.08.2023, 13:31 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Здравствуйте

Код рабочий

Вставлять код необходимо в модуль того листа, на котором будут происходить изменения


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеЗдравствуйте

Код рабочий

Вставлять код необходимо в модуль того листа, на котором будут происходить изменения

Автор - Serge_007
Дата добавления - 08.08.2023 в 13:31
Gustav Дата: Вторник, 08.08.2023, 13:54 | Сообщение № 3
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Код рабочий

У меня в 2013 валился на втором изменении с полным вываливанием из Excel. Нужно обязательно отключать события на время отработки логики:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False 'ОБЯЗАТЕЛЬНО - иначе события зациклятся
    If Range("A1").Value > 100 Then
        Range("B10") = 12345
    ElseIf Range("A1").Value < 100 Then
        Range("B10") = 54321
    Else
        Range("N10") = 0
    End If
    Application.EnableEvents = True 'ОБЯЗАТЕЛЬНО - опять включить события
End Sub
[/vba]


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
Код рабочий

У меня в 2013 валился на втором изменении с полным вываливанием из Excel. Нужно обязательно отключать события на время отработки логики:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False 'ОБЯЗАТЕЛЬНО - иначе события зациклятся
    If Range("A1").Value > 100 Then
        Range("B10") = 12345
    ElseIf Range("A1").Value < 100 Then
        Range("B10") = 54321
    Else
        Range("N10") = 0
    End If
    Application.EnableEvents = True 'ОБЯЗАТЕЛЬНО - опять включить события
End Sub
[/vba]

Автор - Gustav
Дата добавления - 08.08.2023 в 13:54
Vertep7 Дата: Вторник, 08.08.2023, 14:19 | Сообщение № 4
Группа: Пользователи
Ранг: Участник
Сообщений: 52
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Код рабочий

К сожалению не работает. Записывается 54321, после чего что бы я не вводил в исходную ячейку, значение 12345 в конечной ячейке не появляется. Более того, если я хочу удалить 54321 из B10, то оно не удаляется.
Кстати в Range("N10") = 0, там на самом деле Range("B10") = 0 должно быть. Подправил в коде.


Сообщение отредактировал Vertep7 - Вторник, 08.08.2023, 14:32
 
Ответить
Сообщение
Код рабочий

К сожалению не работает. Записывается 54321, после чего что бы я не вводил в исходную ячейку, значение 12345 в конечной ячейке не появляется. Более того, если я хочу удалить 54321 из B10, то оно не удаляется.
Кстати в Range("N10") = 0, там на самом деле Range("B10") = 0 должно быть. Подправил в коде.

Автор - Vertep7
Дата добавления - 08.08.2023 в 14:19
i691198 Дата: Вторник, 08.08.2023, 14:35 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 337
Репутация: 108 ±
Замечаний: 0% ±

в какой модуль книги его нужно вставлять.

Здравствуйте. Вставлять это нужно в модуль той книги, где вы меняете значения. Пример вы не приложили, поэтому можно только догадываться, почему у вас появляется ошибка. Сам код вполне рабочий и не должен создавать ошибку, вот только в таком виде код будет срабатывать при изменении значений в любой ячейки этого листа.
Я вам просто прокомментирую, что делает ваш код
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
' произошло изменение значений в каком то диапазоне этого листа, запускается этот макрос, которому в качестве параметра передается объект типа Range,
' с именем Target, соответствующий измененому диапазону.
' В большинстве случаев требуется проверка того, что изменилось и как на это должен реагировать макрос. Здесь могут быть разные варианты, например
' если изменение произошло не в том диапазоне листа, который нужно контролировать, или количество измененных ячеек больше одной (удалили строку или столбец),
' то выход из процедуры (Exit Sub)
If Range("A1").Value > 100 Then
' в этом блоке If у вас происходит изменение значений ячеек B10 и N10 на активном листе при любом изменении значений на этом листе, а не только в A1.
Range("B10") = 12345
ElseIf Range("A1").Value < 100 Then
Range("B10") = 54321
Else: Range("N10") = 00000
End If
End Sub
[/vba]


Сообщение отредактировал i691198 - Вторник, 08.08.2023, 14:35
 
Ответить
Сообщение
в какой модуль книги его нужно вставлять.

Здравствуйте. Вставлять это нужно в модуль той книги, где вы меняете значения. Пример вы не приложили, поэтому можно только догадываться, почему у вас появляется ошибка. Сам код вполне рабочий и не должен создавать ошибку, вот только в таком виде код будет срабатывать при изменении значений в любой ячейки этого листа.
Я вам просто прокомментирую, что делает ваш код
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
' произошло изменение значений в каком то диапазоне этого листа, запускается этот макрос, которому в качестве параметра передается объект типа Range,
' с именем Target, соответствующий измененому диапазону.
' В большинстве случаев требуется проверка того, что изменилось и как на это должен реагировать макрос. Здесь могут быть разные варианты, например
' если изменение произошло не в том диапазоне листа, который нужно контролировать, или количество измененных ячеек больше одной (удалили строку или столбец),
' то выход из процедуры (Exit Sub)
If Range("A1").Value > 100 Then
' в этом блоке If у вас происходит изменение значений ячеек B10 и N10 на активном листе при любом изменении значений на этом листе, а не только в A1.
Range("B10") = 12345
ElseIf Range("A1").Value < 100 Then
Range("B10") = 54321
Else: Range("N10") = 00000
End If
End Sub
[/vba]

Автор - i691198
Дата добавления - 08.08.2023 в 14:35
Vertep7 Дата: Вторник, 08.08.2023, 14:35 | Сообщение № 6
Группа: Пользователи
Ранг: Участник
Сообщений: 52
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Нет, прошу прощения, все заработало. Когда делал пример не увидел что у меня A1 и B10, а должны были быть A1 и B1. Сейчас все исправил, все заработало. Спасибо)


Сообщение отредактировал Vertep7 - Вторник, 08.08.2023, 14:49
 
Ответить
СообщениеНет, прошу прощения, все заработало. Когда делал пример не увидел что у меня A1 и B10, а должны были быть A1 и B1. Сейчас все исправил, все заработало. Спасибо)

Автор - Vertep7
Дата добавления - 08.08.2023 в 14:35
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!