Есть желание запретить макросом редактирование примечаний на страницах "Овощи, мясо, Бакалея". Что-бы только макрос сам и мог вносить туда изменения. Также хочется поступить со столбцом "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]
Здравствуйте.
Есть желание запретить макросом редактирование примечаний на страницах "Овощи, мясо, Бакалея". Что-бы только макрос сам и мог вносить туда изменения. Также хочется поступить со столбцом "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]
Код
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]
Нашел один код который должен хорошо все закрывать.
У меня на листе "Овощи" Все ломается на первой же строке кода [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
значит есть не объявленные переменные. koyaanisqatsi, на сколько я понял - это продолжение Вашей прошлой темы - вернитесь в нее и почитайте еще раз мой пост. Ведение истории ячейки таким образом - далеко не лучший способ, и это только первые грабли... Вам еще предстоит много с этим способом.
значит есть не объявленные переменные. koyaanisqatsi, на сколько я понял - это продолжение Вашей прошлой темы - вернитесь в нее и почитайте еще раз мой пост. Ведение истории ячейки таким образом - далеко не лучший способ, и это только первые грабли... Вам еще предстоит много с этим способом. SLAVICK
SLAVICK, Да. это попытка доведения до ума. Возникла проблема с тем что при копи пасте он не только данные копирует но и стиль ячейки. То-есть по факту происходит два раза копирование. Это видно по логу. Если бы производилась только текстовая вставка то предложенный вариант с примечанием работал бы корректно. А так при втором копировании история скидывается. Плюс еще в обычном варианте примечание можно редактировать. Что в принципе убивает весь смысл этого действия.
Я честно говоря и в первый раз читал что Вы писали. Только выбрал я более подходящее для доступа к информации как мне показалось. Однако там есть варианты которые надо допиливать.
А что Вы конкретно имеете в виду когда предлагаете прочитать снова ту тему. ? Было бы удобней если бы сразу на пост нужный ссылались а то я тему то прочитал но что Вы имеете ввиду не понимаю.
SLAVICK, Да. это попытка доведения до ума. Возникла проблема с тем что при копи пасте он не только данные копирует но и стиль ячейки. То-есть по факту происходит два раза копирование. Это видно по логу. Если бы производилась только текстовая вставка то предложенный вариант с примечанием работал бы корректно. А так при втором копировании история скидывается. Плюс еще в обычном варианте примечание можно редактировать. Что в принципе убивает весь смысл этого действия.
Я честно говоря и в первый раз читал что Вы писали. Только выбрал я более подходящее для доступа к информации как мне показалось. Однако там есть варианты которые надо допиливать.
А что Вы конкретно имеете в виду когда предлагаете прочитать снова ту тему. ? Было бы удобней если бы сразу на пост нужный ссылались а то я тему то прочитал но что Вы имеете ввиду не понимаю.koyaanisqatsi
Насчет удаления вашей отметки. Тут уж вряд ли можно проверить но я думаю что знаю как это произошло. Я Дважды редактировал 1. добавлял сначала второй код. 2. добавлял прикреплял файл скорее всего вы в тоже время делали отметку. Скорее всего сохранился мой вариант корректировки.
Кроказябры постараюсь исправить. Пока не получается. Серверная винда 2008 почему-то так копирует код ((( Пробовал и в Ворд вставлять и в блокнот никуда не получается. Похоже разные кодировки.
Поставлю на другую машину Офис
SLAVICK, За Крокозябры извиняюсь.
Насчет удаления вашей отметки. Тут уж вряд ли можно проверить но я думаю что знаю как это произошло. Я Дважды редактировал 1. добавлял сначала второй код. 2. добавлял прикреплял файл скорее всего вы в тоже время делали отметку. Скорее всего сохранился мой вариант корректировки.
Кроказябры постараюсь исправить. Пока не получается. Серверная винда 2008 почему-то так копирует код ((( Пробовал и в Ворд вставлять и в блокнот никуда не получается. Похоже разные кодировки.
что Вы конкретно имеете в виду когда предлагаете прочитать снова ту тему. ? Было бы удобней если бы сразу на пост нужный ссылались а то я тему то прочитал но что Вы имеете ввиду не понимаю
Записывать изменения в отдельный ТХТ(СSV) файл - самый оптимальный способ. Такие Лог файлы ведутся многими системами
Если записывать в лог файл то: сохраняется возможность отмены действия Вы видите все измения в не зависимости от действия(копирование, вставка, просто изменение) Лог файл лежит отдельно и даже при замене основного файла - лог остается. т.е. Вы можете его "спрятать" и писать туда историю . Кроме того можно потом его импортировать отдельным макросом хоть на лист хоть в примечания...
что Вы конкретно имеете в виду когда предлагаете прочитать снова ту тему. ? Было бы удобней если бы сразу на пост нужный ссылались а то я тему то прочитал но что Вы имеете ввиду не понимаю
Записывать изменения в отдельный ТХТ(СSV) файл - самый оптимальный способ. Такие Лог файлы ведутся многими системами
Если записывать в лог файл то: сохраняется возможность отмены действия Вы видите все измения в не зависимости от действия(копирование, вставка, просто изменение) Лог файл лежит отдельно и даже при замене основного файла - лог остается. т.е. Вы можете его "спрятать" и писать туда историю . Кроме того можно потом его импортировать отдельным макросом хоть на лист хоть в примечания...SLAVICK
SLAVICK, Честно говоря в идеале бы этот метод допилить до рабочего. С текстом мне кажется сложно искать информацию она же будет складываться по очереди со всех ячеек и потом за одной ячейкой не уследить будет. К тому же юзеры не будут иметь доступа тогда к логу. А я хочу чтобы все видели и учились на ошибках.
SLAVICK, Честно говоря в идеале бы этот метод допилить до рабочего. С текстом мне кажется сложно искать информацию она же будет складываться по очереди со всех ячеек и потом за одной ячейкой не уследить будет. К тому же юзеры не будут иметь доступа тогда к логу. А я хочу чтобы все видели и учились на ошибках.koyaanisqatsi
SLAVICK, Исправил код. Только заметил что там в этих словах русских почему-то есть дополнительный знак зачем он нужен мне не понятно. В исходном коде он тоже присутствовал.
SLAVICK, Исправил код. Только заметил что там в этих словах русских почему-то есть дополнительный знак зачем он нужен мне не понятно. В исходном коде он тоже присутствовал.
В старых Excelях были такие панели Рис1 Их можно было вызвать, нажав Альт и подчеркнутую букву. Внутри в командах аналогичные подчеркивания Рис2 Для обозначения этого подчеркивания в тексте надписи и использовался амперсанд Рис3 Некоторые из этих команд работают и в новых Exelях. Например, Альт В Р - режим разметки страницы.
В старых Excelях были такие панели Рис1 Их можно было вызвать, нажав Альт и подчеркнутую букву. Внутри в командах аналогичные подчеркивания Рис2 Для обозначения этого подчеркивания в тексте надписи и использовался амперсанд Рис3 Некоторые из этих команд работают и в новых Exelях. Например, Альт В Р - режим разметки страницы. _Boroda_
Кроме того можно потом его импортировать отдельным макросом хоть на лист хоть в примечания...
Я не настаиваю - это же Ваш проект. Просто говорю о том, как можно сделать: Выводите в лог адрес ячейки, дату, пользователя, новое значение. Потом этот файл можно считать и: либо сделать сводную к примеру - сгруппировав по адресу все изменения, можно же даже поставить фильтр на дату после определенного числа. либо эти же данные из сводной - простым макросом раскидать по примечаниям. [/offtop]
Кроме того можно потом его импортировать отдельным макросом хоть на лист хоть в примечания...
Я не настаиваю - это же Ваш проект. Просто говорю о том, как можно сделать: Выводите в лог адрес ячейки, дату, пользователя, новое значение. Потом этот файл можно считать и: либо сделать сводную к примеру - сгруппировав по адресу все изменения, можно же даже поставить фильтр на дату после определенного числа. либо эти же данные из сводной - простым макросом раскидать по примечаниям. [/offtop]SLAVICK