【问题标题】:Excel VB Script Issue - Hide/Show SheetsExcel VB 脚本问题 - 隐藏/显示工作表
【发布时间】:2013-10-23 14:30:42
【问题描述】:

我找到了以下代码,我根据自己的需要稍作修改。我遇到的问题是它不完全符合我的要求。具体来说,我在每张工作表的 A1 中有一个下拉菜单,其中包含我的工作簿中的三个工作表、运输、订单和库存的名称。我想要完成的是,每当用户选择一个下拉菜单项,而不管他们正在使用的工作表是什么,都会显示相关的工作表而隐藏其他两个工作表。

以下代码有效,但前提是所有三个工作表在所选下拉列表中具有相同的工作表名称,当两个工作表被隐藏时,这将变得站不住脚。我不完全确定如何克服这个问题,但希望在这方面比我做得更好的人能给点建议。

当前的 VB 代码:

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Value = "Shipping" Then
        Sheets("Shipping").Visible = True
        Sheets("Orders").Visible = False
        Sheets("Inventory").Visible = False

    ElseIf Target.Value = "Orders" Then
        Sheets("Orders").Visible = True
        Sheets("Shipping").Visible = False
        Sheets("Inventory").Visible = False

    ElseIf Target.Value = "Inventory" Then
        Sheets("Inventory").Visible = True
        Sheets("Shipping").Visible = False
        Sheets("Orders").Visible = False

    End If
End Sub

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    这是您的代码适应灵活性。这将隐藏任何不等于您的目标值的工作表,并取消隐藏确实等于您的目标值的工作表。

    Private Sub Worksheet_Change(ByVal Target As Range)
    
    Dim ws As Worksheet
    Dim x As Worksheet
    Set x = Excel.ActiveSheet
    
    For Each ws In Excel.ActiveWorkbook.Worksheets
        If Trim(ws.Name) <> Trim(Target.Value) and ws.Name <> x.Name Then
            ws.Visible = xlSheetHidden
            Else
            ws.Visible = xlSheetVisible
        End If
    Next ws
    
    End Sub
    

    如果您想知道Trim() 命令,它会从字符串值中删除前导和尾随空格。这些有时很难在工作表名称中发现:)

    编辑

    我在 if 语句中添加了ws.Name &lt;&gt; x.Name 部分,以确保当前工作表(也就是下拉控件所在的工作表)保持可见。

    【讨论】:

      【解决方案2】:

      从所有三个可见的工作表开始,并在所有三个工作表中使用此代码:

      Private Sub Worksheet_Change(ByVal Target As Range)
      If Target.Value = "Shipping" Then
          Sheets("Shipping").Visible = True
          Sheets("Shipping").Select
          Sheets("Orders").Visible = False
          Sheets("Inventory").Visible = False
      
      ElseIf Target.Value = "Orders" Then
          Sheets("Orders").Visible = True
          Sheets("Orders").Select
          Sheets("Shipping").Visible = False
          Sheets("Inventory").Visible = False
      
      ElseIf Target.Value = "Inventory" Then
          Sheets("Inventory").Visible = True
          Sheets("Inventory").Select
          Sheets("Shipping").Visible = False
          Sheets("Orders").Visible = False
      
      End If
      End Sub
      

      【讨论】:

        猜你喜欢
        • 2013-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多