添加命令按钮,允许用户查看隐藏的工作表

时间:2017-07-25 03:12:39

标签: excel vba excel-vba commandbutton

我不熟悉在Excel中使用Macros / VB并需要一些帮助(以最简单的方式指导我)

我有一张有两张纸的工作簿。我已经在工作表1上创建了一个表单,允许用户输入数据,然后填入隐藏表(sheet2)。

我想在表单1上添加一个按钮,供用户查看隐藏的"列表数据"他们已输入表2但他们无法编辑数据 - 只能查看它。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

使用表单在工作表上插入一个形状(我更喜欢在ActiveX控件上)。我将形状命名为“显示数据”,并为按钮指定了相同的标题。现在将以下代码添加到标准代码模块(VBE命名为“Module1”)。

Option Explicit

Sub ShowData_Click()
    ' 25 Jul 2017

    With ThisWorkbook.Worksheets("Jeanette")
        .Visible = xlSheetVisible
        .Activate
    End With
End Sub

将包含数据的工作表名称更改为您在项目中为该工作表指定的名称。然后右键单击按钮(形状)并选择“分配宏”。分配“ShowData_Click”宏。现在,当您单击按钮时,隐藏的工作表将变为可见并被激活。

在数据表的代码表(通常是隐藏的)中,将以下内容添加到过程中。

Option Explicit

    Dim ThisSheet As String

Private Sub Worksheet_Activate()
    ' 25 Jul 2017
    ThisSheet = ActiveSheet.Name
End Sub

Private Sub Worksheet_Deactivate()
    ' 25 Jul 2017
    On Error Resume Next
    Worksheets(ThisSheet).Visible = xlSheetVeryHidden
End Sub

第一个将在激活工作表时运行,这在按下新按钮时发生。它会记住表格的名称。这样您就不需要对名称进行硬编码。

每当您激活工作簿中的另一个工作表时,第二个过程都将运行。它会再次隐藏工作表。因此,您可以通过按下按钮来显示工作表,并通过选择另一个工作表来隐藏工作表。

我不是Excel保护的朋友。所以,我建议另一种方法来阻止用户修改数据。这是代码。将其安装在已有激活和取消激活程序的相同代码表上。

Private Sub Worksheet_Change(ByVal Target As Range)
    ' 25 Jul 2017

    Static ShowMsg As Integer

    With Application
        .EnableEvents = False
        .Undo
        ShowMsg = ShowMsg + 1
        If (ShowMsg Mod 3) = 1 Then
            MsgBox "Data in this sheet may not be modified." & vbCr & _
                   "Your changes have been removed.", _
                   vbInformation, "Invalid action"
        End If
        .EnableEvents = True
    End With
End Sub

此代码将撤消用户所做的任何更改。用户每次第三次尝试修改某些内容时都会收到相应的消息。