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