エクセルでマクロを使って、アクセスコントロールを実装することはできるでしょうか?

シートAはだれでも見られるけど、シートBは開くのにパスワードがいる or ID:PWを定義したシートを用意しておいてAさんはシートAとシートB、BさんはシートAだけ閲覧可能といったものです。

回答の条件
  • 1人2回まで
  • 登録:2008/11/05 19:32:28
  • 終了:2008/11/06 13:00:31

回答(3件)

id:SALINGER No.1

SALINGER回答回数3454ベストアンサー獲得回数9692008/11/05 20:35:40

ポイント27pt

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

ただし、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を*にすればパスワードっぽいです。


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

id:nikita_r

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

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

2008/11/06 12:57:21
id:SALINGER No.2

SALINGER回答回数3454ベストアンサー獲得回数9692008/11/05 21:11:27

ポイント27pt

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

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

その点の修正です。


例えば、シート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
id:nikita_r

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

2008/11/06 12:57:45
id:taknt No.3

きゃづみぃ回答回数13539ベストアンサー獲得回数11982008/11/05 21:44:43

ポイント26pt
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

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

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

id:nikita_r

ありがとうございます。

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

2008/11/06 13:00:21
  • id:SALINGER
    なるほど、シートの表示・非表示で対処したほうが簡単そうですね。
    ただ、メニューの再表示で表示されてしまうという問題もありますが、
    それは、使用者以外に表示されていないシートがあることを伝えなければいいですね。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません