2013-06-05 3 views
2

Это первый раз, когда я работаю с макросами. Я создал выпадающий список в В2 с опциями «Да» и «Нет».Показать/скрыть строки в зависимости от выбора выпадающего списка

  • Если пользователь выбирает "Да", строка 10 передач/Row 11 Шкуры
  • Если пользователь выбирает "Нет", строка 11 передач/Row 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 

I Создал новый модуль в Sheet1 и разместил его там. Я сохранил excel как Макроопределенный шаблон татуировки, однако ничего не происходит, когда я изменяю выпадающий список.

Благодарим за помощь!

ответ

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

и точно так же с «Нет» вариант

+0

Спасибо, я просто понял это :). Джози, есть ли способ скрыть строку, присваивающую ей имя переменной? Я заметил, что если у меня есть сценарий макроса, вставьте новую строку, тогда 'Строки (« 10:10 »)' больше не являются правильной строкой, так как все соперники были перемещены вниз. – pufAmuf

+1

да, вы можете назвать ячейку в строке 10, а затем использовать 'range (" range_name "). EntireRow.Hidden = False' например – JosieP

+0

Спасибо! Я думаю, что я получил его. Прямо сейчас, я получаю ошибку RUNTIME 1004. 'Метод 'Range' объекта '_Worksheet' Failed'. Вот код, который я использую: http://jsfiddle.net/tG5X3/ – pufAmuf

2

Сделайте себе огромную пользу и получить в привычку писать Option Explicit в верхней части каждого модуля VBA код, который вы пишете.

Я добавил комментарии и объяснил ваши необходимые изменения.

'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 
Смежные вопросы