1700429029
5.5 基于地图选择的动态图表(鼠标移动版)
1700429030
1700429031
5.4节介绍的鼠标点击版的基于地图选择的动态图表,每次切换区域都需要在地图上点击一下,点多了手就会有些不适。而我一直想模仿的一种效果是,鼠标在地图上移动,当悬停在某个区域上时,图表就自动切换为该区域的数据。
1700429032
1700429033
很多网友一起参与了这个讨论,提出了多种做法,包括图表事件法、工作表事件法、钩子法等。其中网友chrisfang的做法最为简洁[2],我在其基础之上进行了简化和完善,介绍给大家。
1700429034
1700429035
作图思路
1700429036
1700429037
在Excel中,可以通过API函数获取鼠标位置,然后获取处于这个位置上的对象。如果是地图图形,则将其名称记录下来,作为动态图表的输入参数。剩下的事情,就与5.4节一样了。
1700429038
1700429039
作图步骤
1700429040
1700429041
1700429042
1.构建地图模型。
1700429043
1700429044
还是利用5.4节的模型文件,这里我们以广东省地图来讲解。如图5-13所示,在dashboard工作表中放置地图图形和动态图表,用户选择结果放在A1单元格中,将作为动态图表模型的输入参数。源数据及动态图表辅助数据均放在data1工作表中。
1700429045
1700429046
1700429047
1700429048
1700429049
图5-13 基于地图选择的动态图表模型(鼠标移动版) 范例文件名:5.5基于地图选择的动态图表(鼠标移动版).xls(或.xlsm)
1700429050
1700429051
2.编写地图选择器宏。
1700429052
1700429053
根据前述思路,编写如图5-14所示的宏代码。
1700429054
1700429055
1700429056
1700429057
1700429058
图5-14 通过捕捉鼠标位置获知用户选择的宏代码
1700429059
1700429060
在这段宏代码中,先调用API函数GetCursorPos获取鼠标当前所在的位置坐标,然后利用RangeFromPoint函数获取这个坐标位置上的对象。当这个对象是地图图形时,将其名称记录于A1单元格,也就是用户当前选择的区域名。同时,要将该区域图形填充为表示已选中的亮色,并将之前选中的图形还原为表示未选中的淡色。这就是鼠标移动版地图选择器的功能。
1700429061
1700429062
与5.4节的模型相同,A1是动态模型的输入参数,作为图表数据源的辅助区域将自动刷新为与A1中区域名称对应的数据。
1700429063
1700429064
3.提供启用移动选择器的选项。
1700429065
1700429066
绘制一个启用鼠标移过切换区域的复选框,链接到单元格A2,并为其编写如图5-15所示的宏,即当用户选择复选框时,根据其选择结果,决定调用还是终止移动选择器。
1700429067
1700429068
1700429069
1700429070
1700429071
图5-15 启用或者停用选择器的宏
1700429072
1700429073
4.测试模型。
1700429074
1700429075
现在,勾选启用鼠标移过切换区域复选框,当鼠标在地图上移动时,地图会突出显示当前悬停的区域,右侧的图表也会随之发生变化,显示为当前鼠标所悬停区域的数据。检查并确认数据正确。
1700429076
1700429077
这种操作非常轻灵,完美模仿了国外网站上的操作体验,模型效果也体现出一种数据的灵动之美。若取消勾选启用鼠标移过切换区域复选框,此功能消失。
[
上一页 ]
[ :1.700429028e+09 ]
[
下一页 ]