0

必要に応じて少し変更した以下のコードを見つけました。私が抱えている問題は、私が望んでいることを正確に実行しないことです。具体的には、各シートの A1 にドロップダウン メニューがあり、ワークブックの 3 つのシート、配送、注文、および在庫の名前が表示されます。私が達成しようとしているのは、ユーザーが作業中のシートに関係なくドロップダウン メニュー項目を選択すると、関連するシートが表示され、他の 2 つが非表示になることです。

以下のコードは機能しますが、3 つのシートすべてが選択されたドロップダウンで同じシート名を持っている場合にのみ、2 つのシートが非表示になると受け入れられなくなります。これを克服する方法は正確にはわかりませんが、うまくいけば、私よりもはるかに優れている誰かがアドバイスをくれるでしょう.

現在の 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.Name現在のシート (別名、ドロップダウン コントロールが配置されているシート) が表示されたままになるように、if ステートメントの一部を追加しました。

于 2013-10-22T23:08:28.243 に答える
0

3 つのシートすべてを表示して開始し、3 つのシートすべてでこのコードを使用します。

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 に答える