2017-12-06 1 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

다른 사용자의 사용자 아이디가'''mjackson ''이고, 아마''MJackson' '이 아닌가? – YowE3K

+0

'Select case strUser'를'Select Case LCase (strUser)'로 변경하십시오. – JohnyL

+1

FWIW - "다른 누구에게나"가장 간단하게 다루는 것은 두 번째 경우에'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으로 변경하십시오.

다른 것은 메시지 상자가 IF 상태 안에 있다는 것입니다. strUsermjackson이어야하며 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 

: 다음 나는 사람이 미래에 필요합니다 코드 사용되는 화면 갱신에 대한 이해가 전원이 켜져있는 경우 원인이되지 않도록, 응용 프로그램이 아닌 시각적으로 실행하는 것입니다 이 파일을 사용할 사용자에 대한 우려 또한이 코드는 실행 속도를 향상시킵니다.

통합 문서 및 보안 문제의 목적과 관련하여 ...이 단추는 회사의 측정 항목 중 많은 부분을 포함하는 읽기 전용 통합 문서에 사용됩니다. 파일은 읽기 전용으로 만들어져 사용자가 저장할 수 없습니다. 파일이 매우 다양하고 많은 데이터가 포함될 것으로 예상되기 때문에 주 파일의 "Shell"을로드 한 다음 특정 시트에 정보를 추가 할 수있는 사용자를 결정하는 단추를 가지고 있다고 생각했습니다. 파일을 읽기 전용 및 비밀번호로 보호함으로써 적절한 사용자가 버튼을 클릭 한 다음 두 번째 시트를 열고 통합 문서간에 데이터 전송을 할 수 있습니다. 나는 여전히 VBA 코드를 암호로 보호하고자하므로 보안 문제가 될 수있는 방법을 알지 못합니다.또한, @ashleedog, 나는 우리 회사의 모든 사람들이 소문자 사용자 이름을 가지고 있음을 의미합니다.