Показване/скриване на редове за избор от падащо меню

Намерих код онлайн като пример, който съм променил, за да показва или скрива конкретни редове в зависимост от избора, който избирам в падащо меню в моя Excel файл.

Макросът не работи, независимо какво опитвам.

Моят код е както следва (също прикачена екранна снимка на редове под въпрос 2 (2a - 2d), които не се показват/скриват) Екранна снимка на Excel Doc

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$F$13" Then
If Range("F13").Value = "Yes" Then
Rows("14:17").EntireRow.Hidden = False
End If

If Range("F13").Value = "No" Then
Rows("14:17").EntireRow.Hidden = True
End If

If Range("F13").Value = " " Then
Rows("14:17").EntireRow.Hidden = True
End If
End Sub

person Jewls567    schedule 01.02.2016    source източник
comment
В момента вашият код трябва да работи, ако A) Този код е в работния лист, на който искате да се изпълнява (щракнете с десния бутон върху раздела на листа и отидете на Преглед на кода, този код трябва да е там), B) Клетката, която се променя, е F13. Какъв е вашият F13, валидиране на данни? Очаквате редът да бъде скрит, ако F13 е Не или [интервал], нали?   -  person BruceWayne    schedule 01.02.2016


Отговори (2)


Липсва End If. Предполагам, че стойността на целевата клетка (F13) трябва да бъде тествана за нейната стойност. Ако стойността е "Да", трябва да покаже ред 14:17, ако е " " (интервал), трябва да ги скрие и ако е "Не", също трябва да ги скрие. Други стойности няма да повлияят на скриването/показването на скриването на редовете. Трябва да има втори End If преди End Sub, така че всички оператори if по-горе да бъдат обвити в проверката на адреса.

Също така имайте предвид, че този код трябва да бъде поставен в самия работен лист, тъй като искате да се свържете със събитието Worksheet_Change.

Опитайте това в модул на работен лист:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$F$13" Then 'Check if the changed value is indeed in F13

    If Target.Value = "Yes" Then
        ActiveSheet.Rows("14:17").EntireRow.Hidden = False 'Show the rows if the value is Yes
    ElseIf Target.Value = "No" Then
        ActiveSheet.Rows("14:17").EntireRow.Hidden = True 'Hide them when it's No
    ElseIf Target.Value = " " Then
        ActiveSheet.Rows("14:17").EntireRow.Hidden = True 'Or space
    End If

End If
End Sub

Други забележки:

  • Вместо ActiveSheet можете също да използвате Me (Me.Rows...) В този сценарий те вероятно правят същото. Въпреки това, ако промените стойността на работен лист от друг работен лист (напр. формула, която преизчислява), Me ще се позовава на променения работен лист, който задейства събитието, докато activeworksheet ще засегне текущия активен лист.
  • Използвайте Target вместо да препращате отново към Range. Target е обект от диапазон, който вече е в паметта. Следователно изпълнението ще бъде по-бързо в сравнение с повторното влизане в работния лист.
person Rik Sportel    schedule 01.02.2016
comment
Благодаря ви много, това наистина помогна и кодът вече работи правилно в работния лист! Преместих кода от работната книга в Sheet1 (ясно ви показва колко съм по-голям;) и добавих всички предложени редакции заедно с допълнителния липсващ ред End If. Аз наистина го оценявам! - person Jewls567; 01.02.2016

Това е добър пример за правилно предназначение на вашия код, който ви помага да идентифицирате проблем. Липсва ви оператор End IF. Опитайте тази:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$F$13" Then
    If Range("F13").Value = "Yes" Then
        Rows("14:17").EntireRow.Hidden = False
    End If

    If Range("F13").Value = "No" Then
      Rows("14:17").EntireRow.Hidden = True
    End If

    If Range("F13").Value = " " Then
        Rows("14:17").EntireRow.Hidden = True
    End If
End If
End Sub

Може също да искате да използвате:

If Range("F13").Value = ""

вместо

If Range("F13").Value = " "
person sous2817    schedule 01.02.2016
comment
Благодаря ви много за помощта, това ме върна на правилния път и ми помогна да накарам кода да работи! :) - person Jewls567; 01.02.2016