我可以使用 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 列,然后隐藏第一行中包含空白单元格的列。请注意,公式返回的零长度字符串(例如 "")与真正的空白单元格不同。