1

保護したい複数のワークシートを含むワークブックがあります。保護にパスワードを使用していません。結合されたセルの行幅を拡張するために、このシートに関連付けられた Visual Basic コードがいくつかあります。シートが保護されている場合、コードは機能しません。

コードに保護解除コードを追加するためのガイダンスを見つけましたが、それをどこに置くべきか、パスワードがないという事実に対処する方法がわかりません。さらなるガイダンスをいただければ幸いです。

これが私のコードです:

Private Sub Worksheet_Change(ByVal Target As Range)

     Dim NewRwHt As Single
     Dim cWdth As Single, MrgeWdth As Single
     Dim c As Range, cc As Range
     Dim ma As Range

     With Target
        If .MergeCells And .WrapText Then
            Set c = Target.Cells(1, 1)
            cWdth = c.ColumnWidth
            Set ma = c.MergeArea
            For Each cc In ma.Cells
                MrgeWdth = MrgeWdth + cc.ColumnWidth
            Next
            Application.ScreenUpdating = False
            ma.MergeCells = False
            c.ColumnWidth = MrgeWdth
            c.EntireRow.AutoFit
            NewRwHt = c.RowHeight
            c.ColumnWidth = cWdth
            ma.MergeCells = True
            ma.RowHeight = NewRwHt
            cWdth = 0: MrgeWdth = 0
            Application.ScreenUpdating = True
        End If
    End With
End Sub
4

3 に答える 3

3

おそらく次のようなことができます。

.Unprotectコードをandで囲みます.Protect

Sub protectSheet()

    Dim ws As Worksheet
    Set ws = Sheets(1)

    With ws
        .Unprotect "password"

        'Insert Code Here

        .Protect "password"
    End With

End Sub
于 2013-10-03T22:03:38.527 に答える
0
  1. シートをパスワードで保護する必要があります。
  2. ワークシートが保護されている場合でも、ユーザーが一部のセルを編集できるようにする場合は、シートを保護する前に、それらのセルの locked プロパティを false に設定します。
  3. がトリガーWorksheet_Changeされるか、Excel 範囲に変更を加えようとしているプロシージャが呼び出された場合 (ロックされたセル = true)、コードの先頭でシートの保護を解除し、最後に再度保護する必要があります。構文については @sobin answer を参照してください。
  4. また、エラー ハンドラを使用してシートを明示的に保護することもできます。これは、シートが保護されておらず、何らかの理由でエラーが発生し、シートが保護されないままになる状況を回避するために行われます。
于 2013-10-04T01:19:36.363 に答える