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

Вход

Регистрация

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

 

= Мир MS Excel/Запрет редактирования столбца и сносок/примечаний. - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Запрет редактирования столбца и сносок/примечаний. (Макросы/Sub)
Запрет редактирования столбца и сносок/примечаний.
koyaanisqatsi Дата: Четверг, 21.04.2016, 19:38 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте.

Есть желание запретить макросом редактирование примечаний на страницах "Овощи, мясо, Бакалея". Что-бы только макрос сам и мог вносить туда изменения. Также хочется поступить со столбцом "J"

Логин/пароль: Пользователь 444

Код который пишет историю примечаний.
[vba]
Код
Private s$
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim oComment As Comment, un$
    On Error Resume Next
    Set oComment = Target.Comment
    un = WorksheetFunction.VLookup(GetUserName_3(2), Ëèñò4.[A2:B999], 2, False)
    If oComment Is Nothing Then
        Set oComment = Target.AddComment(un & " " & Format(Now, "dd.mm.yy HH:MM") & ":" & Chr(10) & s & "-->>" & Target.Text)
        oComment.Shape.TextFrame.AutoSize = True
    Else
        oComment.Text oComment.Text & Chr(10) & un & " " & Format(Now, "dd.mm.yy HH:MM") & ":" & Chr(10) & s & "-->>" & Target.Text
        oComment.Shape.TextFrame.AutoSize = True
    End If
        
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
s = Target.Cells(1, 1)
End Sub
[/vba]

код который должен сохранять дату последнего изменения в стобце "L" в столбец "J"

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Intersect(Columns("l"), Target(1)).Offset(, 1) = Now
End Sub
[/vba]
К сообщению приложен файл: 8843075.xlsb (82.7 Kb)
 
Ответить
СообщениеЗдравствуйте.

Есть желание запретить макросом редактирование примечаний на страницах "Овощи, мясо, Бакалея". Что-бы только макрос сам и мог вносить туда изменения. Также хочется поступить со столбцом "J"

Логин/пароль: Пользователь 444

Код который пишет историю примечаний.
[vba]
Код
Private s$
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim oComment As Comment, un$
    On Error Resume Next
    Set oComment = Target.Comment
    un = WorksheetFunction.VLookup(GetUserName_3(2), Ëèñò4.[A2:B999], 2, False)
    If oComment Is Nothing Then
        Set oComment = Target.AddComment(un & " " & Format(Now, "dd.mm.yy HH:MM") & ":" & Chr(10) & s & "-->>" & Target.Text)
        oComment.Shape.TextFrame.AutoSize = True
    Else
        oComment.Text oComment.Text & Chr(10) & un & " " & Format(Now, "dd.mm.yy HH:MM") & ":" & Chr(10) & s & "-->>" & Target.Text
        oComment.Shape.TextFrame.AutoSize = True
    End If
        
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
s = Target.Cells(1, 1)
End Sub
[/vba]

код который должен сохранять дату последнего изменения в стобце "L" в столбец "J"

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Intersect(Columns("l"), Target(1)).Offset(, 1) = Now
End Sub
[/vba]

Автор - koyaanisqatsi
Дата добавления - 21.04.2016 в 19:38
buchlotnik Дата: Четверг, 21.04.2016, 20:48 | Сообщение № 2
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация: 929 ±
Замечаний: 20% ±

2010, 2013, 2016 RUS / ENG
koyaanisqatsi, поставьте защиту листов макросом (в этом случае редактирование с помощью макроса возможно, а ручками нет): [vba]
Код
Sub protection()
    For i = 1 To ThisWorkbook.Sheets.Count
        Sheets(i).Protect Password:=444, UserInterFaceOnly:=True
    Next
End Sub
[/vba]


Сообщение отредактировал buchlotnik - Четверг, 21.04.2016, 20:50
 
Ответить
Сообщениеkoyaanisqatsi, поставьте защиту листов макросом (в этом случае редактирование с помощью макроса возможно, а ручками нет): [vba]
Код
Sub protection()
    For i = 1 To ThisWorkbook.Sheets.Count
        Sheets(i).Protect Password:=444, UserInterFaceOnly:=True
    Next
End Sub
[/vba]

