Ukryj i odkryj wiersze w zależności od listy rozwijanej

-1

Mam komórkę (D3) z rozwijanym menu z 8 elementami (wszystkie słowa). W zależności od wybranego elementu rozwijanego chcę ukryć wszystkie pozostałe wiersze bez tego określonego słowa w kolumnie K (11 kolumn od początku).

Potrzebuję również opcji, aby pokazać wszystkie wiersze, jeśli „Wszystkie rzędy”, jeśli jest to wybrane z menu rozwijanego.

Jakieś pomysły na VBA dotyczące wartości z rozwijanego menu komórki?

Ponadto, w jaki sposób powiązać kod VBA z rozwijanym menu po wybraniu?

Dziękuję i doceniam wszelką pomoc.

Czy ten kod wygląda poprawnie? Sub PhaseTargettoStart ()

Dim rMyCell As Set Set rMyCell = Range („D3”) BeginRow = 6 EndRow = 301 ChkCol = 10 If Range („Audit! D3”) = „Wybór źródła” Następnie wiersze („6: 301”). EntireRow.Hidden = Fałszywe

Else
If Range("Audit!D3") = "Source Selection + 4 weeks" Then
Rows("6:301").EntireRow.Hidden = False

Else
If Range("Audit!D3") = "Step 5 + 8 weeks" Then
Rows("6:301").EntireRow.Hidden = False

Else
If Range("Audit!D3") = "TKO" Then
Rows("6:301").EntireRow.Hidden = False

Else
If Range("Audit!D3") = "OTOP" Then
Rows("6:301").EntireRow.Hidden = False

Else
If Range("Audit!D3") = "VP" Then
Rows("6:301").EntireRow.Hidden = False

Else
If Range("Audit!D3") = "Process Audit" Then
Rows("6:301").EntireRow.Hidden = False

Else
If Range("Audit!D3") = "PDR" Then
Rows("6:301").EntireRow.Hidden = False

Else
If Range("Audit!D3") = "PS" Then
Rows("6:301").EntireRow.Hidden = False

Else
If Range("Audit!D3") = "Show All" Then
Rows("6:301").EntireRow.Hidden = True

End If

End Sub
Opie
źródło

Odpowiedzi:

1

Podczas formatowania menu rozwijanego określasz komórkę, w której będzie przechowywany wynik elementu wybranego w menu.

Nazywa się to „linkiem do komórki” i zawsze będzie zawierać liczbę równą pozycji wybranej przez użytkownika na liście menu rozwijanego.

Możesz użyć INDEKSU (), aby uzyskać rzeczywistą wartość pozycji menu (z listy pozycji menu), a ta strona samouczka pokazuje, jak ukryć / odkryć wiersze za pomocą VBA.

Zacznę od tego, ale nie jest to „kod dla mnie”. Musisz zainwestować czas, aby nauczyć się kodować w VBA.

Po pierwsze, musisz poprawnie skonfigurować listę rozwijaną. Na poniższym obrazku skonfigurowałem niektóre dane podobne do twoich z rozwijaną listą (znaną również jako pole kombi).

wprowadź opis zdjęcia tutaj

Tutaj sformatowałem formant i zdefiniowałem Zakres wejściowy (elementy listy) jako A2: A8, a Cell Link jako B2. Kiedy wybieram „Pokaż wszystko” z menu, komórka B2 pokazuje 7, ponieważ „Pokaż wszystko” jest siódmym elementem na liście.

Teraz Twoim zadaniem jest utworzenie podobnej listy rozwijanej i przypisanie do niej tego makra:

Sub ShowHideRows()
'Set up variables
Dim ResultText As String

'Initialize variables
'If choice is "Show All", set ResultText to ABCD, a value that won't be found
'Otherwise, get the text from the list
If Range("B2") = 7 Then
    ResultText = "ABCD"
Else
    ResultText = Application.WorksheetFunction.Index(Range("A2:A7"), Range("B2"))
End If

MsgBox (ResultText)

End Sub

Jeśli zrobisz wszystko poprawnie, to za każdym razem, gdy wybierzesz element z listy, powinieneś zobaczyć komunikat z zaznaczonym elementem listy.

Jeśli musisz dowiedzieć się więcej na temat pisania i debugowania VBA lub przypisywania modułu VBA do kontrolki, skorzystaj z Internetu i zbadaj, jak to zrobić.

Zadawaj pytania, jeśli napotkasz problemy.

Bandersnatch
źródło
Czy ten kod wygląda poprawnie?
Opie
Nie. Jest tu kilka rzeczy nie tak. Powinieneś to zrobić za pomocą pętli, a nie wiązki zagnieżdżonych instrukcji If ... Then. Link do komórki nie może być komórką, w której znajduje się Dropbox. Najpierw sformatuj skrzynkę odbiorczą, klikając na nią klawisz CTRL i wybierz „Kontrola formatu ...” W tym oknie dialogowym określ komórkę, w której będzie przechowywany wynik skrzynki. Załóżmy, że wybrałeś link do komórki na A1, a lista pozycji menu znajduje się w B1: B10. Więcej nadchodzi ...
Bandersnatch