2013-04-26 72 views
2

這是我的。我正在使用3個值的下拉列表來隱藏列。每個值都具有對其唯一的特定列,並且在選擇某個值時,我需要隱藏與其無關的其他列。我可以只使用worksheet_change作爲特定列嗎?

我用下面的代碼:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Select Case Target.Value 
    Case "Marine" 
     Columns("T:X").EntireColumn.Hidden = True 
     Columns("Z").EntireColumn.Hidden = True 

    Case "Inland" 
     Columns("S").EntireColumn.Hidden = True 
     Columns("U").EntireColumn.Hidden = True 

    Case Else 
     Columns("T:X").EntireColumn.Hidden = False 
     Columns("Z").EntireColumn.Hidden = False 
     Columns("S").EntireColumn.Hidden = False 
     Columns("U").EntireColumn.Hidden = False 
    End Select 
End Sub 

這個工作,當我從下拉菜單中選擇值下降,但只要我點擊工作表,則隱藏列重新出現另一種細胞。我希望能夠在下拉列表中選擇一個值,並使單元格保持隱藏狀態,直到我在下拉列表中選擇另一個值。誰能幫我這個?我試圖使用WorkSheet_SelectionChange,但這不起作用。

回答

1

在代碼的開始處添加此代碼(您需要對其進行調整),以檢查單擊的範圍,並最終在用戶單擊特殊範圍之外時終止該子範圍。

Dim isect As Range 
Set isect = Intersect(Target, Me.Range("$a$8:$a$48")) 
If isect Is Nothing Then Exit Sub 

你也可以查看地址:

If Target.Range Like "$X$*" Then... 

更新:
在另一方面,如果列必須根據您在列中單擊顯示/隱藏例如,A,我寧願使用SelectionChange事件。以下是一個示例:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
     Dim isect As Range 
     Set isect = Intersect(Target, Me.Range("$a$8:$a$48")) 
     If Not isect Is Nothing Then 
      select case Target.Value 
       ..... 
      end select 
     End If 
    End Sub 
+0

嗨@iDevlop感謝您的回覆。下拉工作,但當我點擊任何其他單元然後顯示隱藏的列。即使點擊其他單元格,我也希望列保持隱藏狀態。 – 2013-04-26 16:28:06

+0

嘿@iDevlop,你能幫我解決這個問題嗎?你之前的回答非常接近我想要做的。 – 2013-04-30 08:40:37

+0

我可以嘗試...繼續。不知道我能立即回答,因爲我還必須工作一點:-)並被其他事情打斷,但是去 – 2013-04-30 09:35:59

1

我認爲問題是您的Case Else聲明。當您轉到其他單元格時將觸發工作表更改事件,並且由於該值既不是「Marine」也不是「Inland」,因此將執行該語句並將所有列設置爲Hidden = False

由於您在下拉菜單中有3個選項,因此只需要明確聲明第三個Case語句而不是全部包含。

+0

嗨@Jay。我使用'Case Else'來確保如果沒有選擇單元格,則所有單元都不會被隱藏。我怎樣才能確保在沒有選擇所有單元格出現時?我很感激幫助。 – 2013-04-30 08:46:07

2

用Target.Address包裝代碼。

例如,下拉是在Cell「B2」然後, 代碼將如下所示:

If Target.Address(True, True) = "$B$2" Then 
    Select Case Target.Value 
    Case "Marine" 
     Columns("T:X").EntireColumn.Hidden = True 
     Columns("Z").EntireColumn.Hidden = True 

    Case "Inland" 
     Columns("S").EntireColumn.Hidden = True 
     Columns("U").EntireColumn.Hidden = True 

    Case Else 
     Columns("T:X").EntireColumn.Hidden = False 
     Columns("Z").EntireColumn.Hidden = False 
     Columns("S").EntireColumn.Hidden = False 
     Columns("U").EntireColumn.Hidden = False 
    End Select 
End If 

此外,猜測代碼的目的,我已經調整了進一步它。 簡化版本如下所示:

If Target.Address(True, True) = "$B$2" Then 
    Select Case Target.Value 
    Case "Marine" 
     Columns("S:Z").EntireColumn.Hidden = False 
     Columns("T:X").EntireColumn.Hidden = True 
     Columns("Z").EntireColumn.Hidden = True 
    Case "Inland" 
     Columns("S:Z").EntireColumn.Hidden = False 
     Columns("S").EntireColumn.Hidden = True 
     Columns("U").EntireColumn.Hidden = True 

    Case Else 
     Columns("S:Z").EntireColumn.Hidden = False 
    End Select 
End If 
+0

嗨@Aditya Deo,謝謝你的回覆。下拉列表在整個列上。在這種情況下,我將如何使用範圍? – 2013-04-26 15:48:29

+0

此外,在隱藏列後,我還想更改其他下拉列表中的值。而且即使在我改變列中的下拉列表時,這些值也應該保持不變。這可能嗎? – 2013-04-27 12:24:21

1

查看此代碼。

Private Sub Worksheet_Change(ByVal Target As Range) 
Select Case Target.Column 

Case 2 

    If Target.Value = "Marine" Then 

     Columns("S").EntireColumn.Hidden = False 
     Columns("U").EntireColumn.Hidden = False    
     Columns("T:X").EntireColumn.Hidden = True 
     Columns("Z").EntireColumn.Hidden = True 

    ElseIf Target.Value = "Inland" Then 

     Columns("S").EntireColumn.Hidden = True 
     Columns("U").EntireColumn.Hidden = True 
     Columns("T:X").EntireColumn.Hidden = False 
     Columns("Z").EntireColumn.Hidden = False 
    Else 

     Columns("T:X").EntireColumn.Hidden = False 
     Columns("Z").EntireColumn.Hidden = False 
     Columns("S").EntireColumn.Hidden = False 
     Columns("U").EntireColumn.Hidden = False 

    End If 

End Select 

End Sub 

立即在選擇的情況下的碼的第4行,得到在其中具有在片材啓用下拉菜單或驗證,在給定的情況下,它2的列數的列數,代表'B'欄,和Boom!

我根據過去在您的代碼中的經驗做了一些修正。假設對於海洋蔘賽作品必須在'S'欄和'U'欄中進行,並且島項應在'T'和'Z'欄中進行。

在您的原始代碼中,如果您先在特定的項目中選擇了「Marine」,並且稍後將其更正爲「Island」,那麼只會隱藏所有必需的列,但您會擁有希望Island列不被隱藏(可能會輸入這些字段中的數據),我現在已經糾正了這些問題。

+0

嗨彩信,謝謝你的回覆,但我得到一個錯誤,因爲我的選擇案例沒有結束選擇。它不希望我在代碼後的任何地方添加它! – 2013-04-27 18:41:52

+0

@PeterKhayundi代碼適合我!將所有代碼完全粘貼在您擁有數據的工作表中。 – MeenakshiSundharam 2013-05-03 13:47:28

相關問題