Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2447 / 13646 ツリー ←次へ | 前へ→

【67937】結合セルの保護について しおん 11/1/18(火) 10:21 質問[未読]
【67946】Re:結合セルの保護について Jaka 11/1/18(火) 14:51 発言[未読]
【67950】ちょっと改良 Jaka 11/1/18(火) 16:18 発言[未読]
【67979】Re:ちょっと改良 しおん 11/1/20(木) 14:36 質問[未読]
【67980】Re:ちょっと改良 Jaka 11/1/20(木) 15:30 発言[未読]
【67948】Re:結合セルの保護について ぴかる 11/1/18(火) 15:20 発言[未読]

【67937】結合セルの保護について
質問  しおん  - 11/1/18(火) 10:21 -

引用なし
パスワード
   下記の作業をしたいのですが、作業の可否を教えて下さい。
可能な場合は、コードの記述方法を教えて頂けますでしょうか。

前提条件
1.シート保護がされている
2.特定のセルだけ入力出来るようになっている
3.入力出来るセルの中には結合セルがある

↓これらを踏まえて

入力可能な結合セルにパスワード付で保護したい
※2重ロックされることになります。

ご教授よろしくお願い致します。

【67946】Re:結合セルの保護について
発言  Jaka  - 11/1/18(火) 14:51 -

引用なし
パスワード
   ▼しおん さん:
>入力可能な結合セルにパスワード付で保護したい
>※2重ロックされることになります。

いまいち2重ロックの意味が解っていませんが、
ワークシートのチェンジイベントで制御するような?
制御したいセルであったら、まずは書き込まれた物を変数に一時保存、
Undoで、元の状態に戻して、パスワードを要求。
パスワードがあっていれば、変数に一時保存したものをセルに書き込む。
ってな感じでしょうか。

B2が左上に当たる結合セルとして、おおざっぱだけど。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim 一時保持 As Variant
If Target.Cells(1).Address(0, 0) = "B2" Then
  Application.EnableEvents = False
  一時保持 = Target.Cells(1).Value
  Application.Undo
  ans = InputBox("パスワードを入力してください。")
  If ans = "123" Then
   Target.Cells(1).Value = 一時保持
  Else
   MsgBox "パスワードが違います。"
  End If
  Application.EnableEvents = True
End If
End Sub

【67948】Re:結合セルの保護について
発言  ぴかる  - 11/1/18(火) 15:20 -

引用なし
パスワード
   しおんさん、こんにちは。

ご要望とは合ってないかもしれませんが、こういうのはいかがでしょうか?
検討違いの可能性が高いと思いますが・・・。

1.ファイルを開くで、パスワード入力

Sub AUTO_OPEN()

  UserForm1.Show
  
End Sub

2.UserForm1

Private Sub CommandButton1_Click()
   
  If TextBox1.Text = "1234" Then
    Unload Me
    ActiveSheet.Unprotect
    Range("B4:D13").Locked = False ’入力エリアの保護解除
    ActiveSheet.Protect
  Else
    MsgBox "パスワードが違います。再入力してください。", vbInformation, "パスワード入力"
    TextBox1.Text = ""
  End If

End Sub
Private Sub TextBox1_Change()
  
  TextBox1.PasswordChar = "*"
  
End Sub

3.全セル保護にて閉じる

Sub AUTO_CLOSE()

  ActiveSheet.Unprotect
  Cells.Locked = True
  ActiveSheet.Protect
  ActiveWorkbook.Save

End Sub

【67950】ちょっと改良
発言  Jaka  - 11/1/18(火) 16:18 -

引用なし
パスワード
   Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("B2")) Is Nothing Then
  Application.EnableEvents = False
  Application.Undo
  ans = InputBox("パスワードを入力してください。")
  If ans = "123" Then
   With Application.CommandBars.FindControl(ID:=129)
      If .Enabled = False Then Exit Sub
       .Execute
   End With
  Else
   MsgBox "パスワードが違います。"
  End If
  Application.EnableEvents = True
End If
End Sub

【67979】Re:ちょっと改良
質問  しおん  - 11/1/20(木) 14:36 -

引用なし
パスワード
   ▼Jaka さん:
返信が遅くなり申し訳ありません。
ご回答頂きありがとうございます。

初歩的な質問でお恥ずかしいのですが
>Private Sub Worksheet_Change(ByVal Target As Range)
 ・
 ・
>End Sub
こちらのコードを入力しただけでは、実行できませんでした。
他にどのような作業をしたらよろしいのでしょうか。

【67980】Re:ちょっと改良
発言  Jaka  - 11/1/20(木) 15:30 -

引用なし
パスワード
   ▼しおん さん:
>初歩的な質問でお恥ずかしいのですが
>>Private Sub Worksheet_Change(ByVal Target As Range)
> ・
> ・
>>End Sub
>こちらのコードを入力しただけでは、実行できませんでした。
>他にどのような作業をしたらよろしいのでしょうか。

これは、
>これらを踏まえて
のおまけ要素みたいなものです。
結合セルの左上がB2として、そこに文字を手入力したりすると、
パスワードを求めるといった動きだけです。
標準機能「元に戻す」や「やり直し」を使っているので、マクロからの書き込みには対応してませんし、それを回避するための機能も組み込んでませんから、エラーになると思います。

2447 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free