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以检查工作表是否受到保护以及该列的单元格中是否有任何可用的注释。

第一个 MsgBox 返回为 No Comments,第二个返回为 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

1

实际上,我已经在工作表的其他列中添加了评论。评论位于 activesheet.shapes 下,因此我无法隐藏该列。一旦我设置了它的位置,它就可以完美地工作

这段代码可以解决问题:

ActiveWorkbook.Sheets(sheetname).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.Placement = xlMoveAndSize
        Next sh
    Next c

ActiveSheet.Range("A1").EntireColumn.Hidden = True
于 2013-11-14T15:11:21.303 回答
0

您不能entirecolumn直接在列上使用和隐藏属性,这些属性仅适用于 Range() 对象。拿Range("A1").EntireColumn.Hidden = True

谢谢
唠叨

于 2013-11-14T12:04:34.663 回答
0

你的代码对我来说很好用??我在excel 2010中,也许你不是。按原样插入,密码保护工作表。评论与否没有区别,它会隐藏它。

于 2013-11-14T13:23:05.677 回答
0

您也应该删除此行

ActiveSheet.Columns(1).Select

于 2013-11-14T12:42:53.247 回答
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 回答