2017-12-06 27 views
0

Windowsユーザーが "bhope"または "jdean"の場合、次のコードを使用してパスワードで保護されたファイルを開き、ユーザーが他の人であればメッセージボックスを表示しようとしています。ユーザーが "bhope"または "jdean"のときは必要に応じてファイルを開きますが、別のユーザーがボタンをクリックしても何も起こりません。私は何が欠けていますか?Ifステートメント内のMsgBoxが機能しない

Sub Button1_Click() 

Dim wb As Workbook 
Dim strUser As String 
strUser = Environ("USERNAME") 

    Application.ScreenUpdating = False 

    Select Case strUser 

    ' Full Workbook Access 
    Case Is = "bhope", "jdean" 
     If ActiveWorkbook.ReadOnly Then _ 
      Set wb = Workbooks.Open(Filename:="M:\...", Password:="TEST") 

    ' Limit Access 
    Case Is = "mjackson" 'also tried "Case Is <> "bhope", "jdean" 
     If Not ActiveWorkbook.ReadOnly Then _ 
      MsgBox ("This button is reserved for SAMs") 
    End Select 

    Application.ScreenUpdating = True 
End Sub 

それは私がコードのベースを開始するためにthis linkを使用し、そこからそれを修正しようとした、助けてください。ありがとう、歓声!

+0

他のユーザーのユーザーIDが '' mjackson ''で、本当に' 'MJackson' 'ではありませんか? – YowE3K

+0

'Select Case strUser'を' Select Case LCase(strUser) 'に変更します。 – JohnyL

+1

FWIW - "誰か他の人 "に対応する最も簡単な方法は、2番目のケースで' Case Else'を使うことです。 – YowE3K

答えて

0

ここでは、ISの使用が原因である可能性があります。それは余計なことですが、悪いことに、この問題を隠しています。代わりに試してください:

Sub Button1_Click() 

Dim wb As Workbook 
Dim strUser As String 
strUser = Environ("USERNAME") 

    Application.ScreenUpdating = False 

    Select Case strUser 

    ' Full Workbook Access 
    Case "bhope", "jdean" 
     If ActiveWorkbook.ReadOnly Then _ 
      Set wb = Workbooks.Open(Filename:="M:\...", Password:="TEST") 

    ' Limit Access 
    Case "mjackson" 
     If Not ActiveWorkbook.ReadOnly Then _ 
      MsgBox ("This button is reserved for SAMs") 
    End Select 

    Application.ScreenUpdating = True 
End Sub 

CASE ELSEに変更することを検討してください。

もう1つのことは、msgboxがIFの状態の中にあることです。 strUsermjacksonにuqualでなければならず、ActiveWorkbook(このコードが実行されたときにあったもの)は、そのmsgboxが起動するためにReadOnlyであってはいけません。

  1. 「ActiveWorkbook」をより具体的に変更することを検討してください。おそらくThisWorkbook.ReadOnly

  2. は文がmjacksonかどうかを確認する場合は、あなたが当たっているためElseを考えてみたがreadonlyではありません。

    Case "mjackson" 
        If Not ActiveWorkbook.ReadOnly Then 
         MsgBox ("This button is reserved for SAMs") 
        Else 
         MsgBox ("ActiveWorkbook is not Read Only so yo get this message") 
        End If 
    

最後には、SELECTにブレークポイント(F9)を入れて、どのようなあなたの値を参照してくださいstrUserのコードが実行されている間(その行にstrUSerをホバーするか、ローカルペインを確認してください)。あなたはまた、ちょうどその時点で、ActiveWorkbookが何であるかを知りたいかもしれません。答えはローカルペインにも表示されるので、VBEのドロップダウンでviewドロップダウンリストがオンになっていることを確認してください。

0

解決策を見つけました。明らかに、私が以前に試してみた "ケース"は、実際には、同様のコードを使って別のテストファイルを実行していました。私はまた、 "case else"以下の行を削除しなければならなかったので、その後にmsgボックスの行だけが実行されるようにしなければなりませんでした。以前の質問に答えるために

Sub Button1_Click() 

Dim wb As Workbook 
Dim strUser As String 
strUser = Environ("USERNAME") 

Application.ScreenUpdating = False 

Select Case LCase(strUser) 
' Full Workbook Access 
Case Is = "bhope", "jdean" 
If ThisWorkbook.ReadOnly Then _ 
Set wb = Workbooks.Open(Filename:="M:...", Password:="TEST") 
' Limit Access 
Case Else 
MsgBox ("This button is reserved for SAMs") 
End Select 
Application.ScreenUpdating = True 
End Sub 

:以下は、私は誰が将来的にそれを必要とする必要があるコードに使用され、画面更新の私の理解は、それがオフになっている場合が発生しないように、アプリケーションが非視覚的に実行されるということですこのファイルを使用するユーザーの心配です。また、このコードを実行すると速くなりますが、そうではありませんか?

ブックブックの目的とセキュリティ上の懸念...このボタンは、当社の測定基準の多くの部分を格納している読み取り専用ワークブックで使用されます。ファイルは読み取り専用になっているので、ユーザーはそのファイルを上書きできません。ファイルは種類が大きく、多くのデータが入ってくることが予想されるため、メインファイルの「シェル」をロードして、誰が特定のシートに情報を追加できるかを決定するボタンがあると考えました。ファイルの読み取りとパスワード保護の両方を行うことで、適切なユーザーがボタンをクリックしてから2枚目のシートを開き、ブック間でデータ転送を行うことができます。私はまだVBAコードをパスワードで保護しようと考えています。そのため、セキュリティ上の懸念事項となることはありません。また、@ashleedog、私は私たちの会社の皆が小文字のユーザー名を持っていることを意味しました。

関連する問題