View Single Post
  #18   Report Post  
Posted to microsoft.public.excel.programming
Mike Fogleman Mike Fogleman is offline
external usenet poster
 
Posts: 1,092
Default Is it Possible to Deny Access except to specified

As Dave Peterson pointed out, Excel is an easy nut to crack for those who
really want to. Nothing is truly safe in Excel from those who persist. That
said, the theory behind the Splash sheet is to hide all worksheets except
the Splash, when the workbook closes. If the workbook is opened with macros
disabled, then the Splash sheet is the only one visible and the macro to
unhide the other sheets cannot run. Create a worksheet named "Splash" and if
you want, put "ACCESS DENIED!" in the middle with large font. Once that is
done use the following code in ThisWorkbook module.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim ws As Worksheet

For Each ws In Worksheets
If ws.Name = "Splash" Then
ws.Visible = True
Else
ws.Visible = False
End If
Next
End Sub

Modify the Workbook_Open event as follows:
MsgBox no longer needed.

Private Sub Workbook_Open()
Dim myArray As Variant
Dim arName As String
Dim ws As Worksheet


arName = "MyUsers"
myArray = ThisWorkbook.Names(arName).RefersToRange.Value

With Application
If IsError(.WorksheetFunction.Match(.UserName, myArray, 0)) Then
'MsgBox "You are NOT permitted to Open this File ! !"
Application.DisplayAlerts = False
ThisWorkbook.Close False
Else
For Each ws In Worksheets
ws.Visible = True
Next
Worksheets("Splash").Visible = False
Worksheets("Users").Visible = False
Worksheets("Sheet1").Activate
End If
End With
Application.DisplayAlerts = True
End Sub

Mike F
"Sean" wrote in message
oups.com...
Thanks Mike, it works great. How would I include that it opens on a
Blank Sheet, say Sheet1 if I get the message "You are not permitted"
etc and if you don't it goes to Sheet2 A1

Slight problem I see is that a non-permitted user may see info
displayed on the screen and it won't close until they click ok to the
message


Mike Fogleman wrote:

Right you are! Parentheses wrong order.

Private Sub Workbook_Open()
Dim myArray As Variant
Dim arName As String

arName = "MyUsers"
myArray = ThisWorkbook.Names(arName).RefersToRange.Value

With Application
If IsError(.Match(.UserName, myArray, 0)) Then
MsgBox "You are NOT permitted to Open this File ! !"
Application.DisplayAlerts = False
Application.Quit
Else
End If
End With
End Sub

Mike F
"Sean" wrote in message
oups.com...
Thanks Mike, I'm getting a Syntax error on line
If IsError(.Match(.UserName ), myArray, 0)) Then

Mike Fogleman wrote:

One way is to put the list of users in the workbook somewhere, ie, a
worksheet named "Users" The worksheet can be hidden from view but
easily
accessed to update the list without changing the code. Make the list a
Named
Range like "MyUsers" (not the same as a worksheet name). This list
will
be
added to an array and will be compared to the .UserName of the person
trying
to open the workbook.

Private Sub Workbook_Open()
Dim myArray As Variant
Dim arName As String

arName = "MyUsers"
myArray = ThisWorkbook.Names(arName).RefersToRange.Value

With Application
If IsError(.Match(.UserName ), myArray, 0)) Then
MsgBox "You are NOT permitted to Open this File ! !",
xlExclamation
Application.DisplayAlerts = False
Application.Quit
Else
End If
End With
End Sub

This is untested, so try it out or modify as needed.
Mike F
"Sean" wrote in message
oups.com...
Is it possible to deny access to open an Excel file except to
specified
user?

I assume this code as well as the user access list would go within
the
ThisWorksheet. In that on opening the file, it would compare the
Computer user logged in to the list and if "Joe Bloggs" or "Joe
Public"
is listed it would allow it to open, otherwise a message "Go Away"
would appear and file would not open

Is this possible, or is it way too advanced?

Thanks