确定可见列数(Microsoft Excel)
Dave在宏中需要一种方法来确定在当前窗口或窗格中可见多少列。
这实际上很容易实现。诀窍是要记住您需要使用属于ActiveSheet对象的VisibleRange对象。您可以将.Columns集合用于VisibleRange对象,然后将.Count方法用于该集合。您最终得到的是以这种方式的列数:
Sub VisibleColCount() Dim sTemp As String sTemp = "There are " sTemp = sTemp & ActiveWindow.VisibleRange.Columns.Count sTemp = sTemp & " columns visible." MsgBox sTemp End Sub
看起来很简单,对吧?问题是.Count方法返回集合中的列数(无论是否隐藏)。例如,假设您查看屏幕,并看到它显示C到H列。这意味着将显示6列,这就是.Count方法在上面的宏中返回的内容。如果您随后隐藏列F,则现在显示列C至I。现在,.Count不再返回6(代表C,D,E,G,H和I列),而是返回7,其中包括隐藏列,即使该列不可见。
解决此问题的方法是检查.Columns集合中每列的.Hidden属性。仅当.Hidden属性为False时,该列才被视为可见,以这种方式:
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
使用此方法还有另外一个难题:就VBA而言,只要显示该列的一小部分,该列就被视为可见。另外,如果您期望在Excel显示屏中使用窗格,则可能需要考虑将ActivePane对象添加到混合中。基本上,需要对上述宏进行简单的更改:
在任何地方看到ActiveWindow对象,都可以使用ActivePane跟随它,类似于:
For Each c In ActiveWindow.ActivePane.VisibleRange.Columns
这样可以确保您的宏在进行计数时仅查看窗口中的当前窗格。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本提示(617)适用于Microsoft Excel 2007、2010、2013和2016。