2012-05-01 7 views
0

VBAのExcelブックでシート(表示のみ)を保護しようとしています。私は、ユーザーが "シート2"と "シート3"のオブジェクトを編集できるようにしたいが、他のオブジェクトは編集しない。Excel VBAでさまざまなオプションのシートを保護するにはどうすればよいですか?

これは私が使用しているコードです。

Public Sub WBOpen() 
    Dim sh As Worksheet 
    Dim allowObjects As Boolean 
    For Each sh In Sheets 
    If sh.Visible = xlSheetVisible Then 
     **If sh.Name = "Sheet 2" Or "Sheet 3" Then** 
     allowObjects = True 
     Else 
     allowObjects = False 
     End If 
     sh.Protect Password:=pw(sh), DrawingObjects:=allowObjects, Contents:=True, Scenarios:=True, AllowFormattingRows:=True, AllowFiltering:=True, UserInterfaceOnly:=True 
    End If 
    Next 
End Sub 

**で囲んだ行に型の不一致エラーが表示されています。私がどこに間違っているのか誰にでも教えてくれますか?

はなぜ@Randyが指摘し、エラーが修正された後、それはまだエラーを持っているだろうが、私は私が何をすべきかを伝えることができます

+3

あなたが試したこと:sh.Name = "Sheet 2"またはsh.Name = "Sheet 3" – Randy

+0

また、実際に参照する "Sheet 2"にはタブを見るときにスペースがあることを確認してください。デフォルトでは、タブにスペースはありません(「シート2」など)。 – Zairja

+0

Randy - まだ同じエラーが発生しています – user1187347

答えて

0

その行は次のようになります。あなたはブール(True/False)などの文字列("Sheet 3")を処理しているため

If sh.Name = "Sheet 2" Or sh.Name = "Sheet 3" Then 

型の不一致エラーが来ます。

+0

ありがとうございました。上記の提案を提供してくれた@Randyにも感謝します。 – user1187347

0

わからない、ありがとうございました。すべてのシートを反復処理する代わりに、私は直接保護したいシートにアクセスします。これはGUIの名前ではなくコードの名前で行われます。たとえば、VBAエディタのプロジェクトエクスプローラで、 "Microsoft Excel Objects"フォルダの下にある "Testing"シートをクリックし、 "TestingSheet"の "(Name)"プロパティがあることを確認します。 "Sheet1"のように、他のシートにも名前が付いているので、分かりやすくするためにこれはおそらくオプションの手順です。そして、コードで、私はちょうどタイプ:

TestingSheet.Protect , True, True, True, True 

あなたはこれをしなかった場合は、ランタイムエラーを回避する、とあなたはまた、ワークシートのGUI名の面でより柔軟になります。

+0

答えをいただきありがとうございます。今後の発展のためにご意見をお寄せします。 – user1187347

関連する問題