Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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
Vba Excel VB脚本问题-隐藏/显示工作表_Vba_Excel - Fatal编程技术网

Vba Excel VB脚本问题-隐藏/显示工作表

Vba Excel VB脚本问题-隐藏/显示工作表,vba,excel,Vba,Excel,我发现下面的代码,我已经稍微修改了我的需要。我遇到的问题是它不能完全满足我的需求。具体地说,我在每张工作表的A1中都有一个下拉菜单,其中有三张工作表的名称,即我的工作簿中的发货、订单和库存。我试图做到的是,每当用户选择一个下拉菜单项时,不管他们在哪个工作表中工作,都会显示相关的工作表,而隐藏另外两个工作表 下面的代码有效,但仅当所有三张图纸在所选下拉列表中具有相同的图纸名称时有效,当两张图纸被隐藏时,这将变得不可用。我不确定如何克服这个问题,但希望这里比我更好的人能给我一些建议 当前VB代码:

我发现下面的代码,我已经稍微修改了我的需要。我遇到的问题是它不能完全满足我的需求。具体地说,我在每张工作表的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

这是您的代码,适合灵活性。这将隐藏任何不等于目标值的图纸,并取消隐藏不等于目标值的图纸

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
Private子工作表\u更改(ByVal目标作为范围)
将ws设置为工作表
将x标注为工作表
Set x=Excel.ActiveSheet
对于Excel.ActiveWorkbook.Worksheets中的每个ws
如果Trim(ws.Name)Trim(Target.Value)和ws.Name x.Name,那么
ws.Visible=xlSheetHidden
其他的
ws.Visible=xlSheetVisible
如果结束
下一个ws
端接头
如果您想知道
Trim()
命令,它会从字符串值中删除前导空格和尾随空格。有时很难在工作表名称中找到这些名称:)

编辑
我在if语句中添加了
ws.Name x.Name
部分,以确保当前工作表(即下拉控件所在的工作表)保持可见

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

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