Excel VB脚本问题 - 隐藏/显示表格

时间:2013-10-22 23:01:04

标签: excel vba excel-vba

我找到了以下代码,我已根据自己的需要稍作修改。我遇到的问题是它并没有完全符合我的要求。具体来说,我在每张工作表的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

2 个答案:

答案 0 :(得分: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 <> x.Name部分,以确保当前工作表(也就是下拉控件所在的工作表)仍然可见。

答案 1 :(得分:0)

从可见的所有三张纸开始,并在所有三张纸中使用此代码:

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