2016-10-19 5 views
0

マクロが有効なブックを持っています。ワークシートとワークブックが保護されています。 ワークブックには3枚のシートが含まれています。 メイン のSheet2がTAB3マクロを有効にしたブックは共有時にのみ読み取ります

私はTAB2で無効になった細胞を持っていると私は、細胞を有効にするかどうか、ユーザーにプロンプ​​トをスローする必要がありますマクロを持っているとして名前TAB2 シート3として名前としてシート1という名前。ユーザーが「はい」を選択すると、セルが有効になり、「メイン」シートがドロップされて「はい」に変更されます。

マクロがうまく動作します。電子メールで他のユーザーにワークブックを共有する必要があります。

ユーザーは自分のコンピュータにブックを保存し、[編集を有効にする]と[マクロを有効にする]を選択します。

上部のブック名は、ユーザーがプロンプトで「OK」をクリックすると、XXXX [読み取り専用]で、セルはTab2が有効になりません。

ブックの読み取り/書き込みモードを開くオプションはありますか?または保護がうまくいくように私のための他のオプション?

Private Sub Worksheet_Activate() 

    NotifyUserGeneral 

End Sub 



Private Sub NotifyUserGeneral() 
Dim mMessageDisplayed As Boolean 
Dim message As Integer 

    If ActiveSheet.ProtectContents = True And Not mMessageDisplayed Then 
     message = MsgBox("Cells are locked on current sheet, press ok to Unlock ", vbOKCancel) 
     mMessageDisplayed = True 
     If message = vbOK Then 
     Sheets("MAIN").Range("G11") = "YES" 
     Else 
     Sheets("MAIN").Range("E29") = "NO" 
    End If 
End If 
End Sub 

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 
    Cancel = True 
End Sub 

私は、これはあなたが後にしているコードだと思う

+0

「ActiveSheet」を試すのではなく、「ThisWorkbook.Worksheets( "Tab2") 'を試してください。正しいシートで動作していない可能性があります。あなたの 'Sheets(" MAIN ")'は 'ThisWorkbook.Sheets(" MAIN ")'でなければなりません - コードが実行されたときに他のユーザがアクティブブックをアクティブにしていないかもしれません。 –

+0

@ DarrenBartrup-Cookご回答ありがとうございます!確かに、私を試してみましょう – sady

+0

@ DarrenBartrup - それは助けを助けるクック。同じ問題を解決し、メッセージで「ok」をクリックすると、セルが有効になりません。他の提案は、 – sady

答えて

1

を示唆するようにしてください。

注:は、私はそれ以外の場合はFALSEにNotifyUserGeneralが呼び出されるたびにリセットされますモジュールの先頭にmMessageDisplayedの宣言を移動しました。

も注意してください。あなたが他のシートからそれを呼び出したい場合は、通常のモジュールにNotifyUserGeneralを移動する方が良いかもしれ - にmMessageDisplayed宣言を移動することを忘れないでください。

Option Explicit 

Private mMessageDisplayed As Boolean 

Private Sub Worksheet_Activate() 

    NotifyUserGeneral 

End Sub 

Private Sub NotifyUserGeneral() 

    If ActiveSheet.ProtectContents And Not mMessageDisplayed Then 
     mMessageDisplayed = True 
     If MsgBox("Cells are locked on current sheet, press ok to Unlock", vbOKCancel + vbInformation) = vbOK Then 
      ActiveSheet.Unprotect 
      ThisWorkbook.Worksheets("MAIN").Range("G11") = "YES" 
     Else 
      ThisWorkbook.Worksheets("MAIN").Range("E29") = "NO" 
     End If 
    End If 
End Sub 

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 
    Cancel = True 
End Sub 
+0

これはうまくいきました... NotifyUserGeneralを通常のモジュールに移動しました。その良い仕事は今。ありがとうございました – sady

関連する問題