エクセルの認証設定
Q&A
解決したいこと
エクセルのVBAマクロを設定したファイルについて
認証設定をしています。
・自分で調べた結果Sheet1.Range("A2")にライセンスキーを入れるような設定になりました。
運用:
(1)Sheet1.Range("A2") を空にした状態でブックを開く
・期待動作: すべてのシートが非表示になり、UserForm3 が表示される。
ライセンスキーを入力すると通常通り動作する。
★UserForm3はライセンスキーを入力するようになっています。
(2)Sheet1.Range("A2") に正しいライセンスキーを記載した場合
・期待動作: 認証成功メッセージが表示され、すべてのシートが表示される。
(3)アクティブシートを変更した場合の挙動
他のシートをアクティブにして再度開いた場合でもエラーが発生しない。
この方針で以下の<ThisWorkbook>に以下ソースを設定しましたが、エラーが出ます。
Private Sub Workbook_Open()
Dim ws As Worksheet
Dim licenseKey As String
' シートにライセンスキーが保存されているか確認
On Error Resume Next
Set ws = ThisWorkbook.Sheets(1)
licenseKey = ws.Range("A2").Value
On Error GoTo 0
' ライセンスキーが存在しない、または無効な場合
If licenseKey = "" Or Not IsLicenseValid(licenseKey) Then
Dim sheet As Worksheet
Dim firstSheet As Worksheet
' 最初に表示するシートを設定(必ず非表示にしないシートを指定)
Set firstSheet = ThisWorkbook.Sheets(1)
firstSheet.Activate
For Each sheet In ThisWorkbook.Sheets
' 非表示可能な状態の場合のみ処理
If sheet.Visible <> xlSheetVeryHidden Then
sheet.Visible = xlSheetVeryHidden
End If
Next sheet
' ユーザーフォームを表示
UserForm3.Show
' ユーザーに通知
MsgBox "ライセンス認証が必要です。このブックは利用できません。", vbCritical
' ブックを閉じる
Application.OnTime Now + TimeValue("00:00:01"), "CloseWorkbook"
Else
' 認証成功
MsgBox "ライセンス認証に成功しました。", vbInformation
ShowAllSheets
End If
End Sub
' 非表示解除のロジック
Private Sub ShowAllSheets()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Sheets
ws.Visible = xlSheetVisible
Next ws
End Sub
●エラーメッセージ:
実行時エラー’1004’
’Visible’メソッドは失敗しました:’Worksheet’オブジェクト
該当するエラーソースコード
sheet.Visible = xlSheetVeryHidden
↓以下コードの3行目がエラー↓
' シートが非表示可能な状態の場合のみ処理
If sheet.Visible <> xlSheetVeryHidden Then
sheet.Visible = xlSheetVeryHidden
備考
当該エクセルブック、シート共に保護設定はしていません。
対処方法ご存じの方いらっしゃいましたら
お教えいただけます様よろしくお願い申し上げます。