|
|
|
Excel. Как вернуть прежнее значение
|
|||
|---|---|---|---|
|
#18+
День добрый. Столкнулся с проблемой. При редактировании ячейки, в определенном столбце, нужно запрещать редактировать или после редактирования все равно возражать прежнее значение. На листе имеются раскрывающиеся списки. Подскажите как так сделать. Или ссылочку Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 13:22 |
|
||
|
Excel. Как вернуть прежнее значение
|
|||
|---|---|---|---|
|
#18+
Сервис - Защита? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 13:36 |
|
||
|
Excel. Как вернуть прежнее значение
|
|||
|---|---|---|---|
|
#18+
Тогда не будет работать раскрывающиеся списки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 13:38 |
|
||
|
Excel. Как вернуть прежнее значение
|
|||
|---|---|---|---|
|
#18+
С какой же радости? Работают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 13:46 |
|
||
|
Excel. Как вернуть прежнее значение
|
|||
|---|---|---|---|
|
#18+
Сервис- Защита - Защита листа. Так? какие галочки ставить при вводе пароля? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 14:06 |
|
||
|
Excel. Как вернуть прежнее значение
|
|||
|---|---|---|---|
|
#18+
Ну любые, какие вам нужны. Например, выбор защищенных и незащищенных. Это неважно, списки всё равно работают. Причём как защищённые списки, так и нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 14:11 |
|
||
|
Excel. Как вернуть прежнее значение
|
|||
|---|---|---|---|
|
#18+
Не получается Может я не правильно назвал "раскрывающиеся списки.". Я имел введу когда групируются несколько строк. И с слева появляется "+". Вы так меня поняли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 14:47 |
|
||
|
Excel. Как вернуть прежнее значение
|
|||
|---|---|---|---|
|
#18+
Нет, мы поняли в смысле Combo Box. Они так называются. Если у вас группировка, попробуйте тогда в Workhseet_Change проверять условие и делать Application.Undo. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 15:23 |
|
||
|
Excel. Как вернуть прежнее значение
|
|||
|---|---|---|---|
|
#18+
Я специалист чуть в другой области. Написал вот так. 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 Что я не так написал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 15:58 |
|
||
|
Excel. Как вернуть прежнее значение
|
|||
|---|---|---|---|
|
#18+
Если речь просто об отмене ввода, то надо было написать Код: plaintext 1. 2. Если Worksheet_Change была вызвана именно в результате ввода, и если перед этим не успели выполниться другие VBA-команды, меняющие лист, то application.undo откатит ввод. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 16:11 |
|
||
|
Excel. Как вернуть прежнее значение
|
|||
|---|---|---|---|
|
#18+
Странная ситуация. Если пишу как вы сказали, все работает. Но как только добавляю Dim c, не работает(сохраняет изменения) А если после Application.Undo делаю цикл For то и вовсе ошибку выдает. Может подскажите с чем это связано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 16:32 |
|
||
|
Excel. Как вернуть прежнее значение
|
|||
|---|---|---|---|
|
#18+
Объяснение в 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 Успехов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 17:09 |
|
||
|
Excel. Как вернуть прежнее значение
|
|||
|---|---|---|---|
|
#18+
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, и метод вызывается снова. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 17:41 |
|
||
|
Excel. Как вернуть прежнее значение
|
|||
|---|---|---|---|
|
#18+
Можете написать когда нужно ставить переменной True. И как это по коду должно выглядеть. Буду очень благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 17:52 |
|
||
|
Excel. Как вернуть прежнее значение
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 18:04 |
|
||
|
Excel. Как вернуть прежнее значение
|
|||
|---|---|---|---|
|
#18+
Мне в 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 Что здесь не правильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 18:26 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=35349642&tid=2162217]: |
0ms |
get settings: |
11ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
99ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
72ms |
get tp. blocked users: |
2ms |
| others: | 242ms |
| total: | 471ms |

| 0 / 0 |
