PDA

View Full Version : Hide an Excel sheet



Tomfoolery
07-10-2025, 09:57 PM
How to completely hide an Excel sheet — the VeryHidden method is not secure because the VBA project password can be hacked.


Thanks!

arnelgp
07-11-2025, 03:26 AM
if you need robust protection of your VBA, use commercial third party tools.
Copilot have some suggestions:

If you're serious about locking down your Excel VBA code, Arnel, there are a few standout commercial tools that go far beyond simple password protection. Here’s a breakdown of the top contenders:
��️ 1. XLS Padlock

What it does: Compiles your VBA code into bytecode and embeds it in a protected workbook.

Key features:


Prevents access to the VBA editor entirely

Converts macros into binary code (not just obfuscation)

Supports licensing, activation keys, and trial versions


Best for: Developers distributing Excel-based applications who want strong protection without leaving the VBA ecosystem.

�� Explore XLS Padlock

�� 2. DoneEx VBA Compiler for Excel

What it does: Translates your VBA code into C-language and compiles it into a native Windows DLL.

Key features:


Highest level of protection — code is completely removed from the workbook

Supports trial/demo versions and registration keys

Boosts performance for some VBA routines


Best for: Advanced users who want impenetrable protection and are comfortable with DLL integration.

�� Check out DoneEx VBA Compiler

��️*��️ 3. Unviewable+

What it does: Makes your VBA project permanently unviewable in the editor.

Key features:


Multiple protection levels (Simple to Ultimate)

Multi-layer protection for add-ins

Easy to use interface


Best for: Quick protection without compilation; ideal for Excel add-ins and templates.

�� Learn about Unviewable+

Aussiebear
07-11-2025, 04:21 AM
Actually 'Tom Foolery' , Im guessing that you all ready knew this like almost all users of excel, but you somehow wanted other to think you are an idiot. Congratulations for being the prime suspect

medarda
07-15-2025, 02:04 AM
How to completely hide an Excel sheet — the VeryHidden method is not secure because the VBA project password can be hacked.
Thanks!

I recommend moving the sensitive logic or data into a compiled .xlam add-in. You can protect the add-in's code better and only expose functions through controlled interfaces. It's much harder to reverse engineer a compiled add-in than a standard workbook.

Aussiebear
07-15-2025, 04:18 AM
You could for example hide a worksheet by having the workbook read data from another workbook either open or closed There are two common scenarios:
If the source workbook is already open, VBA can easily access its sheets directly.




Sub HideSheetsBasedOnOpenWorkbook()
Dim srcWB As Workbook
Dim wsName As String
Dim i As Long
' Set reference to the open workbook
Set srcWB = Workbooks("SourceWorkbook.xlsx") ' Change name as needed
' Loop through list of sheet names in column A of Sheet1
With srcWB.Sheets("Sheet1")
i = 1
Do While .Cells(i, 1).Value <> ""
wsName = .Cells(i, 1).Value
On Error Resume Next
ThisWorkbook.Sheets(wsName).Visible = xlSheetVeryHidden
On Error GoTo 0
i = i + 1
Loop
End With
End Sub

If the source workbook is closed, you can still read from it using ADO or Excel formulas. Here's an ADO example:

Add a reference: Tools > References > Microsoft ActiveX Data Objects x.x Library.
File must not be password-protected or filtered.


Sub HideSheetsFromClosedWorkbook()
Dim cn As Object, rs As Object
Dim wbPath As String
Dim sql As String
Dim sheetName As String
wbPath = "C:\Path\To\Your\SourceWorkbook.xlsx" ' <<-- Update this
' Setup connection
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & wbPath & ";" & "Extended Properties='Excel 12.0 Xml;HDR=YES';"
sql = "SELECT [Sheet1$].[SheetName] FROM [Sheet1$]"
rs.Open sql, cn
Do Until rs.EOF
sheetName = rs.Fields(0).Value
On Error Resume Next
ThisWorkbook.Sheets(sheetName).Visible = xlSheetVeryHidden
On Error GoTo 0
rs.MoveNext
Loop
rs.Close: cn.Close
Set rs = Nothing: Set cn = Nothing
End Sub


Again, a reasonably competent person will overcome this issue in time.

You can prompt the User to choose the source workbook at runtime. This makes your code dynamic and user-friendly, with no hardcoding of the name required. This concept will fail if there's a requirement to multi read from the source workbook.


Sub HideSheets_FromUserSelectedWorkbook()
Dim srcWB As Workbook
Dim fd As FileDialog
Dim filePath As String
Dim wsName As String
Dim i As Long
' Ask user to select the source workbook
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Title = "Select Source Workbook"
.Filters.Clear
.Filters.Add "Excel Files", "*.xls; *.xlsx; *.xlsm; *.xlsb"
.AllowMultiSelect = False
If .Show <> -1 Then Exit Sub ' User cancelled
filePath = .SelectedItems(1)
End With
' Open the source workbook read-only
Set srcWB = Workbooks.Open(filePath, ReadOnly:=True)
' Loop through list of sheet names in column A of Sheet1
With srcWB.Sheets(1) ' or use .Sheets("Sheet1")
i = 1
Do While .Cells(i, 1).Value <> ""
wsName = Trim(.Cells(i, 1).Value)
On Error Resume Next
ThisWorkbook.Sheets(wsName).Visible = xlSheetVeryHidden
On Error GoTo 0
i = i + 1
Loop
End With
' Close the source workbook without saving
srcWB.Close SaveChanges:=False
MsgBox "Specified sheets have been hidden based on " & vbCrLf & filePath, vbInformation
End Sub


However, over time a competant person will eventually over come this issue as well. Microsoft clearly made the decision to enhance ease of use over security when the designing things for Excel.