2017-07-25 73 views
0

我是新来使用宏/ VB在Excel中,需要一些帮助(以最简单的方式,你可以教我)添加命令按钮允许用户查看隐藏的工作表

我有两个表的工作簿。我已经在工作表1上创建了一个表单,该工作表将允许用户输入数据,然后将这些数据填充到隐藏工作表(工作表2)中。

我想在工作表1上添加一个按钮,以便用户查看他们在工作表2中输入的隐藏“列表数据”,但他们无法编辑数据 - 只能查看它。

任何帮助将不胜感激。

+0

使用密码保护工作表2不是一件容易的事,以防止它们被编辑? – Keenlearner

+1

欢迎来到Stack Overflow!有关编写优秀问题的提示,请访问[如何提问](https://stackoverflow.com/help/how-to-ask)。如果您对该网站有任何疑问,可以访问[帮助中心](https://stackoverflow.com/help)或访问[元堆栈溢出](https://meta.stackoverflow.com/) – CodingNinja

回答

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保护的朋友。所以,我建议另一种方法来防止用户修改数据。这是代码。将它安装在已经有Activate和Deactivate过程的相同代码表上。

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 

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