从第17讲开始,陆续分享了许多关于区域、单元格的操作,今天是最后一波了

核心概念
VBA中零碎的概念太多,以至于有些小伙伴总是搞不清楚“当前选中区域”和“活动单元格”,它俩有什么区别和联系呢?
ActiveCell(活动单元格):永远是一个单个单元格。即使在 A1:D10 这样一个大的选中区域里,也只有一个单元格是 ActiveCell,它通常是这个区域起始选中的那个单元格(如 A1),或者之后通过 Activate 方法指定的单元格
Selection(当前选区):代表当前所有被选中的对象。这可能是一个单元格区域(如 A1:D10),也可能是一个图表、一个形状等。ActiveCell 总是包含在 Selection 之中
例如,当你通过点击 A1 并拖动至 F1 来选择单元格时,选区 (Selection) 是 A1 到 F1,而活动单元格 (ActiveCell) 是 A1
另外,如果选区仅有一个单元格,那么选区与活动单元格完全相同,它们代表相同的对象

如何改变ActiveCell
我们不能直接给 ActiveCell 属性赋值来改变它,正确的方法是使用 Activate 或 Select 方法
示例1:
Worksheets("Sheet1").Range("A1:D5").Select
我们使用Select方法选中A1:D5区域,此时ActiveCell即为A1,执行后结果如下:

示例2:
以上选区仍旧不变,还是A1:D5,然后再执行以下代码:
Worksheets("Sheet1").Range("A3").Activate
ActiveCell变为A3,结果如下:


应用举例
ActiveCell属性最大的特点是与用户当前的焦点交互,常用于编写响应式或相对定位的代码
3.1根据活动单元格的位置智能判断并设置格式
Sub FormatHeader()' 如果活动单元格在第一行,则视其为标题并加粗If ActiveCell.Row = 1 ThenWith ActiveCell.Font.Bold = True.Interior.Color = RGB(220, 230, 241) ' 浅蓝色背景End WithEnd IfEnd Sub
假如当前活动的工作表中存在数据表格,用鼠标选中首行的任意单元格,如C1,然后再执行上述代码,结果如下:

执行代码前选择非首行的单元格,则不会有任何变化
3.2 从用户点击的单元格开始,动态生成一个表格框架
Sub CreateQuickTable()' 设置表头ActiveCell.Value = "产品"ActiveCell.Offset(0, 1).Value = "销售额"ActiveCell.Offset(0, 2).Value = "日期"' 为表头区域添加格式With ActiveCell.Resize(1, 3) ' 将区域调整为1行3列.Font.Bold = True.Interior.Color = RGB(240, 240, 240)End WithEnd Sub
执行以上代码前,使用鼠标随便选中工作表中任意单元格,如C6,然后再执行代码,结果如下:


结束语
以下内容也属于区域/单元格操作,感兴趣的朋友可以点击对应链接查看:
【Excel VBA 编程】Excel VBA高效技巧:用SpecialCells方法智能清理Excel数据
【Excel VBA 编程】自动获取已选中区域:application.Selection
【 VBA 编程】动态查找并合并满足条件的单元格(Find + Union 实战)
【Excel VBA 编程】自动获取已选中区域:application.Selection
公众号同时也在不间断地分享免费的编程案例,如果想学习更多的编程知识,无论是用来提升自动化办公效率还是想提升自我,都可以关注我的公众号“努力鸭是黑色的”,解锁更多的VBA技能


