【问题标题】:Prevent Workbook Save BUT Save in Macro [duplicate]防止工作簿保存但保存在宏中[重复]
【发布时间】:2017-09-29 20:41:22
【问题描述】:

我正在编写一个代码,它会阻止用户保存工作簿,并且它只会在我想要的时候保存。这是为了防止用户在不应该进行更改和保存时进行更改。我已经创建了两个私人潜艇,但是当我自己保存工作簿时,我不知道如何例外。我希望能够将保存代码放在各种宏中,以便我可以随时控制保存。

以下是我的代码:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    MsgBox "You can't save this workbook!"
    Cancel = True

End Sub

Private Sub Workbook_Open()
Dim myValue As String
Dim Answer As String
Dim MyNote As String

MsgBox "Welcome to the Lot Input Program"
If Range("A1").Value = "" Then
Line:
    myValue = InputBox("Please input your email address:", "Input", "x@us.tel.com")
    'Place your text here
    MyNote = "Is this correct?: " & myValue
    'Display MessageBox
    Answer = MsgBox(MyNote, vbQuestion + vbYesNo, "Confirmation")
    If Answer = vbNo Then
        'Code for No button Press
        GoTo Line
    Else
        Range("A1").Value = myValue
    End If
    ActiveWorkbook.Save
End If
End Sub

【问题讨论】:

  • 您可以查看Environ$("Username") 来查看谁打开了它。这将返回他们用来登录计算机的用户名。

标签: vba excel


【解决方案1】:

你可以试试这样的……

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Environ("UserName") <> "YourUserNameHere" Then
    MsgBox "You can't save this workbook!"
    Cancel = True
End If
End Sub

编辑:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Ans As VbMsgBoxResult
Ans = MsgBox("You can't save this workbook!" & vbNewLine & _
        "Do you have password to save the file?", vbQuestion + vbYesNo)
If Ans = vbYes Then
    frmPassword.Show   'UserForm to accept the password
Else
    Cancel = True
End If
End Sub

【讨论】:

  • 我遇到的问题是我将把它分发给办公室里的每个人,所以我不能把用户名硬编码到这个里面。此外,在这种情况下,用户名是无关紧要的,因为当我在整个项目中使用保存功能时,无论用户如何,它都需要能够保存,所以没有什么可以限制我强加给用户的保存。
  • 该代码将阻止所有其他用户保存文件,除非您在自己的系统上打开文件并保存文件。另一种解决方法是,您可以使用一个带有一个 TextBox 的 UserForm 来接受要保存的密码,当有人试图保存文件时,会弹出 UserForm 要求用户输入密码,如果输入的密码正确,用户将被允许现在保存文件。拥有 UserForm 的好处是,您可以使用 InputBox 不提供的密码字符隐藏输入的密码。
  • 这个问题是我仍然希望能够在“未经授权”的人的计算机上启动保存。例如,虽然我可以密码限制保存,但我仍然想在某些运行点保存他们的文件。是否可以在保存时设置密码限制,然后运行代码时自动输入密码?
  • 当保存被触发时,代码永远不知道是谁触发了它,也无法决定是否允许保存。因此,如果您尝试将文件保存在另一个用户的系统上,您只需要告诉代码是您触发了保存并明确提供密码是唯一的选择。虽然您可以在弹出消息框告诉用户“您无法保存此工作簿!”后调用 UserForm。用一行“你有密码来保存文件吗?查看代码的编辑答案......
【解决方案2】:

我添加了一个在保存取消代码中引用的公共变量 saveLock。这使我可以锁定和解锁代码中的保存。如果有人有更好的方法请告诉我,但这确实解决了问题。

Public saveLock As Integer
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If saveLock = 0 Then
    Cancel = True
End If
End Sub
Private Sub Workbook_Open()
Dim myValue As String
Dim Answer As String
Dim MyNote As String
saveLock = 0

MsgBox "Welcome to the Lot Input Program"
If Range("A1").Value = "" Then
Line:
    myValue = InputBox("Please input your email address:", "Input", "x@us.tel.com")
    'Place your text here
    MyNote = "Is this correct?: " & myValue
    'Display MessageBox
    Answer = MsgBox(MyNote, vbQuestion + vbYesNo, "Confirmation")
    If Answer = vbNo Then
        'Code for No button Press
        GoTo Line
    Else
        Range("A1").Value = myValue
    End If
    saveLock = 1
    ActiveWorkbook.Save
    saveLock = 0
End If
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多