正如标题所解释的,我有一个 Excel 2003 工作簿,并且我在 VBA 中将一个工作表的多个列复制到另一个工作表。我不知道,有人在源工作表上隐藏了几列,这弄乱了我处理目标工作表中单元格的方式。
我如何以编程方式确定:
- 如果有隐藏列
- 隐藏了哪些列?
谢谢!联合部队
正如标题所解释的,我有一个 Excel 2003 工作簿,并且我在 VBA 中将一个工作表的多个列复制到另一个工作表。我不知道,有人在源工作表上隐藏了几列,这弄乱了我处理目标工作表中单元格的方式。
我如何以编程方式确定:
谢谢!联合部队
对于 a Range
,请检查Range.Hidden
属性。
以下来自 MSDN 的片段是如何隐藏/取消隐藏行/列的一个很好的示例:
Worksheets("Sheet1").Columns("C").Hidden = True
您还可以使用If
语句测试该值:
For ColCounter = 1 To 10
If Columns("C").Hidden = True Then
Columns("C").Hidden = False
End If
Next
如果您只想复制可见文件,那么一个非常好的选项是仅选择可见列作为范围。
这可以通过
Set visrng =rng.SpecialCells(xlCellTypeVisible)
我不清楚这是否对您的情况有用,但我决定发布它,因为它可能对其他人有用。
将可见单元格复制到另一个范围,然后比较每个单元格中的单元格数量可能是确定该范围内是否存在隐藏单元格的最简单方法
例如
Selection.SpecialCells(xlCellTypeVisible).Copy Destination:=VisRan
If Not Selection.Cells.Count = VisRan.Cells.Count Then
MsgBox "Selection contains Hidden Cells"
End If
您可以使用以下功能进行检查:
Function IsColumnHidden(column As Variant) as Boolean
IsColumnHidden = False
If Columns(column).ColumnWidth = 0.0 Then IsColumnHidden = True
End Function
列宽或行高 0.0 表示该范围是否隐藏。
这是我测试过的一个,如果你想隐藏/取消隐藏列,它工作得很好
Sub Macro1_Test_Hidden() ' ' Macro1_Test_Hidden Macro ' ' ' If Columns("BH:XFA").Hidden = False Then Columns("BH:XFA").Select Range("BH:XFA").Activate Selection.EntireColumn.Hidden = True Else Columns("BH:XFA").Select Range("BH:XFA").Activate Selection.EntireColumn.Hidden = False End If ' ' End Sub