启用宏的工作簿仅在共享时读取

时间:2016-10-19 12:11:10

标签: excel vba excel-vba macros

我有一个启用宏的工作簿。它保护了工作表和工作簿。 工作簿包括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

请建议

1 个答案:

答案 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