
No.6ベストアンサー
- 回答日時:
<手順>
1. 特定ユーザーのユーザー名を調べる
標準モジュールの下の箇所を変更
Public Const SU As String = "佐藤,鈴木,高橋"
2.パスワードを決める
標準モジュールの下の箇所を変更
Public Const PW As String = "1234"
3. シートを追加し、"ログイン"と名前を付ける
4. [校閲]-[ブックの保護]でブックを保護し、2で決めたパスワードを設定する
<マクロの説明>
1. ブックを開くと、PCのログイン情報を元に特定ユーザーかどうかを判定
2. 一般ユーザーならパスワードの入力を要求
(パスワードが正しい場合)
パスワードを使ってブックの保護を解除し、全てのシートを表示する
(パスワードが間違っている場合)
ブックを閉じる
3. ブックを閉じるとき、"ログイン"シートがなければ追加する
4. ”ログイン”シート以外のシートを非表示にする
5. パスワードを使って、ブックを保護する
6. 閉じる
'*********************************
'ThisWorkbookモジュール
'*********************************
Private Sub Workbook_Open()
login
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
lockWB
End Sub
'*********************************
'標準モジュール
'*********************************
Public Const PW As String = "1234"
Public Const SU As String = "佐藤,鈴木,高橋"
'ログイン
Public Sub login()
Dim usr As String
usr = CreateObject("WScript.Network").UserName
'特定のユーザーなら、ブックのロックを解除
If InStr(1, SU, usr) > 1 Then unlockWB: Exit Sub
'一般ユーザーならパスワード要求
'パスワードが間違ってれば閉じる
If InputBox("パスワードを入力") <> PW Then
MsgBox "パスワードが違います"
ThisWorkbook.Close
Else
'パスワードが正しいければブックのロックを解除
unlockWB
End If
End Sub
'ブックのロックを解除
Public Sub unlockWB()
'ブックのロックを解除
ThisWorkbook.Unprotect PW
'シートの非表示を解除
Dim s As Worksheet
For Each s In Worksheets
s.Visible = True
Next
End Sub
'ブックをロック
Public Sub lockWB()
'ログインシートがあるがどうかチェック
Dim s As Worksheet, flag As Boolean
For Each s In Worksheets
If s.Name = "ログイン" Then
flag = True
Exit For
End If
Next
'ログインシートがなければ追加
If flag = False Then
ThisWorkbook.Sheets.Add
ActiveSheet.Name = "ログイン"
End If
'シートを非表示にする
For Each s In Worksheets
If s.Name <> "ログイン" Then
s.Visible = False
End If
Next
ThisWorkbook.Protect PW
End Sub
No.4
- 回答日時:
最後にもうひとつ
対象ブック(.xlsm)が
マクロを実行しないで開かれた場合には
この仕掛けは意味がないので、
全シートを非表示にし 保護をかけておくことを
忘れてはいけません
No.2
- 回答日時:
過去に作ったもの
ファイルの拡張子は テキトーでOK
この時は「key.dcb」とした
Sub キーファイルの設定()
Dim Path As String, WSH As Variant
Dim FSO As Object
Set WSH = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
Path = WSH.SpecialFolders("SendTo")
If Path <> "" Then
FSO.CopyFile ThisWorkbook.Path & "\key.dcb", Path & "\e_key.dcb"
MsgBox "キーの設定が完了しました Windws Vista"
End If
Set WSH = Nothing
Set FSO = Nothing
End Sub
Private Sub Workbook_Open()
Dim Path As String, WSH As Variant
Dim FSO As Object
Set WSH = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
Path = WSH.SpecialFolders("SendTo")
If Dir(Path & "\e_key.dcb") = "" Then
MsgBox "キーが設定されていません キーを正しく設定してください"
ThisWorkbook.Close
End If
End sub
No.1
- 回答日時:
不可能ではありません
”キー”となるものをあらかじめ所定の場所に配置し
WorkbookOpenイベントで それがあるか無いかを
判断し 無ければCloseという事であれば可能。
自分が過去に作ったものは
まず なんちゃってインストーラーを
作成します(VBAで作成)
Windowsフォルダの任意の場所に任意の名前のテキストファイルを
作成させます
その状態で 上記を実行させればOkなのです
なんちゃってインストーラーが必要な理由は
ブックを渡した人間もその仕掛けがわからないようにするためです
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数のエクセルファイルとシー...
-
VBA 別ブックからコピペしたい...
-
VBA シートをコピーする際に Co...
-
別ブックをダイアログボックス...
-
VBAで別のブックにシートをコピ...
-
【ExcelVBA】zip圧縮されたCSV...
-
【Excel VBA】書き込み先ブック...
-
ワイルドカード「*」を使うとう...
-
EXCEL2013 シート内容を別ブッ...
-
【VBA】全シートの計算式を全て...
-
【ExcelVBA】インデックスが有...
-
フォルダ内の全てのファイルに...
-
VBA コードを実行すると画面が...
-
Excel2007VBAファイルの表示に...
-
フォルダー内の支店ごとのブッ...
-
コードを直していただきたいで...
-
Excel マクロ ファイルと同じシ...
-
エクセルマクロで、他ブックか...
-
VBA アプリケーション定義また...
-
ExcelVBA:すでに開かれている...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別ブックをダイアログボックス...
-
VBA シートをコピーする際に Co...
-
VBA 別ブックからコピペしたい...
-
エクセルVBAが途中で止まります
-
VBA コードを実行すると画面が...
-
ワイルドカード「*」を使うとう...
-
VBAで別ブックのシートを指定し...
-
オブジェクトは、このプロパテ...
-
VBAで別のブックにシートをコピ...
-
Excelマクロ 該当する値の行番...
-
【Excel VBA】書き込み先ブック...
-
複数のエクセルファイルとシー...
-
【ExcelVBA】zip圧縮されたCSV...
-
【ExcelVBA】インデックスが有...
-
VBA シート名が一致した場合の...
-
2つ目のコンボボックスが動作...
-
Excel マクロ ファイルと同じシ...
-
【VBA】全シートの計算式を全て...
-
[Excel]ADODBでNull変換されて...
-
Excel2007VBAファイルの表示に...
おすすめ情報