我有一个启用宏的工作簿。它保护了工作表和工作簿。 工作簿包括3个表格。 Sheet1命名为Main Sheet2命名为Tab2 Sheet3命名为Tab3
我在Tab2上禁用了单元格,我有一个宏,应该向用户启用单元格提示是否提示。如果用户选择“是”,则启用单元格并将“主”表单上的下拉菜单更改为是。
宏对我来说很好。我必须通过电子邮件将工作簿分享给其他用户。
用户将工作簿保存在他的计算机上,然后选择“启用编辑”和“启用宏”。
但是,当用户在提示符上单击“确定”时,顶部的工作簿名称显示XXXX [只读],单元格Tab2未启用。
我是否可以选择打开工作簿读/写模式?或者我的任何其他选择,以便保护工作正常?
Private Sub Worksheet_Activate()
NotifyUserGeneral
End Sub
Private Sub NotifyUserGeneral()
Dim mMessageDisplayed As Boolean
Dim message As Integer
If ActiveSheet.ProtectContents = True And Not mMessageDisplayed Then
message = MsgBox("Cells are locked on current sheet, press ok to Unlock ", vbOKCancel)
mMessageDisplayed = True
If message = vbOK Then
Sheets("MAIN").Range("G11") = "YES"
Else
Sheets("MAIN").Range("E29") = "NO"
End If
End If
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
End Sub
请建议
答案 0 :(得分:1)
我认为这是你所追求的代码。
注意:我已将mMessageDisplayed
的声明移到模块的顶部,否则每次调用NotifyUserGeneral
时它都会重置为FALSE。
另请注意:如果您想从其他工作表中调用NotifyUserGeneral,可能最好将其移至普通模块 - 请记住将mMessageDisplayed
声明移至。
Option Explicit
Private mMessageDisplayed As Boolean
Private Sub Worksheet_Activate()
NotifyUserGeneral
End Sub
Private Sub NotifyUserGeneral()
If ActiveSheet.ProtectContents And Not mMessageDisplayed Then
mMessageDisplayed = True
If MsgBox("Cells are locked on current sheet, press ok to Unlock", vbOKCancel + vbInformation) = vbOK Then
ActiveSheet.Unprotect
ThisWorkbook.Worksheets("MAIN").Range("G11") = "YES"
Else
ThisWorkbook.Worksheets("MAIN").Range("E29") = "NO"
End If
End If
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
End Sub