powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excel. Как вернуть прежнее значение
17 сообщений из 17, страница 1 из 1
Excel. Как вернуть прежнее значение
    #35348855
TQuestions
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый.
Столкнулся с проблемой. При редактировании ячейки, в определенном столбце, нужно запрещать редактировать или после редактирования все равно возражать прежнее значение.
На листе имеются раскрывающиеся списки.

Подскажите как так сделать. Или ссылочку

Заранее спасибо.
...
Рейтинг: 0 / 0
Excel. Как вернуть прежнее значение
    #35348904
Дык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сервис - Защита?
...
Рейтинг: 0 / 0
Excel. Как вернуть прежнее значение
    #35348909
TQuestions
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тогда не будет работать раскрывающиеся списки
...
Рейтинг: 0 / 0
Excel. Как вернуть прежнее значение
    #35348935
Дык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С какой же радости?
Работают.
...
Рейтинг: 0 / 0
Excel. Как вернуть прежнее значение
    #35349009
TQuestions
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сервис- Защита - Защита листа. Так? какие галочки ставить при вводе пароля?
...
Рейтинг: 0 / 0
Excel. Как вернуть прежнее значение
    #35349022
Дык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну любые, какие вам нужны.
Например, выбор защищенных и незащищенных.
Это неважно, списки всё равно работают. Причём как защищённые списки, так и нет.
...
Рейтинг: 0 / 0
Excel. Как вернуть прежнее значение
    #35349121
TQuestions
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не получается
Может я не правильно назвал "раскрывающиеся списки.". Я имел введу когда групируются несколько строк. И с слева появляется "+".
Вы так меня поняли?
...
Рейтинг: 0 / 0
Excel. Как вернуть прежнее значение
    #35349217
Дык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет, мы поняли в смысле Combo Box. Они так называются.

Если у вас группировка, попробуйте тогда в Workhseet_Change проверять условие и делать Application.Undo.
...
Рейтинг: 0 / 0
Excel. Как вернуть прежнее значение
    #35349368
TQuestions
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я специалист чуть в другой области.
Написал вот так.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c
If (Target.Column = 6) Or (Target.Column = 9) Or (Target.Column = 12) Or (Target.Column = 15) Then Exit Sub
If (Target.Column = 4) Then
Application.Undo
End If
For Each c In Target.Cells
If (VarType(c.Value) <> vbNull) And (VarType(c.Value) <> vbEmpty) Then
If (CStr(c.Value) <> "x") Then 'Exit Sub
c.Value = " "
End If
End If
Next
End Sub
И при редактировании ошибка :Method ‘Undo’ of object ‘Application’ failed
Что я не так написал?
...
Рейтинг: 0 / 0
Excel. Как вернуть прежнее значение
    #35349433
Дык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если речь просто об отмене ввода, то надо было написать
Код: plaintext
1.
2.
Private Sub Worksheet_Change(ByVal Target As Range)
  if target.column =  4  then application.undo
end sub

Если Worksheet_Change была вызвана именно в результате ввода, и если перед этим не успели выполниться другие VBA-команды, меняющие лист, то application.undo откатит ввод.
...
Рейтинг: 0 / 0
Excel. Как вернуть прежнее значение
    #35349504
TQuestions
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Странная ситуация. Если пишу как вы сказали, все работает. Но как только добавляю Dim c, не работает(сохраняет изменения)

А если после Application.Undo
делаю цикл For то и вовсе ошибку выдает.

Может подскажите с чем это связано.
...
Рейтинг: 0 / 0
Excel. Как вернуть прежнее значение
    #35349642
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объяснение в Help:

This method undoes only the last action taken by the user before running the macro, and it must be the first line in the macro

Успехов
...
Рейтинг: 0 / 0
Excel. Как вернуть прежнее значение
    #35349734
Дык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VladConnОбъяснение в Help:

This method undoes only the last action taken by the user before running the macro, and it must be the first line in the macro

В хэлпе, во избежание длительных и путаных объяснений, просто несколько перестраховались.
Это должна быть первая из строчек, что изменяют состояние, скажем так. Но не обязательно первая строчка тела кода. У меня Undo зарыто в несколько If, и всё прекрасно работает, потому что If не меняют никакой аспект книги.


Вообще, Undo надо, когда вы не знаете, что было в столбце.
Если вы знаете, что должно быть в столбце, вам просто надо это туда записать в Worksheet_Change, не делая Undo.

При этом, разумеется, нужно завести static SelfProtect as boolean, чтобы защитить метод от срабатывания на самом себе. У вас сейчас именно это происходит. Ваше c.Value = " " вызывает событие Change, и метод вызывается снова.
...
Рейтинг: 0 / 0
Excel. Как вернуть прежнее значение
    #35349761
TQuestions
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можете написать когда нужно ставить переменной True. И как это по коду должно выглядеть.
Буду очень благодарен.
...
Рейтинг: 0 / 0
Excel. Как вернуть прежнее значение
    #35349797
Дык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Private Sub Worksheet_Change(ByVal Target As Range)
static seflprotect as boolean
dim c as range

if selfprotect then exit sub

if target.column = 4 then
selfprotect = true

for each c in target.cells
c.value = "x"
next

selfprotect = false
end if
end sub
...
Рейтинг: 0 / 0
Excel. Как вернуть прежнее значение
    #35349855
TQuestions
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне в 4 колонке нужно выходить, а не цикл.
Я написал так, но все равно не работает.
Private Sub Worksheet_Change(ByVal Target As Range)
Static selfprotect As Boolean
Dim c As Range
If selfprotect Then Exit Sub


If Target.Column = 4 Then
selfprotect = True
Application.Undo
End If

If (Target.Column = 6) Or (Target.Column = 9) Or (Target.Column = 12) Or (Target.Column = 15) Then Exit Sub
For Each c In Target.Cells
If (VarType(c.Value) <> vbNull) And (VarType(c.Value) <> vbEmpty) Then
If (CStr(c.Value) <> "x") Then 'Exit Sub
c.Value = " "
End If
End If
Next
selfprotect = False

End Sub

Что здесь не правильно?
...
Рейтинг: 0 / 0
Excel. Как вернуть прежнее значение
    #35349921
Дык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДыкВообще, Undo надо, когда вы не знаете, что было в столбце.
Если вы знаете, что должно быть в столбце, вам просто надо это туда записать в Worksheet_Change, не делая Undo.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excel. Как вернуть прежнее значение
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]