0

VBA で Excel ワークブックのシート (表示のみ) を保護しようとしています。ユーザーが「シート 2」と「シート 3」のオブジェクトを編集できるようにしたいのですが、他のオブジェクトは編集できません。

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

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

** で囲んだ行で型の不一致エラーが発生します。誰が私が間違っているのか教えてもらえますか?

ありがとうございました

4

2 に答える 2

0

@Randyが指摘したエラーが修正された後もエラーが発生する理由はわかりませんが、私が何をしているのかはわかります。すべてのシートを反復処理する代わりに、保護したいシートに直接アクセスします。これは、GUI での名前ではなく、コード名によって行われます。たとえば、VBA エディターのプロジェクト エクスプローラーで、"Microsoft Excel Objects" フォルダーの下にある "Testing" シートをクリックすると、"TestingSheet" の "(Name)" プロパティがあることがわかります。私の他のシートにも「Sheet1」のような名前があるため、これはおそらくオプションのステップに過ぎないことに注意してください。次に、コードで次のように入力します。

TestingSheet.Protect , True, True, True, True

これを行うと、実行時エラーが回避され、ワー​​クシートの GUI 名に関してもより柔軟になります。

于 2012-05-01T13:02:50.713 に答える
0

その行は次のようになります。

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

"Sheet 3"文字列 ( ) をブール値 ( True/ ) として扱っているため、型の不一致エラーが発生しますFalse

于 2012-05-01T13:03:16.067 に答える