我如何在带有注释的单元格附近隐藏Excel工作表中未使用的列和行?

问题描述 投票:0回答:1

我有一些VBA代码可以查询并在工作表中创建数据表,并在某些单元格中带有注释。

它占据大约A1:N200的范围,然后我想像下面的代码一样隐藏未使用的空间。

Worksheet.Columns(Number_of_columns + 1).Resize(, Worksheet.Columns.Count - Number_of_columns).EntireColumn.Hidden = True
Worksheet.Rows(Number_of_rows & ":" & Worksheet.Rows.Count).EntireRow.Hidden = True

这样做会引发运行时错误1004:

无法设置范围类的隐藏属性

我已经签入了一个新的Excel文件,在单元格A1中添加了注释,然后尝试隐藏其他列和行,但不得不保留4列(A到D,但可能是A和C E)和5行可见。如果我尝试隐藏更多内容,则会收到消息Cannot shift objects off sheet

下面是在新的Excel文件中运行时会引发错误的过程的示例。

Private Sub Procedure()

  Dim Worksheet As Excel.Worksheet
  Dim Range As Excel.Range

  Set Worksheet = Excel.Application.ThisWorkbook.ActiveSheet
  Set Range = Worksheet.Cells(1, 1)

  If Range.Comment Is Nothing Then
    Range.AddComment
  End If

  Set Range = Worksheet.Columns(2).Resize(, Worksheet.Columns.Count - 1).EntireColumn
  Range.Select ' Just to test the range, it works. Columns B to XFD
  Range.Hidden = True ' Throws error

  Set Range = Worksheet.Rows(2 & ":" & Worksheet.Rows.Count).EntireRow
  Range.Select ' Just to test the range, it works. Rows 2 to 1048576
  Range.Hidden = True ' Throws error

End Sub

有什么方法可以隐藏它们,以便仅显示数据?

excel vba excel-2013
1个回答
0
投票

我不确定我是否理解正确,会更容易看到Excel,以下是在Excel 2016上经过测试的示例代码:

Sub StackOverflow()

Dim lngLastRow As Long
Dim lngLastColumn As Long
Dim lngLastColLetter As String
Dim shtWorking As Object

Set shtWorking = ActiveSheet
'find last row
lngLastRow = shtWorking.Cells(shtWorking.Rows.Count, 1).End(-4162).Row + 1

'find last column
lngLastColumn = shtWorking.Cells(1, shtWorking.Columns.Count).End(-4159).Column + 1

'convert last column index to last column letter
lngLastColLetter = Split(shtWorking.Cells(1, lngLastColumn).Address, "$")(1)

'hide columns
shtWorking.Columns(lngLastColLetter & ":XFD").EntireColumn.Hidden = True

'hide rows
shtWorking.Rows(lngLastRow & ":" & shtWorking.Rows.Count).EntireRow.Hidden = True

set shtWorking=nothing

End Sub
© www.soinside.com 2019 - 2024. All rights reserved.