有沒有辦法確定Excel工作簿是否使用VBA隱藏工作表和/或隱藏單元格?謝謝!使用VBA查找隱藏工作表(和隱藏單元格)
3
A
回答
8
您可以循環檢查worksheet.visible和range.hidden屬性的工作表,列和行。下面是一些快速和骯髒的代碼,將輸出任何隱藏的元素到即時窗口。
Sub FindHidden()
Dim wks As Worksheet
Dim rng As Range
For Each wks In ThisWorkbook.Worksheets
If wks.Visible = xlSheetHidden Then
Debug.Print "Worksheet: " & wks.Name & " is hidden."
ElseIf wks.Visible = xlSheetVeryHidden Then
Debug.Print "Worksheet: " & wks.Name & " is very hidden."
End If
For Each rng In wks.UsedRange.Rows
If rng.Hidden = True Then
Debug.Print "Worksheet: " & wks.Name & " Hidden Row: " & rng.Row
End If
Next rng
For Each rng In wks.UsedRange.Columns
If rng.Hidden = True Then
Debug.Print "Worksheet: " & wks.Name & " Hidden Column: " & Left(Replace(rng.Address, "$", ""), 1)
End If
Next rng
Next wks
End Sub
1
另一種選擇是我的(免費)Mappit!插件available here其中突出上測試的每個片
- 隱藏區域(見下文粉色陰影區域),
- 並且還產生互連的片概要列出工作表是如何與分立式連接(無論它們是否是可見,隱藏或非常隱藏)
您的問題促使我查看更新工作表鏈接輸出以顏色突出顯示哪些工作表已隱藏或非常隱藏。
[更新:MappitV1.11更新如下,提供表單可見性信息。現在進一步更新MappitV1.11a爲被隱藏的空表沒有被標記在彙總表]
0
這裏有一個方法,非常類似於Banjoe的,這將返回計算有多少隱藏的圖紙,列和行(假設您不需要關於哪些行的信息以及只需要報告)。
- 注意,使用的行/列中的「UsedRange」意味着計數將不包括行不包含任何數據(但宏會更快結果)/列。
下面是代碼:
Sub HiddenReport()
Application.ScreenUpdating = False
Dim wks As Worksheet
Dim rng As Range
Dim sCount As Long, rCount As Long, cCount As Long
For Each wks In ThisWorkbook.Worksheets
If wks.Visible = xlSheetHidden Then sCount = sCount + 1
If wks.Visible = xlSheetVeryHidden Then sCount = sCount + 1
For Each rng In wks.Rows ' or wks.UsedRange.Rows
If rng.Hidden = True Then rCount = rCount + 1
Next
For Each rng In wks.Columns ' or wks.UsedRange.Columns
If rng.Hidden = True Then cCount = cCount + 1
Next
Next
Application.ScreenUpdating = True
MsgBox sCount & " hidden sheets found." & vbLf & _
rCount & " hidden rows found." & vbLf & _
cCount & " hidden columns found."
End Sub
請注意,您還可以使用「檢查文檔」功能在Excel中看到,如果一個文檔隱藏的工作表/行/列。
2
我將下面的過程保存在我的Personal.xls文件中,並在快速訪問工具欄上有一個按鈕來運行它。它在彈出式對話框中顯示所有隱藏的工作表和非常隱藏的工作表,還可讓您取消隱藏單個工作表或全部隱藏,全部隱藏或全部隱藏。
這不顯示隱藏的單元格/行/列,但對於查找和取消隱藏工作表非常有用。我使用上面提到的Dave的Mappit Addin進行更詳細的分析。
代碼如下:
Sub UnHideStuff()
'----------------------------------------------------------------------------
' UnHideStuff Macro
' Written by ProdOps
' 13-Feb-2010
'
' Provides an input dialog box that displays the names of all Hidden and all
' VeryHidden worksheets in the workbook and allows the user to enter the
' name of the worksheet they want to unhide.
' * will unhide all Veryhidden sheets
' ** will unhide all Hidden sheets.
' *** will unhide all worksheets in the workbook
'
'----------------------------------------------------------------------------
Dim Message As String
Dim Title As String
Dim Default As String
Dim myValue As String
Dim myList As String
Dim Sheetnum As Long
'Build a list of VeryHidden Sheets
myList = "'INVISIBLE WORKSHEET NAMES(*)':"
For Sheetnum = 1 To Sheets.Count
If Sheets(Sheetnum).Visible = 2 Then
myList = myList & vbCrLf & " " & Sheets(Sheetnum).Name
End If
Next Sheetnum
If myList = "'INVISIBLE WORKSHEET NAMES(*)':" Then
myList = myList & vbCrLf & " No Invisible Sheets in This Workbook"
End If
'Build a list of Hidden Sheets
myList = myList & vbCrLf & vbCrLf & "'HIDDEN WORKSHEET NAMES(**)':"
For Sheetnum = 1 To Sheets.Count
If Sheets(Sheetnum).Visible = 0 Then
myList = myList & vbCrLf & " " & Sheets(Sheetnum).Name
End If
Next Sheetnum
If Right(myList, 11) = "NAMES(**)':" Then
myList = myList & vbCrLf & " No Hidden Sheets in This Workbook"
End If
'Build the Textbox Message & Title
Message = "Enter the 'Name' of the WorkSheet to Unhide" & vbCrLf
Message = Message & "Or * - All Invisible, ** - All Hidden, *** - All" & vbCrLf & vbCrLf
Message = Message & myList
Title = "Unhide Hidden Worksheets"
Default = ""
'Display the Message Box and retrive the user's input
myValue = InputBox(Message, Title, Default)
'Test the value entered by the user
If myValue = "" Then Exit Sub 'User pressed CANCEL
If myValue = "*" Then 'User wants all the VeryHidden sheets displayed
For Sheetnum = 1 To Sheets.Count
If Sheets(Sheetnum).Visible = 2 Then Sheets(Sheetnum).Visible = True
Next Sheetnum
GoTo NormalExit
End If
If myValue = "**" Then 'User wants all the Normal Hidden sheets displayed
For Sheetnum = 1 To Sheets.Count
If Sheets(Sheetnum).Visible = 0 Then Sheets(Sheetnum).Visible = True
Next Sheetnum
GoTo NormalExit
End If
If myValue = "***" Then 'User wants all worksheets displayed
For Sheetnum = 1 To Sheets.Count
Sheets(Sheetnum).Visible = True
Next Sheetnum
GoTo NormalExit
End If
On Error GoTo ErrorTrap
Sheets(myValue).Visible = xlSheetVisible
Sheets(myValue).Select
Range("A1").Select
NormalExit:
Exit Sub
ErrorTrap:
If Err = 9 Then
MsgBox "Either the Worksheet Does Not Exist or " & vbCrLf & "the Worksheet Name was Misspelled", vbCritical, "Worksheet Not Found"
Err.Clear
Call UnHideStuff
End If
End Sub
+0
嘿傑瑞! - 歡迎:) – brettdj
相關問題
- 1. 隱藏/取消隱藏工作表 - VBA
- 2. 如何使用VBA隱藏工作表?
- 3. 隱藏工作簿/工作表Excel VBA
- 4. 如何隱藏/取消隱藏特定表格單元格/行
- 5. 隱藏取消隱藏使用Swift靜態表格視圖單元格
- 6. 通過VBA隱藏excel工作表
- 7. 鍵盤隱藏表格單元格
- 8. 火狐隱藏空表格單元格
- 9. VBA宏隱藏表
- 10. 我的收藏查看單元隱藏
- 11. 查找和隱藏元素(jQuery)
- 12. 使用jQuery查找和隱藏文本
- 13. 隱藏從python取消隱藏表格
- 14. 在Firefox中隱藏/取消隱藏更改單元格大小
- 15. 隱藏/取消隱藏excel中的單元格組按鈕
- 16. J查詢隱藏隱藏
- 17. VBA隱藏/取消隱藏按鈕
- 18. VBScript - 防止用戶取消隱藏隱藏的工作表
- 19. 隱藏/取消隱藏基於單元格範圍的隱藏/未隱藏狀態的行
- 20. Excel VBA工作表事件在隱藏/取消隱藏之間切換
- 21. JavaScript隱藏和顯示錶單元素
- 22. Excel VBA +通過數組範圍隱藏和/或取消隱藏表格
- 23. HTML表格單元格 - 隱藏一個單元格
- 24. 隱藏表格行
- 25. 隱藏表格行
- 26. 如何使用jQuery隱藏空html表格單元格?
- 27. 隱藏錶行是隱藏
- 28. 如何使用VBA從隱藏的工作表中獲取值
- 29. 使用VBA隱藏數據透視表
- 30. 使用VBA if語句用按鈕隱藏/取消隱藏列
+1應該滿足您的需求 – brettdj
感謝 - 這就是我一直在尋找。 – smfoote