Страницы: 1 2 След.
RSS
Почему на листе, защищенном в режиме UserInterfaceOnly, Excel выдает ошибку при попытке макросом поменять значение ячейки?
 
Добрый день.
При использовании двух макросов выдает Debugger, а именно:
Код
Sub Protect_for_User_Non_for_VBA()
    ActiveSheet.Protect Password:="Jerry", UserInterfaceOnly:=True
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
     For Each cell In Target
       If Not Intersect(cell, Range("C:D, F:G, I:J, L:M, O:P, R:S, U:V, X:Y, AA:AB, AD:AE, AG:AH, AJ:AK, AM:AN, AP:AQ, AS:AT, AV:AW, AY:AZ, BB:BC, BE:BF, BH:BI, BK:BL, BN:BO, BQ:BR, BT:BU, BW:BX, BZ:CA, CC:CD, CF:CG")) Is Nothing Then
        If IsEmpty(Target) Then
            Range("B" & cell.Row) = Empty
            Else
                With Range("B" & cell.Row)
                .Value = Date
                End With
            End If
        End If
    Next cell
End Sub


Как это можно исправить?
Спасибо.
Изменено: Sitizen - 05.01.2020 15:36:42
 
после каких действий? что за ошибка? в какой строке макроса?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Именно поэтому я и обратился.
Выделяет строку  .Value = Date при заполнении строки из диапазона, т.е. когда макрос установки автодаты должен сработать, защита не позволяет ему это сделать. Макрос, который по идее должен был дать доступ для действий, не срабатывает. Как-то так.
Изменено: Sitizen - 03.01.2020 14:02:03
 
выложите файл
помотрим что в нем не так. макрос ры работают
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
У меня работает нормально.
Ищите в tools-references  библиотеки  с missing
 
Вот образец листа.
 
то что у вас на листе лежит макрос
Код
Sub Protect_for_User_Non_for_VBA()
   ActiveSheet.Protect Password:="Jerry", UserInterfaceOnly:=True
End Sub
не значит что он сработал хоть 1 раз
т.е. если у вас где-то на полке в шкафу лежат презервативы, это само по себе не гарантирует безопасного секса, если ими не пользоваться

ну, и чтобы 2 раза не вставать, переписал
Код
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim cell As Range, rg As Range
  Set rg = Intersect(cell, Range("C:D, F:G, I:J, L:M, O:P, R:S, U:V, X:Y, AA:AB, AD:AE, AG:AH, AJ:AK, AM:AN, AP:AQ, AS:AT, AV:AW, AY:AZ, BB:BC, BE:BF, BH:BI, BK:BL, BN:BO, BQ:BR, BT:BU, BW:BX, BZ:CA, CC:CD, CF:CG"))
  If rg Is Nothing Then Exit Sub
  For Each cell In rg
    If IsEmpty(cell) Then Range("B" & cell.Row) = Empty Else Range("B" & cell.Row) = Date
  Next cell
End Sub
Изменено: Ігор Гончаренко - 03.01.2020 14:44:20
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
У Вас же столбец В защищен от изменений
Перед изменением ячейки надо снимать защиту, потом ставить.
Скрытый текст
Изменено: doober - 03.01.2020 14:47:26
 
Сергей,
или при открытии файла разок выполнить защиту в режиме только от пользователя
тем более, что макрос многозначительно написан, но просто валялся в модуле
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
При защите ячеек столбца В (пишу все, что есть) выдает следующее:

Run time error '5':
Invalid procedure call or argument.

При этом в макросе выделяет строку
Set rg = Intersect(cell, Range("C:D, F:G, I:J, L:M, O:P, R:S, U:V, X:Y, AA:AB, AD:AE, AG:AH, AJ:AK, AM:AN, AP:AQ, AS:AT, AV:AW, AY:AZ, BB:BC, BE:BF, BH:BI, BK:BL, BN:BO, BQ:BR, BT:BU, BW:BX, BZ:CA, CC:CD, CF:CG"))
 
извините, опечатка
 Set rg = Intersect(Target, Range("C:D, F:G, I:J, L:M, O:P, R:S, U:V, X:Y, AA:AB, AD:AE, AG:AH, AJ:AK, AM:AN, AP:AQ, AS:AT, AV:AW, AY:AZ, BB:BC, BE:BF, BH:BI, BK:BL, BN:BO, BQ:BR, BT:BU, BW:BX, BZ:CA, CC:CD, CF:CG"))
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Спасибо. ОпробОвал. Выдало:
Цитата
Run time error '1004'
Aplication-defined or object-defined error

Выделено:
Код
Range("B" & cell.Row) = Empty Else

И/или:
Код
Range("B" & cell.Row) = Date
 
сохраните, закройте, откройте файл и можете работать
или
выполните макрос в модуле Этакнига и можете работать
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ага, это не полистовой вариант, а на всю книгу? Тогда возникает еще один вопрос (извиняюсь на наглость). У меня часть листов иного формата, с другими задачами. Я могу их вынести за рамки действия макроса? Спасибо.
 
Снова выдает ошибку 1004 и выделяет
Код
Range("B" & cell.Row) = Date

Спасибо.
Изменено: Sitizen - 04.01.2020 21:12:45
 
