私はいくつかのワークシートを含むExcelブックを持っています。Excel - certianユーザーにワークシートの表示を制限
私がやりたいことは、ユーザフォームなどのメカニズムを持つことです。ユーザーが複数の可能なユーザのいずれかに認証されることになります。
指定されたユーザー名に基づいて、特定のワークシートを表示して他のシートを非表示にし、ユーザーが表示できないはずのワークシートにアクセスしないようにします。
誰もがExcelでこのようなことをしましたか?
任意の考えが ショーン
私はいくつかのワークシートを含むExcelブックを持っています。Excel - certianユーザーにワークシートの表示を制限
私がやりたいことは、ユーザフォームなどのメカニズムを持つことです。ユーザーが複数の可能なユーザのいずれかに認証されることになります。
指定されたユーザー名に基づいて、特定のワークシートを表示して他のシートを非表示にし、ユーザーが表示できないはずのワークシートにアクセスしないようにします。
誰もがExcelでこのようなことをしましたか?
任意の考えが ショーン
私は実際にこれを入力する作業を楽しんでいました。 VBEはこのコードでは保護されていないので、何らかの保護を追加することもできますが、これは必要な処理を行う必要があります。
一般的なワークシートも作成する必要があります。これは、パスワードが入力される前に開いている唯一のシートになります。これはエラーを投げずにすべてのシートを隠すことができないので不可欠です。 (目に見えるシートが1枚必要です)。
WARNING:このコードは、軽度テストです。パスワードの忘れなど、以下のコードを使用するためのデータの損失は、お客様が負うものとします。あなたは警告されている!!
Option Explicit
Private Sub Workbook_Open()
GetLogin 1
End Sub
Private Sub GetLogin(ByVal AttemptNumber As Integer)
Dim Sheet As Worksheet
With ThisWorkbook.Worksheets("Login")
.Visible = xlSheetVisible
.Activate
End With
For Each Sheet In ThisWorkbook.Sheets
If Not Sheet.Name = "Login" Then
Sheet.Visible = xlSheetVeryHidden
End If
Next Sheet
Dim Password As String
Password = Application.InputBox("Please enter your password")
Select Case Password
Case "Ma$terPas$"
For Each Sheet In ThisWorkbook.Sheets
Sheet.Visible = xlSheetVisible
Next Sheet
ThisWorkbook.Worksheets(1).Activate 'For when you hide login sheet
Case "Oth3Rpa$$"
With ThisWorkbook
.Worksheets(1).Visible = xlSheetVisible
End With
ThisWorkbook.Worksheets(1).Activate 'For when you hide login sheet
Case Else
If AttemptNumber <= 3 Then
If MsgBox("You entered an incorrect password", vbRetryCancel, "Attempt # " & AttemptNumber) = vbRetry Then
AttemptNumber = AttemptNumber + 1
GetLogin AttemptNumber
Else
ThisWorkbook.Saved = True
ThisWorkbook.Close
End If
Else
ThisWorkbook.Saved = True
ThisWorkbook.Close
End If
End Select
ThisWorkbook.Worksheets("Login").Visible = xlSheetHidden
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If ThisWorkbook.Saved = False Then
If MsgBox("Would you like to save?", vbYesNo) = vbYes Then
ThisWorkbook.Save
End If
End If
Dim Sheet As Worksheet
With ThisWorkbook.Worksheets("Login")
.Visible = xlSheetVisible
.Activate
End With
For Each Sheet In ThisWorkbook.Sheets
If Not Sheet.Name = "Login" Then
Sheet.Visible = xlSheetVeryHidden
End If
Next Sheet
'Prevent from being asked to save the fact you just hid the sheets
ThisWorkbook.Saved = True
End Sub
Workbook_Open
とWorkbook_Close
がブックのモジュールに含まれていることを確認してください。
ありがとう@ K.Davis私が必要としたもの。非常に感謝し、水曜日の夕方に楽しい何かをあなたに与える:-) – Stiley
を高く評価しているあなたは、おそらくこれはあなたがすべての人のユーザー名を見つける必要があるだろう考えると多くの仕事を取るのAuto_Openイベントにもちろん
Function Auto_Open()
Select Case True
Case InStr(Application.UserName, "Dan Smith") > 0
ActiveWorkbook.Sheets(1).Visible = xlSheetVeryHidden
Case InStr(Application.UserName, "Jon Doe") > 0
ActiveWorkbook.Sheets(1).Visible = True
End Select
End Function
を使用することによって、これを達成できますあなたがそれらから隠そうとしているシートが、それは私が考えたものです
おかげさまで、私は別のソリューションを使いましたが、あなたが取った時間を感謝します。 – Stiley
_ "ユーザーが認証する場所..." _ - Authenticate、** how **? Active Directory?どこかハードコーディングされたリストに対して? – gravity
1.ブックを読み込むときにShiftキーを押すと、マクロが無効になります。 2. Excel設定でマクロを無効にすることができます。 – JohnyL
ええ、申し訳ありません、認証は、4人または5人のハードコードされたユーザーのセットに対してだけです。 – Stiley