我可以使用 IsEmpty 来引用不同的 sheet 并隐藏一列吗?
Can I use IsEmpty to refer to a different sheet and hide a column?
是否可以使用 IsEmpty 来引用与触发宏的位置不同的 sheet 上的单元格?另外,如果该查询的结果为真,是否可以隐藏查询的列?
这是我到目前为止构建的内容:
我的第一个版本是这样的:
If IsEmpty(L1) Then
Columns("L").EntireColumn.Hidden = True
Else
Columns("L").EntireColumn.Hidden = False
End If
够直截了当。但是,这只有在我希望 query/hide 发生的工作 sheet 中被触发时才有效。当我从不同的 sheet 启动宏时,它隐藏了 that sheet 中的列(当然,duh)。
所以,在几次迭代和错误之后,我得到了这个:
If IsEmpty(Sheets("Results").Cells(10, 1).Value) Then
Worksheets("Results").Columns(10).EntireColumn.Hidden = True
Else
Worksheets("Results").Columns(10).EntireColumn.Hidden = False
End If
这至少不会引发 VBA 的任何错误。它也做了一个总的下蹲动作。 :$ 我开始怀疑是否可以在不同的 sheet 上使用 IsEmpty
?或者 EntireColumn.Hidden
命令?此外,考虑到我需要 运行 对 9 列进行此检查,也许有比 9 If/Then 语句更好的方法?
我认为你很接近,只是你的单元格输入错误:
If IsEmpty(Sheets("Results").Cells(1, 10).Value) Then
Worksheets("Results").Columns(10).EntireColumn.Hidden = True
Else
Worksheets("Results").Columns(10).EntireColumn.Hidden = False
End If
此外,如评论中所述,您可以创建一个循环来检查许多列:
Dim i As Integer
Dim maxi As Integer
i = 1
maxi = 20
While i < maxi
If IsEmpty(ThisWorkbook.Worksheets("Results").Cells(1, i)) Then
Worksheets("Results").Columns(i).EntireColumn.Hidden = True
Else
Worksheets("Results").Columns(i).EntireColumn.Hidden = False
End If
i = i + 1
Wend
要避免第 1 行 9 列的循环,请使用 SpecialCells(xlCellTypeBlanks)。
dim blnks as range
with workSheets("Results")
with .range(.cells(1, "B"), .cells(1, "K"))
.entirecolumn.hidden = false
set blnks = .specialcells(xlCellTypeBlanks)
if not blnks is nothing then blnks.entirecolumn.hidden = true
end with
end with
基本上这会取消隐藏所有 9 列,然后隐藏第一行中包含空白单元格的列。请注意,公式返回的零长度字符串(例如 ""
)与真正的空白单元格不同。
是否可以使用 IsEmpty 来引用与触发宏的位置不同的 sheet 上的单元格?另外,如果该查询的结果为真,是否可以隐藏查询的列?
这是我到目前为止构建的内容: 我的第一个版本是这样的:
If IsEmpty(L1) Then
Columns("L").EntireColumn.Hidden = True
Else
Columns("L").EntireColumn.Hidden = False
End If
够直截了当。但是,这只有在我希望 query/hide 发生的工作 sheet 中被触发时才有效。当我从不同的 sheet 启动宏时,它隐藏了 that sheet 中的列(当然,duh)。
所以,在几次迭代和错误之后,我得到了这个:
If IsEmpty(Sheets("Results").Cells(10, 1).Value) Then
Worksheets("Results").Columns(10).EntireColumn.Hidden = True
Else
Worksheets("Results").Columns(10).EntireColumn.Hidden = False
End If
这至少不会引发 VBA 的任何错误。它也做了一个总的下蹲动作。 :$ 我开始怀疑是否可以在不同的 sheet 上使用 IsEmpty
?或者 EntireColumn.Hidden
命令?此外,考虑到我需要 运行 对 9 列进行此检查,也许有比 9 If/Then 语句更好的方法?
我认为你很接近,只是你的单元格输入错误:
If IsEmpty(Sheets("Results").Cells(1, 10).Value) Then
Worksheets("Results").Columns(10).EntireColumn.Hidden = True
Else
Worksheets("Results").Columns(10).EntireColumn.Hidden = False
End If
此外,如评论中所述,您可以创建一个循环来检查许多列:
Dim i As Integer
Dim maxi As Integer
i = 1
maxi = 20
While i < maxi
If IsEmpty(ThisWorkbook.Worksheets("Results").Cells(1, i)) Then
Worksheets("Results").Columns(i).EntireColumn.Hidden = True
Else
Worksheets("Results").Columns(i).EntireColumn.Hidden = False
End If
i = i + 1
Wend
要避免第 1 行 9 列的循环,请使用 SpecialCells(xlCellTypeBlanks)。
dim blnks as range
with workSheets("Results")
with .range(.cells(1, "B"), .cells(1, "K"))
.entirecolumn.hidden = false
set blnks = .specialcells(xlCellTypeBlanks)
if not blnks is nothing then blnks.entirecolumn.hidden = true
end with
end with
基本上这会取消隐藏所有 9 列,然后隐藏第一行中包含空白单元格的列。请注意,公式返回的零长度字符串(例如 ""
)与真正的空白单元格不同。