Determinazione del numero di colonne visibili (Microsoft Excel)
Dave ha bisogno di un modo, in una macro, per determinare quante colonne sono visibili nella finestra o nel riquadro corrente.
Questo in realtà è abbastanza facile da realizzare. Il trucco sta nel ricordare che è necessario lavorare con l’oggetto VisibleRange, che appartiene all’oggetto ActiveSheet. È possibile utilizzare la raccolta .Columns per l’oggetto VisibleRange e quindi utilizzare il metodo .Count per quella raccolta. Quello che ottieni è il numero di colonne, in questo modo:
Sub VisibleColCount() Dim sTemp As String sTemp = "There are " sTemp = sTemp & ActiveWindow.VisibleRange.Columns.Count sTemp = sTemp & " columns visible." MsgBox sTemp End Sub
Sembra semplice, vero? Il problema è che il metodo .Count restituisce il numero di colonne nella raccolta indipendentemente dal fatto che siano nascoste o meno. Ad esempio, diciamo che guardi lo schermo e vedi che mostra le colonne da C a H. Ciò significa che vengono visualizzate 6 colonne, ed è ciò che il metodo .Count restituisce nella macro sopra. Se poi nascondi la colonna F, ora vengono visualizzate le colonne dalla C alla I. Invece di .Count che restituisce ancora 6 (che rappresentano le colonne C, D, E, G, H e I), ora restituisce 7, che include la colonna nascosta, anche se non è visibile.
La soluzione a questa situazione è controllare la proprietà .Hidden di ogni colonna nell’insieme .Columns. Solo se la proprietà .Hidden è False la colonna deve essere considerata visibile, in questo modo:
Sub VisibleColCount() Dim c As Range Dim iCount As Integer Dim sTemp As String iCount = 0 For Each c In ActiveWindow.VisibleRange.Columns If Not c.Hidden Then iCount = iCount + 1 Next c sTemp = "The active window includes " sTemp = sTemp & ActiveWindow.VisibleRange.Columns.Count sTemp = sTemp & " columns. Of those columns, " If iCount = ActiveWindow.VisibleRange.Columns.Count Then sTemp = sTemp & "all " Else sTemp = sTemp & "only " End If sTemp = sTemp & iCount & " are visible." MsgBox sTemp End Sub
C’è un altro trucco con questo approccio: per quanto riguarda VBA, una colonna viene considerata visibile fintanto che viene mostrata solo una parte di quella colonna. Inoltre, se prevedi di utilizzare i riquadri nella visualizzazione di Excel, potresti prendere in considerazione l’aggiunta dell’oggetto ActivePane nel mix. Fondamentalmente, ci vuole un semplice cambiamento nelle macro precedenti:
Ovunque vediate l’oggetto ActiveWindow, seguitelo con ActivePane, simile a questo:
For Each c In ActiveWindow.ActivePane.VisibleRange.Columns
Ciò garantisce che la macro guardi solo il riquadro corrente nella finestra quando esegue il conteggio.
ExcelTips è la tua fonte di formazione economica su Microsoft Excel.
Questo suggerimento (617) si applica a Microsoft Excel 2007, 2010, 2013 e 2016.