我可以使用IsEmpty来引用不同的工作表并隐藏一列吗?

是否有可能使用IsEmpty来引用macros从其中被触发的不同表格上的单元格? 另外,如果查询的结果是True,是否可以隐藏查询的列?

这是我迄今为止所build立的:我的第一个版本是这样的:

If IsEmpty(L1) Then Columns("L").EntireColumn.Hidden = True Else Columns("L").EntireColumn.Hidden = False End If 

直截了当。 但是,只有在我希望查询/隐藏发生的工作表中被触发时才有效。 当我从不同的工作表启动macros时,它隐藏了该工作表中的列(当然,呃)。

所以,经过几次迭代和错误,我得到这个:

 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 

至less不会从VBA中引发任何错误。 它也做了蹲下的总数。 :$我开始怀疑是否可以在不同的工作表上使用IsEmpty ? 或者EntireColumn.Hidden命令? 另外,鉴于我需要在9列上运行此检查,也许有比9 If / Then语句更好的方法吗?

为了摆脱9行'第1行的循环,使用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列,然后隐藏第一行中的空白单元格的列。 请注意,由公式返回的零长度string(例如"" )与真正的空白单元格不同。

我觉得你非常接近,只是你有单元格input错误的方式:

 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 

另外正如在注释中提到的,你可以创build一个循环来检查许多列:

 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