0

vba を使用してシートの列 A1 を非表示にしようとしています。しかし、 「範囲クラスの隠しプロパティを設定できません」というエラーが発生しています

これが私のコードです:

  ActiveWorkbook.Sheets("Project").Activate
   ActiveSheet.Unprotect password

   Dim cmt As comment
   Dim iRow As Integer

   For iRow = 1 To Application.WorksheetFunction.CountA(Columns(1))
      Set cmt = Cells(iRow, 1).comment
         If Not cmt Is Nothing Then

            Cells(iRow + 1, 1) = Cells(iRow, 1).comment.Text
            Cells(iRow, 1).comment.Delete
         Else
         MsgBox "No Comments"
         End If
   Next iRow

   MsgBox ActiveSheet.ProtectionMode

   ActiveSheet.Columns(1).Select

   Selection.EntireColumn.Hidden = True

行でエラーが発生しています

Selection.EntireColumn.Hidden = True

シートが保護されているかどうか、およびその列のセルにコメントがあるかどうかを確認するためにMsgBoxを含めました。

1 番目の MsgBox は No Comments として返され、2 番目は false として返されます。

したがって、シートは保護されておらず、コメントも存在しません。

それでもエラーが発生する理由について混乱しています。

私を助けてください

アップデート:

コードを次のように変更しました。

 ActiveWorkbook.Sheets("Project").Activate

    Dim sh As Shape
    Dim rangeToTest As Range
    Dim lRow As Long
    Dim c As Range

    lRow = ActiveSheet.Range("A" & ActiveSheet.Rows.Count).End(xlUp).Row

    Set rangeToTest = ActiveSheet.Range("A1:A" & lRow)
        For Each c In rangeToTest

            For Each sh In ActiveSheet.Shapes
                sh.Delete
            Next sh
        Next c

    ActiveSheet.Range("A1").EntireColumn.Hidden = True

そしてそれはうまくいきました。しかし、セルの上にマウスを置いたときに得られる他の列ヘッダーにコメントを追加しました。現在、コメントを受け付けていません..

図形の削除はコメントと関係がありますか?

4

5 に答える 5

0

entirecolumnおよび非表示のプロパティを列で直接使用することはできません。これらのプロパティは Range() オブジェクトに対してのみ機能します。取ったRange("A1").EntireColumn.Hidden = True

ありがとう
ナグ

于 2013-11-14T12:04:34.663 に答える
0

二つのこと

  1. 興味深い読み物

  2. Application.WorksheetFunction.CountA(Columns(1))最後の行を見つけるために使用しないでください。最後の行を見つける方法については、このリンクを参照してください。

これはあなたがしようとしていることですか(未テスト)?

Option Explicit

Sub Sample()
    Dim ws As Worksheet
    Dim cmt As Comment
    Dim iRow As Long, lRow As Long
    Dim Password As String

    '~~> Change as applicable
    Password = "Blah Blah"

    Set ws = ThisWorkbook.Sheets("Project")

    With ws
        .Unprotect Password

        lRow = .Range("A" & .Rows.Count).End(xlUp).Row

        For iRow = 1 To lRow
            Set cmt = .Cells(iRow, 1).Comment
            If Not cmt Is Nothing Then
                .Cells(iRow + 1, 1) = .Cells(iRow, 1).Comment.Text
                .Cells(iRow, 1).Comment.Delete
            Else
                'MsgBox "No Comments"
                Debug.Print "No Comments"
            End If
        Next iRow

        .Columns(1).EntireColumn.Hidden = True

        .Protect Password
    End With
End Sub
于 2013-11-14T13:37:05.723 に答える
0

あなたのコードは私にとってはうまくいきますか?? 私はExcel 2010を使用していますが、そうではないかもしれません。そのまま差し込んで、シートもパスワードで保護しました。コメントを作ってもいなくても、何でも非表示にします。

于 2013-11-14T13:23:05.677 に答える
0

この行も削除する必要があります

ActiveSheet.Columns(1).Select

于 2013-11-14T12:42:53.247 に答える