我正在尝试添加到一个宏,它将隐藏名为Authorization的列中没有文本的每一行。请看下面的代码,我认为这可能是在正确的轨道上,但它不会隐藏任何行。
Cells.EntireRow.Hidden = False
For Each cell In Range("Authorization").End(xlUp)
If cell = "" And cell.Offset(1, 0) = "" Then cell.EntireRow.Hidden = True
Next cell
答案 0 :(得分:0)
编辑添加如何定义动态命名范围 事实上,您已将整列设置为名称“授权”,我认为这会使您的代码冻结,因为整个列是100万行(如果您有2007或更高版本),代码仍然会检查为空行,所以它做了100万次。 1选项不是将其设置为整个列,而是可以使用“动态命名范围”,它将随着数据的添加而扩展和增长。有几种不同的公式可以做到这一点,但根据您的数据可能包含空白的事实,此公式版本将向下扩展到列中最后一个填充的行。我的例子使用colum A,因为你没有指定你正在使用的列,所以改变A以满足你的需要。
在上面的公式中:
Sheet1是我的表,用你的表替换它 $ 3 $是名称的起始行,因此根据您的评论,将其设置为第A行第3行 0,0,默认情况下您不需要更改 $ A $ A $是它计算值的列,因此根据需要进行更改 -1是默认值,保持原样 -2从计数中减去2,因为我们从第3行开始,所以如果你改变起始行,改变它 最后一个,定义了命名范围涵盖的列数,在您的示例中它只是1,因此不需要更改。
一旦以这种方式定义了名称,下面的代码应该可以更快地运行,因为它只会循环到输入数据的最后一行。我可以看到一个可能的问题,那就是如果A列中的最后一个单元格是空白的,但是该行的其余部分不是,这将错过最后一行。我可以通过使用不同的列来计算最后一行的构成来解决这个问题,但需要知道whicj列总是会有一个值。
<原始答案和代码> 不确定你的代码是否符合你想要它的描述,也就是你似乎试图检查当前单元格下面的行,这是你真正想要的吗?无论如何你的语法有点错误。我已经编写并测试了它并且它可以工作,我已经交换了你的偏移,所以我的代码检查命名范围“授权”中的单元格,然后还检查右边的单元格。根据您的需求进行修改
Sub test()
Dim c As Range
For Each c In Range("Authorisation").Cells
If c.Value = "" And c.Offset(0, 1).Value = "" Then c.EntireRow.Hidden = True
Next c
End Sub