[[20100119141829]] 『マクロでパスワードで空白で。』(あへあへ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロでパスワードで空白で。』(あへあへ)
WindowsXP Excel2002

 こんにちわ。あへあへでございます。
 今日も質問があります。
 ご指導よろしくお願いします。

 パスワードを設定しないと開かなかったり
 動かなかったりしたいなとこちらで検索をかけてみたら。
 [[20050210131459]] 『マクロ実行権限??※パスワード』(なぞなぞくん)
 で
 Private Sub 開放_Click()
     Dim MyValue As String

     MyValue = InputBox("これより先、管理者用パスワードが必要です。", "管理者より")
     If MyValue = "" Or MyValue <> "1234" Then
         MsgBox "「入力された管理者用パスワードが間違っています。」", vbCritical
         Exit Sub
     End If
     〜〜〜〜〜〜〜〜〜〜 ←ここに動かしたいマクロとか入れる ←★
 End Sub
 というのを知り使わせていただきました。
 が、ふと思ったことがあります。
 空白のまま(パスワードを入れないまま)OKを押しても
 「入力された管理者用パスワードが間違っています。」
 と表示させるのってなんかかっこ悪いというか…。

 そこで質問です。
 空白だった場合に
 「パスワード入れてください」
 と入力を強制的にさせるか
 「パスワードが入っていません」
 で強制的に終わらせる(言い方が変ですがとにかく”★”をさせない)
 VBAの書き方をご指導お願いしたいです。

 よろしくお願いします。

 Private Sub 開放_Click()
     Dim MyValue As String

     MyValue = InputBox("これより先、管理者用パスワードが必要です。", "管理者より")
     If MyValue = "" Then
         MsgBox "「パスワード入れてくださいまし。」", vbCritical
         Exit Sub
     ElseIf MyValue <> "1234" Then
         MsgBox "「入力された管理者用パスワードが間違っています。」", vbCritical
         Exit Sub
     End If
     〜〜〜〜〜〜〜〜〜〜 ←ここに動かしたいマクロとか入れる ←★
 End Sub

 でどうでしょうか?
 (てつろう)

 (てつろう)さん、ありがとうございます。

 てつろうさんの教えていただいたVBA早速使ってみました!
 これはつまり空白だったら「強制的に終わらせる」ってヴァージョンですね。
 これはとても大切なデータ部分に使っていこうと思います。

 ところでもう一つの
 もし空白だったら
  「パスワード入れてください」
 と言われてから最初の『これより先、管理者用パスワードが必要です。』へ
 強制的に戻すVBAを知りたいのですが解りますか?

 (あへあへ)

 ラベルとGoToを使えば出来ますけど。
 他の方法のほうが良いかも?

 Sub 開放_Click()
     Dim MyValue

 top:
     MyValue = Application.InputBox("これより先、管理者用パスワードが必要です。", "管理者より", , , , , , 2)
     If MyValue = False Then Exit Sub
     If MyValue = "" Then
         MsgBox "「パスワードをちゃんと入れてくださいまし。」", vbCritical
         GoTo top
     ElseIf MyValue <> "1234" Then
         MsgBox "「入力された管理者用パスワードが間違っています。」", vbCritical
         Exit Sub
     End If
    MsgBox "ここに動かしたいマクロとか入れる ", vbCritical
 End Sub

 InputBoxをApplication.InputBoxに変えました。
 理由:InputBoxだとキャンセルと空白の判別がつかないので
 (てつろう)

 GoToは出来るだけ避けたいですね。
今回の場合はDo〜Loopで良いかなと思います。
ついでに単一の値の内容を色々聞いている形なので、Select Case文にしてみました。
Sub test()
    Dim MyValue
    Do
        MyValue = Application.InputBox("これより先、管理者用パスワードが必要です。", "管理者より", , , , , , 2)
        Select Case MyValue
            Case False 'キャンセル時
                Exit Sub
            Case "" '空欄の時
                MsgBox "「パスワードをちゃんと入れてくださいまし。」", vbCritical
            Case "1234" '一致した時
                Exit Do
            Case Else '上記以外
                MsgBox "「入力された管理者用パスワードが間違っています。」", vbCritical
                Exit Sub
        End Select
    Loop
    MsgBox "ようこそ本プログラムへ。今回も貴方を全力でサポートいたします。", vbInformation
End Sub
(ご近所PG)

 Do〜LoopにSelect〜Case文、さすがご近所PG様
 MsgBox "ようこそ本プログラムへ。今回も貴方を全力でサポートいたします。", vbInformation
 ここなんかもう最強ですね。恐れ入りました。
 (てつろう)

 (てつろう)さん
 私のわがままを聞いてくださってありがとうございます。
 またもや新たなインプット方法が紹介されました。うん、奥深いですねVBA。
 そして、思ったように動いてくれました。
 なんだかGOTOという単語を見てると、N88ベーシックを思い出します。
 って全然私はプログラムなんて打てないんですけどね(苦笑)
 なんか動きが豪華になった気がしました!
 本当に素敵なVBAを教えていただきありがとうございました!

 (ご近所PG)さん
 またもや私の知らないVBAの文章が…^^;
 いったいどこまでVBAは広がっていくんでしょうか?
 恐るべしVBA!そしてそれを難なく操るご近所PGさんにも脱帽です。
 そして今回のVBAは、てつろんさんとのVBAの比較
 (良い悪いじゃなくてVBAの中身の書き方の勉強するための比較)もでき、
 とても興味深いし、大変助けられました。
 本当にありがとうごじあました。

 (あへあへ)

 実務で使用されるのでしたら、VBAコードにパスワードかける事も
 検討されるといいかもですね。
 (ぞう)

 >InputBoxをApplication.InputBoxに変えました。
 >理由:InputBoxだとキャンセルと空白の判別がつかないので

 ちょっと気になったので・・・。Excel/VBAでは、Application.Inputboxの方が便利なことは
 確かですが、Inputbox関数だってキャンセルと空白の判別は付きます。

 Sub inputbox関数のCancelが押されたときの対処方法()
    dim ans as variant
    ans = InputBox("input data")
    If StrPtr(ans) = 0 Then
       MsgBox "Cancel"
    Else
       MsgBox "入力された文字は" & ans
    End If
 End Sub

 参考までに・・・。

 ichinose


 (ぞう)さん
 おはようございます。お返事が遅くなってしまってごめんなさい。
 確かにVBA自体にもパスワードをかけないとだめですよね^^;
 とりあえずまだ全体に公開はしていないので、近いうちにきちんと盛り込んで行こうと思います。
 ご指導ありがとうございました。

 ichinoseさん
 おはようございます。お返事が遅くなってしまってごめんなさい。
 な、な、なんとこんなVBAコードの書き方があったんですね?!
 やはり本当にVBAは宇宙だと思いました。
 そして書いていただいたVBAは大切に参考にしていきます。ありがとうございました。

 (あへあへ)

ichinoseさん
教えてもらった下記の文法(@)をAへ入れて使うにはどうすれば良いのでしょうか?
@****************
Sub inputbox関数のCancelが押されたときの対処方法()
    dim ans as variant
    ans = InputBox("input data")
    If StrPtr(ans) = 0 Then
       MsgBox "Cancel"
    Else
       MsgBox "入力された文字は" & ans
    End If
 End Sub

********************

A***********************
Private Sub 開放_Click()

     Dim MyValue As String

     MyValue = InputBox("これより先、管理者用パスワードが必要です。", "管理者より")
     If MyValue = "" Then
         MsgBox "「パスワード入れてくださいまし。」", vbCritical
         Exit Sub
     ElseIf MyValue <> "1234" Then
         MsgBox "「入力された管理者用パスワードが間違っています。」", vbCritical
         Exit Sub
     End If
     〜〜〜〜〜〜〜〜〜〜 ←ここに動かしたいマクロとか入れる ←★
 End Sub

*************************


 Sub test例()
    Dim MyValue As String, cont(1) As Long
    Do
        MyValue = InputBox("これより先、管理者用パスワードが必要です。", "管理者より")
        If StrPtr(MyValue) = 0 Then
           MsgBox "キャンセルを押したので終了します。", vbCritical
           Exit Sub
        ElseIf MyValue = "" Then
            If cont(0) = 4 Then
               MsgBox "「パスワード入れてくれないので 終了します。!!」", vbCritical
               Exit Sub
            End If
            MsgBox "「パスワード入れてくださいまし。」", vbExclamation
            cont(0) = cont(0) + 1
        ElseIf MyValue = "1234" Then
           Exit Do
        Else
            If cont(1) = 2 Then
               MsgBox "「3回も違ってますので 終了します。!!」", vbCritical
               Exit Sub
            End If
            MsgBox "「入力された管理者用パスワードが間違っています。」", vbExclamation
            cont(1) = cont(1) + 1
        End If
    Loop
    MsgBox "処理"
End Sub
(beginner)

(beginner)様
Do〜Loop構文を使用しないとできないのでしょうか?
できましたら、下記の分に追加、修正していただけますとありがたいです。

********************* Private Sub 開放_Click()

     Dim MyValue As String

     MyValue = InputBox("これより先、管理者用パスワードが必要です。", "管理者より")
     If MyValue = "" Then
         MsgBox "「パスワード入れてくださいまし。」", vbCritical
         Exit Sub
     ElseIf MyValue <> "1234" Then
         MsgBox "「入力された管理者用パスワードが間違っています。」", vbCritical
         Exit Sub
     End If
     〜〜〜〜〜〜〜〜〜〜 ←ここに動かしたいマクロとか入れる ←★
 End Sub

***********************



     Dim MyValue As String

     MyValue = InputBox("これより先、管理者用パスワードが必要です。", "管理者より")
     if strptr(MyValue) = 0 Then
         MsgBox "キャンセルを押したので終了します。", vbCritical
         Exit Sub 
     elseIf MyValue = "" Then
         MsgBox "「パスワード入れてくださいまし。」", vbCritical
         Exit Sub
     ElseIf MyValue <> "1234" Then
         MsgBox "「入力された管理者用パスワードが間違っています。」", vbCritical
         Exit Sub
     End If
     〜〜〜〜〜〜〜〜〜〜 ←ここに動かしたいマクロとか入れる ←★
 End Sub
Do〜Loopを入れたのは、例としてキャンセル以外で繰り返してみただけですよ^
プログラムを1行ごとに実行する http://www.zd.em-net.ne.jp/~k-create/contents_vba/vba1_31.html
上記のサイトの説明に有るように1行ごとにF8でどのような動きになる等、いろいろと調べると、良いと思います。私は入門レベルで、アドバイスが出来ませんけど(beginner)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.