а они уже вынесены
макрос в модуле ЭтаКнига защищает ТОЛЬКО 1-й лист
макрос в модуле листа работает ТОЛЬКО с листом, в котором написан
т.е. не понимаю что вы хотите  
Изменено: Ігор Гончаренко - 03.01.2020 15:19:03
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
выложите файл, в котором снова выдает ошибку
посмотрим почему
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Тот лист, который я высылал Вам. Та же ошибка 1004
Выделен диапазон:
Код
Range("B" & cell.Row) = Empty Else

Спасибо
Изменено: Sitizen - 04.01.2020 21:13:57
 
а файлик все-таки выложите, посмотрим
или
решайте самостоятельно
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Не понимаю, что не так.
Видео здесь
 
Извиняюсь за паузу.
Новый код работает нормально при условии, что столбец В - незащищенные ячейки. Как только их защищаешь - выдается ошибка. Далее, он не решает вопрос с автоудалением даты при удалении инфы с одной из ячеек диапазона.
Но в любом случае спасибо большое за потраченое время и помощь.
 
новому коду ПО-БАРАБАНУ какие колонки защищены, а какие нет
при правильном применении будет работать с любым листом
и удаление (очистка данных в колонке В) там тоже решено
Изменено: Ігор Гончаренко - 03.01.2020 20:41:19
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Я извиняюсь за пропадания. Это первое.
Второе, я еще посмотрю, что я еще мог нарукоблудить с тем, что вы для меня сделали, и почему он не работает корректно.

Следующее. В отношении всего файла.
Файл представляет собой документ из ряда страниц, образец которой я вам выложил. Он предназначен для узкого круга пользователей, заполнен определенной информацией. Выкладывать его не в моей компетенции, и я твердо знаю, что данное предложение не будет воспринято. Это не мания и не шпионские игры, просто информация конфиденциальна и все. Надеюсь на понимание.

Завтра отпишусь. Спасибо.
 
лично мне не нужен ни ваш файл, ни информация, которая в нем находится
вы можете самостоятельно разбираться с тем, что уже выложено столько времени, сколько посчитаете нужным
точно так же, как вольны забить на все это (как минимум на то, что выложил я) и решить свою задачу самостоятельно
удачи!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Непонятки начинаются еще с названия темы. Ладно бы, вопрос был в общем, о двух ЛЮБЫХ макосах. Но у Вас, похоже, что-то где-то как-то не работает В ВАШЕЙ КОНКРЕТНОЙ  ЗАДАЧЕ. Вот эта задача никак не просматривается в названии темы. Предложите. Модераторы заменят.

Более 20 сообщений, а Вы никак не можете объяснить задачу! Из двух одно (догадайтесь сами) - или помогающие недалекие, или из Вас тот еще объясняльщик...
Цитата
Sitizen написал: информация конфиденциальна и все
Да кому она здесь нужна? Составить ПРИМЕР с огурцами и агрономами - и все... Никак?
 
Игорь, во-первых, спасибо большое, Вы уже помогли, Ваш макрос более лаконичен и работает с защищенными ячейками. Второе, не исключаю, что я формулирую задачи некорректно. Господа, как вы догадались, это не мое поле деятельности. Приношу свои извинения.
Загрузить ролик мне не удалось (ограничения по размерам). Опишу мои действия и работу макроса.
1. В ячейку С6 вносятся данные.
2. Макрос вносит дату в закрытую ячейку В6.
3. В ячейку D6 вносятся данные ошибочно.
4. В ячейке D6  данные убираются.
5. Макрос убирает дату в ячейке В6, хотя есть запись в данной строке (ячейка С6).
Хотелось бы, чтобы дата оставалась при условии заполнения хотябы одной соответствующей ячейки, т.е. даже если мы очищаем ячейку D6, но остается инфа в любой другой ячейке данной строки 6 (понятно, из диапазона) дата в ячейке В6 остается.
Еще раз извиняюсь, но корректнее сформулировать у меня не получается.
Спасибо.
 
Следущее. Касательно сообщения Модератора. Вопрос стоял, почему два макроса не работают одновременно или не работают корректно. Пользователь Ігор Гончаренко дал на него исчерпывающий ответ. Я не могу понять, что Вас возмущает в названии, хотя для меня это (название) абсолютно не принципиально. Далее. Я никого ни в чем не обвиняю и более чем уверен, что если кому-то что-то понадобится, то этот кто-то найдет способ это получить без излишних анонсов. Я объяснил свои действия/недействия. И не более. Если кто-то усмотрел в этом персональный выпад - нет, этого не было.
 
Цитата
Sitizen написал:
Я не могу понять, что Вас возмущает в названии, хотя для меня это (название) абсолютно не принципиально
В том и дело, что для Вас понятно. А представьте, что на форум заглянет человек, у которого аналогичная проблема - по какому названию ему легче будет найти нужную тему?
 
Юрий М., возможно. Вам виднее, это Ваше королевство, и желание упорядочитть все абсолютно объяснимо. Как я сказал выше, для меня название абсолютно не принципиально. Тем более, что похожее обсуждение у вас на сайте уже есть.  
 
Цитата
Sitizen написал:
для меня название абсолютно не принципиально
Из этого можно сделать вывод, что Вы ничего не поняли: форум не для Вас одного. И тема эта уже не Ваша, а форума.
Никто больше не будет пытаться Вас переубедить, но будьте готовы к тому, что Ваша тема с невнятно сформулированным названием будет удалена без какого-либо предупреждения.
Страницы: 1 2 След.
Наверх