[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBAによるセル入力制限について』(ひよ)
VBAでこのような事は可能でしょうか。
1.通常にエクセルを開くと全てのセルに保護がかかっていて誰も触れない 2.入力ボックスが起動し、パスワードAを入力するとセルA1〜A3に入力できる
更に、このパスワードはA、B、C、Dとあり、 パスワードごとに 入力できるセルが変更される。 例えば、Aと入力された場合はA1〜A3に入力可能ですが、 Bと入力された場合にはB10〜B13に入力可能 Cと入力された場合にはB16、B20に入力可能 Dと入力された場合には全てのセルが入力可能となる
3.入力が終了すると、また全てのセルに保護をかけ誰も触れない状態で保存される。
これをマクロの記録でやってみたのですが、 シートの保護とセルのロックの組み合わせで保護されているようで、 権限によって入力可能なセルを分ける、ということが出来ないようにも思えます。
エクセルに最初から組み込まれた、上記の方法でなくVABコードによって、 パスワードを入力させ、その値によって入力制限をかけることは可能でしょうか。 どうぞ宜しくお願い致します。 (ひよ)
>これをマクロの記録でやってみたのですが、 >シートの保護とセルのロックの組み合わせで保護されているようで、 >権限によって入力可能なセルを分ける、ということが出来ないようにも思えます。
うんにゃ、できるよ。 そもそも、シート保護の前に、セルの保護というものがある。(セルの書式設定) 初期は、すべてのセルが「保護」つまり「入力できない」、だけど入力できるのは、このセルの保護は シートが保護されて初めて有効になるから。
なので、 ・まずInputBoxあたりでパスワードを入れさせて ・セルをすべて選んで、セル書式で「保護」 ・次にパスワード毎に入力可能にしたい領域を選んで、セル書式で「非保護」 ・こうした上でシートに保護をかける。
なお、このシートは、基本的には、全セル保護でシート保護をかけておいて 上記処理はWorkbook_Openあたりでシート保護をはずした上で実行。 さらに、最後にWOrkbook_BeforeSave あたりで、もう一度 ・シート保護をはずして ・全セルを保護にして ・シート保護
追記) >上記処理はWorkbook_Openあたりでシート保護をはずした上で実行。 あるいは、InputBoxを表示するマクロを呼び出してしょりさせてもいいね。 そちらのほうが、要件にあうのかも。
さらに追記)シート保護のUserInterfaceOnlyパラメータを使うと、上記より、少しすっきりした 構えにもできるけど、なずは、上記のような形で、がんばってみない?
(ぶらっと)
なかなかうまくいきません。 Sub auto_open()
Dim pas As String Dim ipas As String
pas = Application.InputBox("パスワードは?", "パスワード入力", "")
If pas = "1" Then ActiveSheet.Unprotect Range("C6,E6,G6").Locked = False Range("C6,E6,G6").FormulaHidden = False
' ipas = Application.InputBox("C6に入力してください", "入力", "")
' Range("C6").Value = ipas
' Cells.Select
' ActiveSheet.Unprotect
' Selection.Locked = True
' Selection.FormulaHidden = False
' ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
'
' ElseIf pas = "2" Then
'
' Else
' ThisWorkbook.Close False
End If
End Sub
Sub Auto_Close()
Cells.Select ActiveSheet.Unprotect Selection.Locked = True Selection.FormulaHidden = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub
とりあえずパスワード1だけでやってみましたが 入力する時にはすべてのセルに入力できてしまいます。。。 具体的に、どのようなコードを書けばよいか ご指南いただければと思います。 よろしくお願い致します。 (ひよ)
たとえば一例。 なお、当該のシートは、あらかじめ、全セルを保護にして、シート保護で、必要な許可条件を設定しておいて。 以下の例では、シート保護のパスワードを "abcd" にしている。 ここは別のパスワードでもパスワードなしでも、そちらの要件にあわせてなおしてね。 また、対象のシートを"Sheet1"にしている。ここも、実際のシート名に。
ThisWorkbookモジュール
Private Sub Workbook_Open() Sheets("Sheet1").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:="abcd", UserInterfaceOnly:=True End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Sheets("Sheet1").Cells.Locked = True End Sub
標準モジュール
Sub シート保護() Dim pwd As String Dim myR As Range Dim ok As Boolean ok = True pwd = Application.InputBox("パスワードを入力してください", Type:=2) With Sheets("Sheet1") '対象シート Select Case pwd Case "A" Set myR = .Range("A1:A3") Case "B" Set myR = .Range("B10:B13") Case "C" Set myR = .Range("B16,B20") Case "D" Set myR = .Cells Case Else ok = False End Select If Not ok Then MsgBox "正しいパスワードを入れてください" Else .Cells.Locked = True myR.Locked = False End If End With End Sub
追記)上記コードは、開いた時点では、全セル入力不可。 シート保護 プロシジャを呼び出して(ショートカットとかマクロボタンとかで) 必要なパスワードを入力させて、それに応じたセルが入力可能になる。
(ぶらっと)
ぶらっとさん、ありがとうございました! イメージどおりのブックが出来上がりました! できないと諦めかけていたのに感涙です。。。 本当にありがとうございました<m(__)m> (ひよ)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.