Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 11 Pro : Excel 2019)
マクロボタン実行時にパスワードロックをかけたいです
投稿日時: 23/02/10 09:37:34
投稿者: たいあやぱぱ

以下の記述でPWを聞いてくる設定はできたのですが、PWが間違っていてもボタン押下処理が走ってしまいます。
 
Sub PW()
  Dim PW As Long
   PW = Application.InputBox( _
     prompt:="パスワード入力", Type:=1)
  If PW <> "0101" Then
     MsgBox "パスワードが違います。"
     Exit Sub
  Else
     MsgBox "OK"
  End If
 End Sub
 

回答
投稿日時: 23/02/10 09:53:49
投稿者: taitani
投稿者のウェブサイトに移動

ステップ実行を行って、PW が間違っている、もしくは、空白やキャンセルの場合の動作を追ってみましょう。

投稿日時: 23/02/10 10:23:14
投稿者: たいあやぱぱ

taitani さんの引用:
ステップ実行を行って、PW が間違っている、もしくは、空白やキャンセルの場合の動作を追ってみましょう。

 
ありがとうございます。
 
PW未入力の場合は、Excelから「この数式には誤りがあります。」のコメントボックスが表示されて次の処理に活きませんが、
キャンセルの場合、誤ったPW数値でも処理はされてしまいます。

回答
投稿日時: 23/02/10 10:57:15
投稿者: taitani
投稿者のウェブサイトに移動

まず、
 

引用:
Dim PW As Long

 
なのに、
 
引用:
PW <> "0101"

 
と、内容が矛盾している。
 
例えば、4桁の数字を求める (0101 も容認)するのであれば、Type は 2 の文字列かと。
 
色々方法はあると思いますが、以下でよいと思います。
 
Sub PW()
    Dim PW As String
        
    PW = Application.InputBox(prompt:="パスワード入力", Type:=2, Default:="0000")
    
    If PW <> "0101" Then
        MsgBox "パスワードが違います。"
        Exit Sub
    Else
        MsgBox "OK"
    End If
    
End Sub

投稿日時: 23/02/10 11:17:31
投稿者: たいあやぱぱ

ありがとうございます。
「パスワードが違います。」のコメントは出るのですが、その後の処理はやはり進んでしまいます。
パスワードが間違っている場合には処理を進めないようにするにはどうすればよいのでしょうか。
ご教授いただければ幸いです。

回答
投稿日時: 23/02/10 11:20:16
投稿者: taitani
投稿者のウェブサイトに移動

え?私の環境では、ちゃんと、Exit Sub で抜けますね。
 
PW が 0000 や 1111 で終了しました。
 

引用:
その後の処理はやはり進んでしまいます。

 
ですが、何が実行されるのでしょうか教えてください。

回答
投稿日時: 23/02/10 11:40:00
投稿者: taitani
投稿者のウェブサイトに移動

あ、ボタンは何をしようされていますか?
開発>挿入>フォーム?それとも、
開発>挿入>ActiveX
 
開発>挿入>フォームなら、例えば、
Sub ボタン1_Click() の中に下記コードを書いてください。
あと、進む?というのが、別のコードなのであれば、そのコードを実行しないようにする動作が必要です。
 
開発>挿入>ActiveX なら、
Private Sub CommandButton1_Click() からのコードだと思うので、上記と同様です。

投稿日時: 23/02/10 16:22:20
投稿者: たいあやぱぱ

ありがとうございます。
それをトリガーに以降の処理の可否につなげたく。
SUBではなく、Functionにすることで解決しました!
 

taitani さんの引用:
あ、ボタンは何をしようされていますか?
開発>挿入>フォーム?それとも、
開発>挿入>ActiveX
 
開発>挿入>フォームなら、例えば、
Sub ボタン1_Click() の中に下記コードを書いてください。
あと、進む?というのが、別のコードなのであれば、そのコードを実行しないようにする動作が必要です。
 
開発>挿入>ActiveX なら、
Private Sub CommandButton1_Click() からのコードだと思うので、上記と同様です。