0

我发现下面的代码根据我的需要做了一些修改。我遇到的问题是它不完全符合我的要求。具体来说,我在每张工作表的 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
4

2 回答 2

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()命令,它会从字符串值中删除前导和尾随空格。这些有时很难在工作表名称中发现:)

编辑

我添加了ws.Name <> x.Nameif 语句的一部分以确保当前工作表(也就是下拉控件所在的工作表)保持可见。

于 2013-10-22T23:08:28.243 回答
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
于 2013-10-22T23:14:33.773 回答