人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルでマクロを使って、アクセスコントロールを実装することはできるでしょうか?
シートAはだれでも見られるけど、シートBは開くのにパスワードがいる or ID:PWを定義したシートを用意しておいてAさんはシートAとシートB、BさんはシートAだけ閲覧可能といったものです。


●質問者: nikita_r
●カテゴリ:コンピュータ
✍キーワード:アクセス エクセル コントロール パスワード マクロ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● SALINGER
●27ポイント

自分でパスワード用のユーザーフォームを作ることで可能です。

ただし、VBAでの方法になるので当然マクロをオフにすればパスワード無しで開くことができます。


まず、適当にユーザーフォームを挿入し、テキストボックスとボタンを配置。

ユーザーフォームはパスワードをかけたいシートのActivateイベントで開くようにします。

Private Sub Worksheet_Activate()
 UserForm1.Show
End Sub

ユーザーフォームのイベントとして、表示するときにテキストボックスをクリア。

Private Sub UserForm_Initialize()
 TextBox1.Text = ""
End Sub

ボタンを押したときのパスワードの判定。ここでは「password」というパスワードにしています。

Private Sub CommandButton1_Click()
 If TextBox1.Text <> "password" Then
 Worksheets("Sheet1").Activate
 End If
 Me.Hide
End Sub

そして、ユーザーフォームの右上の×を押して閉じるとパスワード無しで開いてしまうことの対処。

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
 If CloseMode = vbFormControlMenu Then
 Worksheets("Sheet1").Activate
 Me.Hide
 Cancel = True
 End If
End Sub

これで簡易パスワードが完成です。

だいたいの感じだけ参考にして後は実際の環境で作成してください。

マクロという制約なので完璧なものは不可能なので参考程度に。

それと、テキストボックスのプロパティのpasswordcharを*にすればパスワードっぽいです。


わからないことはコメントをオープンしていただければ、お答えすることができます。

◎質問者からの返答

ありがとうございます。できるということが分かればいいので。

マクロ解除したら無効というのは、ちょっと厳しいですね。


2 ● SALINGER
●27ポイント

先の回答には問題がありました。

というのは、ユーザーフォームを表示している間はバックにパスワードをかけたシートが開いているので、編集はできなくても見れてしまうという問題です。

その点の修正です。


例えば、シート2をパスワードをかけたいシート。シート1をトップページとかのユーザーフォームを表示しているあいだ開いていたり、パスワードが間違っていたら強制的に飛ぶページとしてしまいます。

その場合は

パスワードをかけるシート2のイベントを以下。

Private Sub Worksheet_Activate()
 If UserForm1.Visible = True Then Exit Sub
 UserForm1.Show
End Sub

ユーザーフォームのイベントを以下のように。

Private Sub CommandButton1_Click()
 If TextBox1.Text = "password" Then
 Worksheets("Sheet2").Activate
 End If
 Me.Hide
End Sub

Private Sub UserForm_Activate()
 TextBox1.Text = ""
 Worksheets("Sheet1").Activate
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
 If CloseMode = vbFormControlMenu Then
 Worksheets("Sheet1").Activate
 Me.Hide
 Cancel = True
 End If
End Sub

更に、パスワードをかけていたシートを開いた状態で保存して開くと見れてしまうということの対処として、ブックを開いたときにシート1を表示するように、ThisWorkbookに以下のコードを追加。

Private Sub Workbook_Open()
 Worksheets("Sheet1").Activate
End Sub
◎質問者からの返答

なるほど。わざわざ追加ありがとうございます。


3 ● きゃづみぃ
●26ポイント
Private Sub CommandButton1_Click()
If Range("A1") = "pass" Then
 Sheets("Sheet2").Visible = True
Else
 Sheets("Sheet2").Visible = False
End If
End Sub

ボタンを作り、そのボタンをクリックしたときに 動作します。

A1のセルに passと 書いてあれば、Sheet2を表示しますし、

書いてなければ、非表示になります。

あと、VBAは パスワードで保護しておけば、いいでしょう。

http://blog.livedoor.jp/katsuyausami/archives/50075845.html

ただ、パスワードを解除するプログラムも出回っているので、

気休めみたいなもんですが・・・。

◎質問者からの返答

ありがとうございます。

VBAのパスワード保護についても、情報いただきありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