2016-03-28 53 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