假设您有一个空白工作表,并且区域A1:F1对其应用了“合并和居中”格式。如果通过单击列标题选择列B,则Excel会忠实地选择列B,并使单元格B2成为活动单元格。在Excel 2000或Excel 2002中已修改了此行为;在早期版本的Excel中,您将获得合并的单元格(A1:F1)

包括在选择中。

显然,VBA落后于用户界面的行为,因为选择整个列B也会最终选择所有列A到F:

Sub TestMacro1()

Range("B3").EntireColumn.Select End Sub

似乎没有办法解决此问题。即使您消除了EntireColumn方法并仅选择列B,您仍然可以获得从A到F的所有列:

Sub TestMacro2()

Range("B:B").Select End Sub

不选择准备对该列执行某些操作的列,而是直接执行该操作,可能是一种更好的编程方法。例如,假设您要使B列中的所有单元格变为粗体。您可以通过以下方式进行:

Sub TestMacro3()

Range("B3").EntireColumn.Font.Bold = True End Sub

这仅影响B列中的单元格,而不会影响A或C到F中的任何单元格。您可以类似地使用迭代方法来处理所需列中的单元格:

Sub TestMacro4()

Dim rCell As Range     Dim X As Long

X = 1     For Each rCell In Range("B:B")

rCell.Value = X         X = X + 1     Next End Sub

|这样会将值填充到B列的每个单元格中,并且方便地忽略了包含B列中的单元格的任何合并。

如果必须能够选择整个列,而由于合并的单元格而不能添加任何列,那么您可能会想使用MergeCells属性来检查合并的单元格。根据VBA联机帮助,以下应检测到所选内容中的合并单元格,然后转出宏​​:

Sub TestMacro5()

Range("B3").EntireColumn.Select     If Selection.MergeCells Then         Exit Sub     End If ' ' Perform rest of macro ' End Sub

不幸的是,测试表明该代码无法正常工作。如果整个选择由合并的单元格组成,则MergeCells属性显然仅返回True,如果选择仅包含一些合并的单元格,则MergeCells属性仅返回True。这意味着您可以采用其他方法来确定合并的单元格是否已修改了预期的选择,例如:

Sub TestMacro6()

Range("B3").EntireColumn.Select     If Selection.Columns.Count > 1 Then         Exit Sub     End If ' ' Perform rest of macro ' End Sub

此方法检查选择中的列数,然后如果Excel报告存在多个列,则将其转储出去。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(12218)适用于Microsoft Excel 2007、2010、2013和2016。您可以在此处为Excel的较早菜单界面找到此技巧的版本:

链接:/ excel-Selecting_Columns_in_VBA_when_Cells_are_Merged [合并单元格时在VBA中选择列]。