Автор - buchlotnik
Дата добавления - 21.04.2016 в 20:48
koyaanisqatsi Дата: Четверг, 21.04.2016, 21:40 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
buchlotnik, Рукаими пользователь все может редактировать кроме сносок и столбцп "J"
А отключить копипаст можно в довесок?


Сообщение отредактировал koyaanisqatsi - Четверг, 21.04.2016, 22:00
 
Ответить
Сообщениеbuchlotnik, Рукаими пользователь все может редактировать кроме сносок и столбцп "J"
А отключить копипаст можно в довесок?

Автор - koyaanisqatsi
Дата добавления - 21.04.2016 в 21:40
koyaanisqatsi Дата: Четверг, 21.04.2016, 22:31 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
Нашел один код который должен хорошо все закрывать.

В примере все также логин/пароль Пользователь 444

Вот как предлагают запретить копирование на соседнем форуме.

У меня на листе "Овощи" Все ломается на первой же строке кода
[vba]
Код
Option Explicit
[/vba]
Если ее сделать не активной то меню экселя активное, а в примере было не активное. Но хотябы непосредственно с клавиатуры копипаст не работает это только от части решает проблему.

[vba]
Код

'Option Explicit

Private Sub Worksheet_Activate()
    Application.OnKey "^v", "": Application.OnKey "^V", ""
    Application.OnKey "^x", "": Application.OnKey "^X", ""
End Sub

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    Dim ivIDArray, li As Long, i As Integer: ivIDArray = Array("В&ырезать", "Вст&авить значения", "Вст&авить", "Специальная вс&тавка...", "Вс&тавить...", "&Удалить...")
    With Application.CommandBars("Cell")
        For li = 1 To .Controls.Count
            For i = LBound(ivIDArray) To UBound(ivIDArray)
                If .Controls(li).Caption = ivIDArray(i) Then .Controls(li).Visible = False:
            Next i
        Next li
    End With
End Sub

Private Sub Worksheet_Deactivate()
    Application.OnKey "^v": Application.OnKey "^V"
    Application.OnKey "^x": Application.OnKey "^X"
    Dim li As Long
    With Application.CommandBars("Cell")
        For li = 1 To .Controls.Count: .Controls(li).Visible = True: Next li
    End With
End Sub

[/vba]

