Добрый всем. В очередной раз прошу помощи. На создавал макросов, точнее насобирал из различных источников. Макросы созданы для защиты файла с множеством формул для расчета. Проблема в том, что при закрытии файла, и его открытии, листы защищаются, но при шаге на определенную ячейку, там автоматически стираются данные содержащиеся в ней. Если с листа сразу снять защиту, то данные не стираются. Помогите, проверте пожалуйста собранные макросы, они записаны в книге. Где ошибка. Заранее благодарен. [vba]
Код
Sub Enable_AccessVBOM_and_Macro() On Error Resume Next Key$ = "HKEY_CURRENT_USER\Software\Microsoft\Office\" & Application.Version & _ "\Excel\Security\"
' включаем программный доступ к объектной модели проекта VBA CreateObject("WScript.Shell").RegWrite Key$ & "AccessVBOM", 1, "REG_DWORD"
' ставим низкий уровень безопасности (применится после перезапуска Excel) CreateObject("WScript.Shell").RegWrite Key$ & "VBAWarnings", 1, "REG_DWORD" End Sub Private Sub Workbook_Open() UserForm2.Show If Date >= "30/04/2024" Then MsgBox "Срок использования истек" 'всплывающее окно ActiveWindow.Close False End If Sheets("график").Activate sn = CreateObject("Scripting.FileSystemObject").GetDrive("C").SerialNumber 'назначение переменной sn текущего серийного номера диска If sn = -900811744 Or sn = -900811744 Or sn = 456 Then 'проверка допустимых серийников Else 'если серийник неверный MsgBox "Доступ запрещен, программа не активирована" 'всплывающее окно ActiveWindow.Close False End If Dim wsSh As Worksheet For Each wsSh In ThisWorkbook.Sheets wsSh.Visible = -1 Next wsSh ThisWorkbook.Sheets("WARNING").Visible = 2 ThisWorkbook.Sheets("НЗТ1").Visible = 2 ThisWorkbook.Sheets("НЗТ2").Visible = 2 ThisWorkbook.Sheets("НЗТ3").Visible = 2 ThisWorkbook.Sheets("НЗТ4").Visible = 2 ThisWorkbook.Sheets("НЗТ5").Visible = 2 ThisWorkbook.Sheets("НЗТ6").Visible = 2 ThisWorkbook.Sheets("НЗТ7").Visible = 2 ThisWorkbook.Sheets("НЗТ8").Visible = 2 ThisWorkbook.Sheets("НЗТ9").Visible = 2 ThisWorkbook.Sheets("НЗТ10").Visible = 2 ThisWorkbook.Sheets("прогнозные (смр)").Visible = 2 Dim sh As Worksheet For Each sh In Worksheets With sh .Unprotect Password:="1111" 'Задайте свой пароль .Cells.FormulaHidden = True .EnableOutlining = True .Protect Password:="1111", UserInterfaceOnly:=True End With Next sh End Sub Sub Enable_AccessVBOM_and_Macro() On Error Resume Next Key$ = "HKEY_CURRENT_USER\Software\Microsoft\Office\" & Application.Version & _ "\Excel\Security\"
' включаем программный доступ к объектной модели проекта VBA CreateObject("WScript.Shell").RegWrite Key$ & "AccessVBOM", 1, "REG_DWORD"
' ставим низкий уровень безопасности (применится после перезапуска Excel) CreateObject("WScript.Shell").RegWrite Key$ & "VBAWarnings", 1, "REG_DWORD" End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim s As String If SaveAsUI Then s = Application.GetSaveAsFilename(Me.Name, fileFilter:="Macro Enabled Workbooks (*.xlsm), *.xlsm") If s <> "False" Then If s = Me.FullName Then Me.Save Else Application.EnableEvents = 0 Me.SaveAs s, 52 Application.EnableEvents = 1 Workbooks.Open s Me.Close 0 End If End If Cancel = True End If End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.ScreenUpdating = False Dim wsSh As Worksheet Sheets("WARNING").Visible = -1 For Each wsSh In ThisWorkbook.Sheets If wsSh.Name <> "WARNING" Then wsSh.Visible = 2 Next wsSh ThisWorkbook.Save End Sub
[/vba]
Добрый всем. В очередной раз прошу помощи. На создавал макросов, точнее насобирал из различных источников. Макросы созданы для защиты файла с множеством формул для расчета. Проблема в том, что при закрытии файла, и его открытии, листы защищаются, но при шаге на определенную ячейку, там автоматически стираются данные содержащиеся в ней. Если с листа сразу снять защиту, то данные не стираются. Помогите, проверте пожалуйста собранные макросы, они записаны в книге. Где ошибка. Заранее благодарен. [vba]
Код
Sub Enable_AccessVBOM_and_Macro() On Error Resume Next Key$ = "HKEY_CURRENT_USER\Software\Microsoft\Office\" & Application.Version & _ "\Excel\Security\"
' включаем программный доступ к объектной модели проекта VBA CreateObject("WScript.Shell").RegWrite Key$ & "AccessVBOM", 1, "REG_DWORD"
' ставим низкий уровень безопасности (применится после перезапуска Excel) CreateObject("WScript.Shell").RegWrite Key$ & "VBAWarnings", 1, "REG_DWORD" End Sub Private Sub Workbook_Open() UserForm2.Show If Date >= "30/04/2024" Then MsgBox "Срок использования истек" 'всплывающее окно ActiveWindow.Close False End If Sheets("график").Activate sn = CreateObject("Scripting.FileSystemObject").GetDrive("C").SerialNumber 'назначение переменной sn текущего серийного номера диска If sn = -900811744 Or sn = -900811744 Or sn = 456 Then 'проверка допустимых серийников Else 'если серийник неверный MsgBox "Доступ запрещен, программа не активирована" 'всплывающее окно ActiveWindow.Close False End If Dim wsSh As Worksheet For Each wsSh In ThisWorkbook.Sheets wsSh.Visible = -1 Next wsSh ThisWorkbook.Sheets("WARNING").Visible = 2 ThisWorkbook.Sheets("НЗТ1").Visible = 2 ThisWorkbook.Sheets("НЗТ2").Visible = 2 ThisWorkbook.Sheets("НЗТ3").Visible = 2 ThisWorkbook.Sheets("НЗТ4").Visible = 2 ThisWorkbook.Sheets("НЗТ5").Visible = 2 ThisWorkbook.Sheets("НЗТ6").Visible = 2 ThisWorkbook.Sheets("НЗТ7").Visible = 2 ThisWorkbook.Sheets("НЗТ8").Visible = 2 ThisWorkbook.Sheets("НЗТ9").Visible = 2 ThisWorkbook.Sheets("НЗТ10").Visible = 2 ThisWorkbook.Sheets("прогнозные (смр)").Visible = 2 Dim sh As Worksheet For Each sh In Worksheets With sh .Unprotect Password:="1111" 'Задайте свой пароль .Cells.FormulaHidden = True .EnableOutlining = True .Protect Password:="1111", UserInterfaceOnly:=True End With Next sh End Sub Sub Enable_AccessVBOM_and_Macro() On Error Resume Next Key$ = "HKEY_CURRENT_USER\Software\Microsoft\Office\" & Application.Version & _ "\Excel\Security\"
' включаем программный доступ к объектной модели проекта VBA CreateObject("WScript.Shell").RegWrite Key$ & "AccessVBOM", 1, "REG_DWORD"
' ставим низкий уровень безопасности (применится после перезапуска Excel) CreateObject("WScript.Shell").RegWrite Key$ & "VBAWarnings", 1, "REG_DWORD" End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim s As String If SaveAsUI Then s = Application.GetSaveAsFilename(Me.Name, fileFilter:="Macro Enabled Workbooks (*.xlsm), *.xlsm") If s <> "False" Then If s = Me.FullName Then Me.Save Else Application.EnableEvents = 0 Me.SaveAs s, 52 Application.EnableEvents = 1 Workbooks.Open s Me.Close 0 End If End If Cancel = True End If End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.ScreenUpdating = False Dim wsSh As Worksheet Sheets("WARNING").Visible = -1 For Each wsSh In ThisWorkbook.Sheets If wsSh.Name <> "WARNING" Then wsSh.Visible = 2 Next wsSh ThisWorkbook.Save End Sub
Нашел ответ на свой вопрос, если попытаться отредактировать ячейку в столбце, который разрешено редактировать, после двойного щелчка мышью по ячейке, имеющийся в ней текст исчезает. Проблема в том что текст исчезает, т.к. в формате ячейки стоит флажок "Скрыть формулы" после автоматической защиты.
Помогите, в каком месте прописать и что что бы нужные ячейки не становились с флажком "Скрыть формулы". Благодарю.
Нашел ответ на свой вопрос, если попытаться отредактировать ячейку в столбце, который разрешено редактировать, после двойного щелчка мышью по ячейке, имеющийся в ней текст исчезает. Проблема в том что текст исчезает, т.к. в формате ячейки стоит флажок "Скрыть формулы" после автоматической защиты.
Помогите, в каком месте прописать и что что бы нужные ячейки не становились с флажком "Скрыть формулы". Благодарю.garbol