Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 创建多个宏按钮以显示/隐藏特定工作表_Excel_Vba - Fatal编程技术网

Excel 创建多个宏按钮以显示/隐藏特定工作表

Excel 创建多个宏按钮以显示/隐藏特定工作表,excel,vba,Excel,Vba,刚到这里,我就开始自学编码。我有一个工作簿,其中大约有14个选项卡/工作表,供员工输入每天的工作时间。在摘要选项卡上,并希望为每位员工创建一个宏按钮,以便单击以查看其选项卡。这些员工选项卡是隐藏的,我只希望操作取消隐藏,然后在员工单击按钮时隐藏 不幸的是,我收到一条模棱两可的错误消息,我为每个员工创建了一个模块。我假设我需要以某种方式堆叠代码,但我对编码还是完全陌生的。下面是我的代码示例 Private Sub ShowHideWorksheets() Sheets("EMPLOYEE 1"

刚到这里,我就开始自学编码。我有一个工作簿,其中大约有14个选项卡/工作表,供员工输入每天的工作时间。在摘要选项卡上,并希望为每位员工创建一个宏按钮,以便单击以查看其选项卡。这些员工选项卡是隐藏的,我只希望操作取消隐藏,然后在员工单击按钮时隐藏

不幸的是,我收到一条模棱两可的错误消息,我为每个员工创建了一个模块。我假设我需要以某种方式堆叠代码,但我对编码还是完全陌生的。下面是我的代码示例

Private Sub ShowHideWorksheets()
  Sheets("EMPLOYEE 1").Visible = Not Sheets("EMPLOYEE 1").Visible
End Sub

如果你将私有变为公共,它应该会起作用。我想您现在只是在创建宏,以使基本功能正常工作。您可以将其隐藏为已发布的代码,也可以按如下方式取消隐藏:

' This first macro actually just makes the worksheet visible and then
' invisible each time you execute it - so I'm not sure if
' that's what you're after
Public Sub ShowHideWorksheets()
   Sheets("EMPLOYEE 1").Visible = Not Sheets("EMPLOYEE 1").Visible
End Sub

' If it's invisible you can do this.
Public Sub ShowWorksheets()
   Sheets("EMPLOYEE 1").Visible = True
End Sub

' Basically that should give you an idea of how to proceed.
Public Sub TriggerSheetVisibility(worksheetname as string)

Dim ws as WorkSheet

On Error Resume Next 'To avoid subscript out of range error if a worksheetname is passed that doesn't exit
    Set ws = Worksheets(worksheetname)
On Error Goto 0

If Not ws Is Nothing Then 'Only when the worksheet exists, we can execute the rest of this sub:
    If ws.Visible = True then
        ws.Visible = False
    Else
        ws.Visible = True
    End If
End If

End Sub

基本上,您希望切换工作表的可见性。 假设您知道将触发哪个工作表,则如下所示:

' This first macro actually just makes the worksheet visible and then
' invisible each time you execute it - so I'm not sure if
' that's what you're after
Public Sub ShowHideWorksheets()
   Sheets("EMPLOYEE 1").Visible = Not Sheets("EMPLOYEE 1").Visible
End Sub

' If it's invisible you can do this.
Public Sub ShowWorksheets()
   Sheets("EMPLOYEE 1").Visible = True
End Sub

' Basically that should give you an idea of how to proceed.
Public Sub TriggerSheetVisibility(worksheetname as string)

Dim ws as WorkSheet

On Error Resume Next 'To avoid subscript out of range error if a worksheetname is passed that doesn't exit
    Set ws = Worksheets(worksheetname)
On Error Goto 0

If Not ws Is Nothing Then 'Only when the worksheet exists, we can execute the rest of this sub:
    If ws.Visible = True then
        ws.Visible = False
    Else
        ws.Visible = True
    End If
End If

End Sub

另请参见

这也是一种可接受的方法?但是冗长的长篇大论

Private Sub CommandButton1_Click()
    Dim sheet As Worksheet
    For Each sheet In ActiveWorkbook.Sheets
        If sheet.Name <> CommandButton1.Caption Then
            sheet.Visible = False
        End If

        If sheet.Name = CommandButton1.Caption Then
            sheet.Visible = True
        End If
    Next sheet
End Sub
不过我更喜欢这个,因为你只需要一个按钮

Private Sub CommandButton1_Click()
    Dim sheet As Worksheet
    For Each sheet In ActiveWorkbook.Sheets
        If sheet.Name <> Environ("USERNAME") Then
            sheet.Visible = False
        End If

        If sheet.Name = Environ("USERNAME") Then
            sheet.Visible = True
        End If
    Next sheet
End Sub

你需要把它正确地放在按钮后面。将按钮插入页面时,右键单击该按钮并指定宏。代码看起来像

Sub Button1_Click()
    Sheets("EMPLOYEE 1").Visible = Not Sheets("EMPLOYEE 1").Visible
End Sub

你的代码对我有用。确切的错误是什么?如果代码的其余部分在同一模块中,则Private将起作用。为True,但未提供其他上下文。如果在同一模块中的代码中更改员工姓名,如何创建单独的按钮来分别隐藏/取消隐藏每个选项卡?我已编辑了答案-希望有帮助。查看其他一些答案,使您的代码更加健壮,例如检查工作表是否确实存在,等等。我尝试的是在主选项卡上为每个员工添加一个按钮,以便员工可以取消隐藏,然后对其他人隐藏他们的选项卡。我已经尝试了上面的代码,但没有任何效果。开发者选项卡->插入->表单控制->按钮->然后绘制按钮。然后出现分配宏屏幕,显示按钮N\u单击,其中N是一个数字。单击“新建”,然后再次粘贴代码N是它提供给您的数字。不要实际使用N。将N替换为按钮编号子按钮N\u单击SheetsEMPLOYEE 1。Visible=不使用SheetsEMPLOYEE 1。Visible End SubI创建了一个Employee 1工作表,工作正常。