Bestimmen der Anzahl der sichtbaren Spalten (Microsoft Excel)
Dave benötigt in einem Makro eine Möglichkeit, um zu bestimmen, wie viele Spalten im aktuellen Fenster oder Bereich sichtbar sind.
Dies ist eigentlich recht einfach zu erreichen. Der Trick besteht darin, sich daran zu erinnern, dass Sie mit dem VisibleRange-Objekt arbeiten müssen, das zum ActiveSheet-Objekt gehört. Sie können die .Columns-Auflistung für das VisibleRange-Objekt verwenden und dann die .Count-Methode für diese Auflistung verwenden. Am Ende haben Sie die Anzahl der Spalten auf folgende Weise:
Sub VisibleColCount() Dim sTemp As String sTemp = "There are " sTemp = sTemp & ActiveWindow.VisibleRange.Columns.Count sTemp = sTemp & " columns visible." MsgBox sTemp End Sub
Scheint einfach, oder? Das Problem ist, dass die .Count-Methode die Anzahl der Spalten in der Auflistung zurückgibt, unabhängig davon, ob sie ausgeblendet sind oder nicht. Angenommen, Sie sehen auf den Bildschirm und sehen, dass die Spalten C bis H angezeigt werden. Dies bedeutet, dass 6 Spalten angezeigt werden, und das gibt die .Count-Methode im obigen Makro zurück. Wenn Sie dann Spalte F ausblenden, werden jetzt die Spalten C bis I angezeigt. Anstelle von .Count, das immer noch 6 zurückgibt (was die Spalten C, D, E, G, H und I darstellt), wird jetzt 7 zurückgegeben, einschließlich der ausgeblendeten Spalte, obwohl diese nicht sichtbar ist.
Die Lösung für diese Situation besteht darin, die .Hidden-Eigenschaft jeder Spalte in der .Columns-Auflistung zu überprüfen. Nur wenn die .Hidden-Eigenschaft False ist, sollte die Spalte auf folgende Weise als sichtbar gezählt werden:
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
Bei diesem Ansatz gibt es noch ein weiteres Problem: In Bezug auf VBA wird eine Spalte als sichtbar gezählt, solange nur ein Streifen dieser Spalte angezeigt wird. Wenn Sie vorhaben, Fenster in Ihrer Excel-Anzeige zu verwenden, sollten Sie das ActivePane-Objekt in den Mix aufnehmen. Grundsätzlich ist eine einfache Änderung der obigen Makros erforderlich:
Wenn Sie das ActiveWindow-Objekt sehen, folgen Sie ihm mit ActivePane, ähnlich wie folgt:
For Each c In ActiveWindow.ActivePane.VisibleRange.Columns
Dadurch wird sichergestellt, dass Ihr Makro beim Zählen nur den aktuellen Bereich im Fenster betrachtet.
ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.
Dieser Tipp (617) gilt für Microsoft Excel 2007, 2010, 2013 und 2016.