Visualizzare o hide righe in un foglio excel sobject al valore di una cella particolare (excel 2007 & Windows 7)

Ho fatto un foglio di calcolo per specificare le selezioni decorative da una serie di opzioni standard.

Ci sono cinque intervalli separati quindi questa è la prima selezione, quindi all'interno di ciascuna gamma ci sono ulteriori selezioni.

Allora all'inizio del mio foglio ho usato un 'frame' e cinque 'pulsanti di radio' e ho collegato questa selezione alla cella P1 .

Quindi, una volta effettuata questa selezione, voglio hide varie righe e mostro solo le selezioni relative a quella prima selezione (righe 10-19 rilevanti per l'intervallo 1, righe 20-29 relative alla gamma 2 ecc.).

Di seguito è il mio codice, ma non fa nulla quando cambio le selezioni del button di scelta rapida (posso vedere che il valore della cella P1 cambia come previsto).

 Sub HideShow() ' ' HideShow Macro ' Show only the selection pane assocated to the Design line selection If Range("P1").Value = 1 Then 'Decoration Range A Rows("10:19").Select Selection.EntireRow.Hidden = False Rows("20:59").Select Selection.EntireRow.Hidden = True ElseIf Range("P1").Value = 2 Then 'Decoration Range B Rows("10:19").Select Selection.EntireRow.Hidden = True Rows("20:29").Select Selection.EntireRow.Hidden = False Rows("30:59").Select Selection.EntireRow.Hidden = False ElseIf Range("P1").Value = 3 Then 'Decoration Range C Rows("10:29").Select Selection.EntireRow.Hidden = True Rows("30:39").Select Selection.EntireRow.Hidden = False Rows("40:59").Select Selection.EntireRow.Hidden = False ElseIf Range("P1").Value = 4 Then 'Decoration Range D Rows("10:39").Select Selection.EntireRow.Hidden = True Rows("40:49").Select Selection.EntireRow.Hidden = False Rows("50:59").Select Selection.EntireRow.Hidden = False ElseIf Range("P1").Value = 5 Then 'Decoration Range E Rows("10:49").Select Selection.EntireRow.Hidden = True Rows("50:59").Select Selection.EntireRow.Hidden = False End If End Sub 

So che probabilmente non ho bisogno veramente della selezione finale (se non è A, B, C o D, allora può essere solo E), ma ho solo messo in per ordinanza.

Ho anche provato con il valore della cella come text ElseIf Range("P1").Value = "5" Then... ma nessuna gioia anche lì.

Qualsiasi guida apprezzata.

Se si desidera che il codice venga eseguito su una selezione di pulsanti, è necessario call la macro con il button di opzione oppure è necessario che la macro sia sottoprogramma sub worksheet_change () per eseguire le modifiche di foglio di lavoro.

Il codice stesso funziona bene. Ci sono modi migliori per farlo, ma non c'è niente di sbagliato con il tuo codice.

Mettere questo nella VBA per il foglio che stai lavorando con:

 Private Sub worksheet_change(ByVal Target As Range) ' ' HideShow Macro ' Show only the selection pane assocated to the Design line selection If Not Intersect(Target, Cells(1, 16)) Is Nothing Then If Range("P1").Value = 1 Then 'Decoration Range A Rows("10:19").Select Selection.EntireRow.Hidden = False Rows("20:59").Select Selection.EntireRow.Hidden = True ElseIf Range("P1").Value = 2 Then 'Decoration Range B Rows("10:19").Select Selection.EntireRow.Hidden = True Rows("20:29").Select Selection.EntireRow.Hidden = False Rows("30:59").Select Selection.EntireRow.Hidden = False ElseIf Range("P1").Value = 3 Then 'Decoration Range C Rows("10:29").Select Selection.EntireRow.Hidden = True Rows("30:39").Select Selection.EntireRow.Hidden = False Rows("40:59").Select Selection.EntireRow.Hidden = False ElseIf Range("P1").Value = 4 Then 'Decoration Range D Rows("10:39").Select Selection.EntireRow.Hidden = True Rows("40:49").Select Selection.EntireRow.Hidden = False Rows("50:59").Select Selection.EntireRow.Hidden = False ElseIf Range("P1").Value = 5 Then 'Decoration Range E Rows("10:49").Select Selection.EntireRow.Hidden = True Rows("50:59").Select Selection.EntireRow.Hidden = False End If End If End Sub 

Ma, lo farei così:

 Private Sub worksheet_change(ByVal Target As Range) ' ' HideShow Macro ' Show only the selection pane assocated to the Design line selection If Not Intersect(Target, Range("p1")) Is Nothing Then On Error Resume Next ActiveSheet.Cells.EntireRow.Hidden = False If Range("P1") = 1 Then 'Decoration Range A Rows("20:59").Hidden = True ElseIf Range("P1") = 2 Then 'Decoration Range B Rows("10:19").Hidden = True ElseIf Range("P1") = 3 Then 'Decoration Range C Rows("10:29").Hidden = True ElseIf Range("P1") = 4 Then 'Decoration Range D Rows("10:39").Hidden = True ElseIf Range("P1") = 5 Then 'Decoration Range E Rows("10:49").Hidden = True End If End If End Sub