Так же пробовал добавлять код ЭТА КНИГА . Но тоже что-то пошло не так ((((
[vba]
Код
Option Explicit

Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    
      Application.OnKey "^v": Application.OnKey "^V"
    Application.OnKey "^x": Application.OnKey "^X"
    Dim li As Long
    With Application.CommandBars("Cell")
        For li = 1 To .Controls.Count: .Controls(li).Visible = True: Next li
    End With
    
    scr
End Sub

Private Sub Workbook_Open()

If ActiveSheet.Name = "Лист5" Then
        Application.OnKey "^v", "": Application.OnKey "^V", ""
        Application.OnKey "^x", "": Application.OnKey "^X", ""
    End If

    scr
End Sub

[/vba]
[moder]Зачем удалять замечания модератора? :dont:
Исправьте "крокозябры" в своих кодах.
Для этого копирование и вставку делайте в русской раскладке.[/moder]
К сообщению приложен файл: _14.xlsb (81.1 Kb)


Сообщение отредактировал koyaanisqatsi - Четверг, 21.04.2016, 23:46
 
Ответить
СообщениеНашел один код который должен хорошо все закрывать.

В примере все также логин/пароль Пользователь 444

Вот как предлагают запретить копирование на соседнем форуме.

У меня на листе "Овощи" Все ломается на первой же строке кода
[vba]
Код
Option Explicit
[/vba]
Если ее сделать не активной то меню экселя активное, а в примере было не активное. Но хотябы непосредственно с клавиатуры копипаст не работает это только от части решает проблему.

[vba]
Код

'Option Explicit

Private Sub Worksheet_Activate()
    Application.OnKey "^v", "": Application.OnKey "^V", ""
    Application.OnKey "^x", "": Application.OnKey "^X", ""
End Sub

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    Dim ivIDArray, li As Long, i As Integer: ivIDArray = Array("В&ырезать", "Вст&авить значения", "Вст&авить", "Специальная вс&тавка...", "Вс&тавить...", "&Удалить...")
    With Application.CommandBars("Cell")
        For li = 1 To .Controls.Count
            For i = LBound(ivIDArray) To UBound(ivIDArray)
                If .Controls(li).Caption = ivIDArray(i) Then .Controls(li).Visible = False:
            Next i
        Next li
    End With
End Sub

Private Sub Worksheet_Deactivate()
    Application.OnKey "^v": Application.OnKey "^V"
    Application.OnKey "^x": Application.OnKey "^X"
    Dim li As Long
    With Application.CommandBars("Cell")
        For li = 1 To .Controls.Count: .Controls(li).Visible = True: Next li
    End With
End Sub

[/vba]

Так же пробовал добавлять код ЭТА КНИГА . Но тоже что-то пошло не так ((((
[vba]
Код
Option Explicit

Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    
      Application.OnKey "^v": Application.OnKey "^V"
    Application.OnKey "^x": Application.OnKey "^X"
    Dim li As Long
    With Application.CommandBars("Cell")
        For li = 1 To .Controls.Count: .Controls(li).Visible = True: Next li
    End With
    
    scr
End Sub

Private Sub Workbook_Open()

If ActiveSheet.Name = "Лист5" Then
        Application.OnKey "^v", "": Application.OnKey "^V", ""
        Application.OnKey "^x", "": Application.OnKey "^X", ""
    End If

    scr
End Sub

[/vba]
[moder]Зачем удалять замечания модератора? :dont:
Исправьте "крокозябры" в своих кодах.
Для этого копирование и вставку делайте в русской раскладке.[/moder]

Автор - koyaanisqatsi
Дата добавления - 21.04.2016 в 22:31
SLAVICK Дата: Четверг, 21.04.2016, 23:01 | Сообщение № 5
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
код который должен хорошо все закрывать.

Ключевое слово "должен" :D :

Все ломается на первой же строке кода

значит есть не объявленные переменные.
koyaanisqatsi, на сколько я понял - это продолжение Вашей прошлой темы - вернитесь в нее и почитайте еще раз мой пост.
Ведение истории ячейки таким образом - далеко не лучший способ, и это только первые грабли... Вам еще предстоит много с этим способом. :D
К сообщению приложен файл: 0606330.jpg (44.6 Kb)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
код который должен хорошо все закрывать.

Ключевое слово "должен" :D :

Все ломается на первой же строке кода

значит есть не объявленные переменные.
koyaanisqatsi, на сколько я понял - это продолжение Вашей прошлой темы - вернитесь в нее и почитайте еще раз мой пост.
Ведение истории ячейки таким образом - далеко не лучший способ, и это только первые грабли... Вам еще предстоит много с этим способом. :D

Автор - SLAVICK
Дата добавления - 21.04.2016 в 23:01
koyaanisqatsi Дата: Четверг, 21.04.2016, 23:14 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
SLAVICK, Да. это попытка доведения до ума. Возникла проблема с тем что при копи пасте он не только данные копирует но и стиль ячейки. То-есть по факту происходит два раза копирование. Это видно по логу. Если бы производилась только текстовая вставка то предложенный вариант с примечанием работал бы корректно. А так при втором копировании история скидывается.
Плюс еще в обычном варианте примечание можно редактировать. Что в принципе убивает весь смысл этого действия.

Я честно говоря и в первый раз читал что Вы писали. Только выбрал я более подходящее для доступа к информации как мне показалось. Однако там есть варианты которые надо допиливать.

А что Вы конкретно имеете в виду когда предлагаете прочитать снова ту тему. ? Было бы удобней если бы сразу на пост нужный ссылались а то я тему то прочитал но что Вы имеете ввиду не понимаю.
 
Ответить
СообщениеSLAVICK, Да. это попытка доведения до ума. Возникла проблема с тем что при копи пасте он не только данные копирует но и стиль ячейки. То-есть по факту происходит два раза копирование. Это видно по логу. Если бы производилась только текстовая вставка то предложенный вариант с примечанием работал бы корректно. А так при втором копировании история скидывается.
Плюс еще в обычном варианте примечание можно редактировать. Что в принципе убивает весь смысл этого действия.

Я честно говоря и в первый раз читал что Вы писали. Только выбрал я более подходящее для доступа к информации как мне показалось. Однако там есть варианты которые надо допиливать.

А что Вы конкретно имеете в виду когда предлагаете прочитать снова ту тему. ? Было бы удобней если бы сразу на пост нужный ссылались а то я тему то прочитал но что Вы имеете ввиду не понимаю.

Автор - koyaanisqatsi
Дата добавления - 21.04.2016 в 23:14
koyaanisqatsi Дата: Четверг, 21.04.2016, 23:21 | Сообщение № 7
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
SLAVICK, За Крокозябры извиняюсь.

Насчет удаления вашей отметки. Тут уж вряд ли можно проверить но я думаю что знаю как это произошло. Я Дважды редактировал 1. добавлял сначала второй код. 2. добавлял прикреплял файл скорее всего вы в тоже время делали отметку. Скорее всего сохранился мой вариант корректировки.

Кроказябры постараюсь исправить. Пока не получается. Серверная винда 2008 почему-то так копирует код ((( Пробовал и в Ворд вставлять и в блокнот никуда не получается. Похоже разные кодировки.

Поставлю на другую машину Офис


Сообщение отредактировал koyaanisqatsi - Четверг, 21.04.2016, 23:28
 
Ответить
СообщениеSLAVICK, За Крокозябры извиняюсь.

Насчет удаления вашей отметки. Тут уж вряд ли можно проверить но я думаю что знаю как это произошло. Я Дважды редактировал 1. добавлял сначала второй код. 2. добавлял прикреплял файл скорее всего вы в тоже время делали отметку. Скорее всего сохранился мой вариант корректировки.

Кроказябры постараюсь исправить. Пока не получается. Серверная винда 2008 почему-то так копирует код ((( Пробовал и в Ворд вставлять и в блокнот никуда не получается. Похоже разные кодировки.

Поставлю на другую машину Офис

Автор - koyaanisqatsi
Дата добавления - 21.04.2016 в 23:21
SLAVICK Дата: Четверг, 21.04.2016, 23:31 | Сообщение № 8
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
что Вы конкретно имеете в виду когда предлагаете прочитать снова ту тему. ? Было бы удобней если бы сразу на пост нужный ссылались а то я тему то прочитал но что Вы имеете ввиду не понимаю

Что ж тут непонятного:
Записывать изменения в отдельный ТХТ(СSV) файл - самый оптимальный способ. Такие Лог файлы ведутся многими системами

Если записывать в лог файл то:
сохраняется возможность отмены действия
Вы видите все измения в не зависимости от действия(копирование, вставка, просто изменение)
Лог файл лежит отдельно и даже при замене основного файла - лог остается. т.е. Вы можете его "спрятать" и писать туда историю :D .
Кроме того можно потом его импортировать отдельным макросом хоть на лист хоть в примечания...


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
что Вы конкретно имеете в виду когда предлагаете прочитать снова ту тему. ? Было бы удобней если бы сразу на пост нужный ссылались а то я тему то прочитал но что Вы имеете ввиду не понимаю

Что ж тут непонятного:
Записывать изменения в отдельный ТХТ(СSV) файл - самый оптимальный способ. Такие Лог файлы ведутся многими системами

Если записывать в лог файл то:
сохраняется возможность отмены действия
Вы видите все измения в не зависимости от действия(копирование, вставка, просто изменение)
Лог файл лежит отдельно и даже при замене основного файла - лог остается. т.е. Вы можете его "спрятать" и писать туда историю :D .
Кроме того можно потом его импортировать отдельным макросом хоть на лист хоть в примечания...

Автор - SLAVICK
Дата добавления - 21.04.2016 в 23:31
koyaanisqatsi Дата: Четверг, 21.04.2016, 23:42 | Сообщение № 9
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
SLAVICK, Честно говоря в идеале бы этот метод допилить до рабочего. С текстом мне кажется сложно искать информацию она же будет складываться по очереди со всех ячеек и потом за одной ячейкой не уследить будет. К тому же юзеры не будут иметь доступа тогда к логу. А я хочу чтобы все видели и учились на ошибках.
 
Ответить
СообщениеSLAVICK, Честно говоря в идеале бы этот метод допилить до рабочего. С текстом мне кажется сложно искать информацию она же будет складываться по очереди со всех ячеек и потом за одной ячейкой не уследить будет. К тому же юзеры не будут иметь доступа тогда к логу. А я хочу чтобы все видели и учились на ошибках.

Автор - koyaanisqatsi
Дата добавления - 21.04.2016 в 23:42
koyaanisqatsi Дата: Четверг, 21.04.2016, 23:47 | Сообщение № 10
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
SLAVICK, Исправил код. Только заметил что там в этих словах русских почему-то есть дополнительный знак зачем он нужен мне не понятно. В исходном коде он тоже присутствовал.

Цитата
("В&ырезать", "Вст&авить значения", "Вст&авить", "Специальная вс&тавка...", "Вс&тавить...", "&Удалить...")
 
Ответить
СообщениеSLAVICK, Исправил код. Только заметил что там в этих словах русских почему-то есть дополнительный знак зачем он нужен мне не понятно. В исходном коде он тоже присутствовал.

Цитата
("В&ырезать", "Вст&авить значения", "Вст&авить", "Специальная вс&тавка...", "Вс&тавить...", "&Удалить...")

Автор - koyaanisqatsi
Дата добавления - 21.04.2016 в 23:47
_Boroda_ Дата: Пятница, 22.04.2016, 00:09 | Сообщение № 11
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16674
Репутация: 6479 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
В старых Excelях были такие панели
Рис1
Их можно было вызвать, нажав Альт и подчеркнутую букву. Внутри в командах аналогичные подчеркивания
Рис2
Для обозначения этого подчеркивания в тексте надписи и использовался амперсанд
Рис3
Некоторые из этих команд работают и в новых Exelях.
Например, Альт В Р - режим разметки страницы.
К сообщению приложен файл: 3835629.jpg (90.1 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеВ старых Excelях были такие панели
Рис1
Их можно было вызвать, нажав Альт и подчеркнутую букву. Внутри в командах аналогичные подчеркивания
Рис2
Для обозначения этого подчеркивания в тексте надписи и использовался амперсанд
Рис3
Некоторые из этих команд работают и в новых Exelях.
Например, Альт В Р - режим разметки страницы.

Автор - _Boroda_
Дата добавления - 22.04.2016 в 00:09
koyaanisqatsi Дата: Пятница, 22.04.2016, 00:21 | Сообщение № 12
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, Спасибо. Понятно )
 
Ответить
Сообщение_Boroda_, Спасибо. Понятно )

Автор - koyaanisqatsi
Дата добавления - 22.04.2016 в 00:21
SLAVICK Дата: Пятница, 22.04.2016, 09:13 | Сообщение № 13
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
в идеале бы этот метод допилить до рабочего.

Так он и так рабочий :D . Возможно не соответствует Вашим критериям- но работает.
[offtop]Касательно Вашей прошлой темы.
С текстом мне кажется сложно искать информацию она же будет складываться по очереди со всех ячеек и потом за одной ячейкой не уследить будет

Опять невнимательно читаете:
Кроме того можно потом его импортировать отдельным макросом хоть на лист хоть в примечания...

Я не настаиваю - это же Ваш проект. Просто говорю о том, как можно сделать:
Выводите в лог адрес ячейки, дату, пользователя, новое значение. Потом этот файл можно считать и:
либо сделать сводную к примеру - сгруппировав по адресу все изменения, можно же даже поставить фильтр на дату после определенного числа.
либо эти же данные из сводной - простым макросом раскидать по примечаниям.
[/offtop]


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
в идеале бы этот метод допилить до рабочего.

Так он и так рабочий :D . Возможно не соответствует Вашим критериям- но работает.
[offtop]Касательно Вашей прошлой темы.
С текстом мне кажется сложно искать информацию она же будет складываться по очереди со всех ячеек и потом за одной ячейкой не уследить будет

Опять невнимательно читаете:
Кроме того можно потом его импортировать отдельным макросом хоть на лист хоть в примечания...

Я не настаиваю - это же Ваш проект. Просто говорю о том, как можно сделать:
Выводите в лог адрес ячейки, дату, пользователя, новое значение. Потом этот файл можно считать и:
либо сделать сводную к примеру - сгруппировав по адресу все изменения, можно же даже поставить фильтр на дату после определенного числа.
либо эти же данные из сводной - простым макросом раскидать по примечаниям.
[/offtop]

Автор - SLAVICK
Дата добавления - 22.04.2016 в 09:13
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Запрет редактирования столбца и сносок/примечаний. (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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