实例需求:在工作表中核对数据时,虽然行列标题都会高亮显示,但是似乎并不明显,因此添加两个列标到活动单元格的箭头,以便于更好的定位。
选中单个单元格效果如下图所示。
选中多个单元格的效果如下图所示。
示例代码如下。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Target
line_h = .Top + .Height / 2
line_v = .Left + .Width / 2
For Each shp In ActiveSheet.Shapes
shp.Delete
Next
Set shp = ActiveSheet.Shapes.AddConnector(msoConnectorStraight, line_v, 0, line_v, .Top)
Set shp = ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 0, line_h, .Left, line_h)
For Each shp In ActiveSheet.Shapes
With shp.Line
.EndArrowheadStyle = msoArrowheadTriangle
.Visible = msoTrue
.ForeColor.RGB = RGB(255, 0, 0)
.Weight = 3
.Transparency = 0
End With
Next
End With
Set shp = Nothing
End Sub
【代码解析】
第3行代码获取水平箭头的位置。
第4行代码获取垂直箭头的位置。
第5~7行代码清除工作表中的全部Shape对象,如果工作表中需要使用其他Shape对象,第6行代码需要进行判断,避免误删除其他对象。
第8行代码添加垂直箭头,起点坐标为 (line_v, 0),终点坐标为(line_v, .Top)。
第9行代码添加水平箭头,起点坐标为 (0, line_h),终点坐标为(.Left, line_h)。
第10~18行代码设置水平箭头和垂直箭头的格式。
第12行代码设置箭头样式。
第13行代码设置箭头可见。
第14行代码设置箭头颜色。
第15行代码设置线宽。
第16行代码设置透明度为0,即完全不透明。
第20行代码释放对象变量占用的系统资源。
代码逻辑并不复杂,其核心点在于如何确认箭头的起点和终点坐标位置。