防止使用对象的其他工作簿中的VBA代码

时间:2017-06-28 12:44:57

标签: vba

我需要禁用控件(在这种情况下为列表框),因此用户无法从其他部门获取数据。我有一个宏,可以启用/禁用它,并要求输入密码。

我需要的是防止半月用户编写宏来在另一个工作簿中启用此列表框并以这种方式解锁它。有可能以某种方式阻止来自其他模块的VBA代码使用此控件吗?因此,只有在该工作表中编写的代码才能启用或禁用它。

谢谢

2 个答案:

答案 0 :(得分:0)

您可以做的是锁定您的VBA项目并将“潜艇”更改为“功能”,这样,更高级的用户无法在不解锁项目的情况下访问您编写的宏。

(从Subs are的开发者功能区中的“assign a macro”按钮看不到功能

答案 1 :(得分:0)

我试过了.enabled = False - 我现在还不确定应该做什么,但它没有做我想要的事情

为了更清楚,我在Sheet1上有2个列表框和几个组合框。当我向用户发送文件时,我想锁定ListBox,或者更确切地说是 Workbooks("opexRequest").Sheets("Report").ListBoxes("lstDepartment").Enabled = True

我尝试做的是阻止其他用户在其他工作簿中编写

Sub lstDepartment_change()

        'checks first if lock checkbox is true/false, clears selection and disables listbox, _
        if checkbox is locked and yet listbox is enabled and allows change

        If Me.chkLock = True Then
                Me.ListBoxes("lstDepartment").Enabled = False
                Me.ListBoxes("lstdirector").Enabled = False
                Call clearlistbox
                End
            ElseIf Me.chkLock = False Then
                Call ControlsM.directorpopulation
        End If

    End Sub



    Sub lstDirector_change()

        'checks first if lock checkbox is true/false, clears selection and disables listbox, _
        if checkbox is locked and yet listbox is enabled and allows change

        If Me.chkLock = True Then
            Me.ListBoxes("lstDepartment").Enabled = False
            Me.ListBoxes("lstdirector").Enabled = False
            Call clearlistbox
            End
        ElseIf Me.chkLock = False Then

        End If


    End Sub



    Private Sub chkLock_Click()

        'locking/unlocking with password inbox call

        If Me.chkLock.Value = True Then
                Me.ListBoxes("lstDepartment").Enabled = False
                Me.ListBoxes("lstDirector").Enabled = False
            ElseIf Me.chkLock.Value = False Then

                If PasswordInputBoxM.InputBoxPassword("Enter password", "Password Required") = "****" Then
                        Me.ListBoxes("lstDepartment").Enabled = True
                        Me.ListBoxes("lstDirector").Enabled = True
                    Else
                        Me.chkLock.Value = True
                        MsgBox "Wrong Password"
                        Exit Sub
                End If
        End If

    End Sub

此行woudl启用列表框,用户可以更改值,宏将为Departments用户创建新的SQL字符串,不应该有权访问。我需要启用组合框,以便用户可以查看其部门的不同日期和计划版本。

我偶然发现了一种方法。

在Sheet1中我有这段代码

 Workbooks("opexRequest").Sheets("Report").ListBoxes("lstDepartment").Enabled = True 'handled
    Workbooks("opexRequest").Sheets("Report").chkLock.value = False 'handled
    Workbooks("opexRequest").Sheets("Report").ListBoxes("lstDepartment").Selected(1) = True 'do not know how to prevent this

如果有人试图仅解锁列表框,并尝试更改值,则会检查复选框值,并清除所选列表并锁定列表框 如果有人试图解锁列表框并取消选中锁定复选框,它将自动询问密码 问题是,有人可以从其他工作簿中更改选定的值。我不知道如何处理

{{1}}