2016-03-28 54 views
1

有人可以解释我为什么在下面的代码中正好有一个写入工作簿的windows属性。vba窗口(1)属性的工作簿

我在一本书中发现了这个清单,它的目标是统计所有可见的工作簿,我不明白为什么要用括号括起来。 预先感谢您。

Public Function lCountVisibleWorkbooks() As Long 

    Dim lCount As Long 
    Dim wkbBook As Workbook 
    For Each wkbBook In Application.Workbooks 
     If wkbBook.Windows(1).Visible Then 
      lCount = lCount + 1 
     End If 
    Next wkbBook 
    lCountVisibleWorkbooks = lCount 
End Function 

回答

0

在我看来,这是检查每个工作簿的第一个窗口。它希望在采取行动之前查看是否有可见的工作簿。该工作簿可能有多个窗口。这只会检查第一个。

3

可以使用新窗口功能区按钮(在查看选项卡),为工作簿创建额外的窗口:

New Window

Book1 has 4 windows

如果工作簿有4打开的窗口,其Workbooks集合将包含4个项目 - 您可以验证在即时窗格(Ctrl + G):

?ThisWorkbook.Windows.Count 
4 

代码采取-IN-A-书有一个错误:它不会返回可见的工作簿的数量,因为它声称。而是返回窗口1可见的工作簿数量

保持4个窗口打开,隐藏第一个:

ThisWorkbook.Windows(1).Visible = False 

Window1 is hidden now

它仍然存在,并且ThisWorkbook仍然是可见的,......但你的函数会认为该工作簿“无形“因为第一个窗口是隐藏的。


(1)指数,一个 - 这是VBA的用于访问数组或集合中的项目的语法。

Dim items As New Collection 
items.Add "a" 
items.Add "b" 
items.Add "c" 
Debug.Print items(1) 'prints "a" 

WindowsWorkbook对象的集合属性,含有Window对象实例 - 所以wkbBook.Windows(1)正在访问该集合的第一个对象。 (MSDN

请注意,请自己帮忙并放下小写字母l匈牙利语前缀为Long - 匈牙利符号会影响可读性。使用可以发音的标识符名称,并将函数/过程保留在10行以内,不需要错误的助记符来找出什么是什么。

+0

非常感谢您的详细解答。激动人心的阅读它。 – Oliver