2013-06-05 65 views
2

這是我第一次使用宏。 我在B2中創建了一個帶有「是」和「否」選項的下拉菜單。根據下拉選擇顯示/隱藏行

  • 如果用戶選擇 「是」,第10個顯示/列11個隱藏
  • 如果用戶選擇 「否」,行11示出/列10個隱藏

我用這個代碼:

Private Sub Worksheet_Change(ByVal Target As Range) 
If Target.Address = "$B$2" Then 
If Range("B2") = Yes Then 
    ActiveSheet.Rows("10:10").EntireRow.Hidden = False 
    ActiveSheet.Rows("11:11").EntireRow.Hidden = True 
ElseIf Range("B2") = No Then 
    ActiveSheet.Rows("10:10").EntireRow.Hidden = True 
    ActiveSheet.Rows("11:11").EntireRow.Hidden = False 
End If 
End If 
End Sub 

我在Sheet1中創建了一個新模塊,並放在那裏。我將excel保存爲啓用宏的模板,但是當我更改下拉列表時,沒有任何反應。

感謝您的幫助!

回答

2
If Range("B2") = "Yes" Then 

,同樣與「否」選項

+0

謝謝,我剛纔已經想通了:)。喬西,有沒有辦法隱藏一行給它分配一個變量名?我注意到如果我有一個宏腳本插入一個新行,那麼'Rows(「10:10」)'不再是正確的行 - 因爲所有的爭用已經被移除了。 – pufAmuf

+1

是的,你可以在第10行命名一個單元格,然後使用'range(「range_name」)。EntireRow.Hidden = False'例如 – JosieP

+0

謝謝!我想我已經知道了。現在,我得到一個RUNTIME錯誤1004.對象'_Worksheet'失敗'的'範圍'的方法。以下是我使用的代碼:http://jsfiddle.net/tG5X3/ – pufAmuf

2

幫自己一個大忙,並在的VBA代碼每個模塊你寫的頂部寫Option Explicit的習慣得到。

我已添加評論以及解釋您所需的修訂。

'this requires you to dimension all variables 
'when you used '= yes' VBA thought you were saying 
'the same as, = aVariable 
Option Explicit 

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Address = "$B$2" Then 
     If Range("B2").Value = "Yes" Then 
      'You can reference the row directly on the same sheet 
      'and do not need ActiveSheet 
      Rows("10:10").EntireRow.Hidden = False 
      Rows("11:11").EntireRow.Hidden = True 
     ElseIf Range("B2").Value = "No" Then 
      Rows("10:10").EntireRow.Hidden = True 
      Rows("11:11").EntireRow.Hidden = False 
     End If 
    End If 
End Sub 

也知道這只是用 「是」 - 用 「是」 或 「YES」 可能會有問題。您可以按如下方式使用UCase方法,如果你想避免這些情況在未來:

 If UCase(Range("B2").Value) = "YES" Then 
相關問題