我有一些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,以下是在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