我不熟悉在Excel中使用Macros / VB并需要一些帮助(以最简单的方式指导我)
我有一张有两张纸的工作簿。我已经在工作表1上创建了一个表单,允许用户输入数据,然后填入隐藏表(sheet2)。
我想在表单1上添加一个按钮,供用户查看隐藏的"列表数据"他们已输入表2但他们无法编辑数据 - 只能查看它。
非常感谢任何帮助。
答案 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
此代码将撤消用户所做的任何更改。用户每次第三次尝试修改某些内容时都会收到相应的消息。