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。