随着自动化功能不断开发深入,相对应的表格标题字段也会随之增加,这就带来一个问题,历史程序段对表格单元格索引都是简单粗暴输入序号,像这样。然后我现在需要在第三列之前新增一列,原本的第三列就变成了第四列,那么程序中必须也要对应调整才能维持正确引用。这种机械式引用虽然很方便,但是维护起来简直就是灾难
,当有N段程序,每段程序都有M个这种引用,挨个调整得疯。所以,为了后续不再这么痛苦,必须让它能自适应寻踪,至少能通过标题文字判断位置。于是,这就想到了一个非常NEW Bility 的东西,字典。在字典面前,什么数组,集合,都是弟弟,毕竟,字典是自带索引的!还具备唯一特性。Sub Add(Key, Item)'key:键值,在字典中是唯一的,不能反复添加'Item:项值,可以是数字,字符串,数组,集合等各种变量
Property Key(Key)'调用某个键下对应的属性值'比如key("A")就是返回A这个键对应的Item值
Public PropTitDicA As New Dictionary '非通用化属性表头'申明一个全局字典PropTitDicA
Function SetGolDic() '给全局字典赋值Dim i As Integer With ThisWorkbook.ActiveSheet PropTitDicA.RemoveAll '先清空一下 i = 1 Do While .Cells(1, i) <> "" PropTitDicA.Add .Cells(1, i).Value, i i = i + 1 Loop End WithEnd Function'这样一来表头以及对应的列号都存到了字典里。
.Cells(1, PropTitDicA("文件位置"))'第1行第2列引用方式就可以变为通过标题文字进行追踪
每段程序运行最初都需要调用一次SetGolDic方法刷新字典,确保运行程序时标题文字一定能对上。程序中.Cells引用的文字要和表格中标题符合,如果表格标题改了内容,但是程序中没改,那就容易报错,因为字典查不到key。这样一来,表格标题列随便改位置,程序都能准确定位到目标,就算标题改了,编程界面搜索替换一次性完事。除了字典,也可以通过worksheetfunction调用Excel函数定位单元格,比如vlookup,match,方法有很多,不过我还是更偏爱字典一些,简单粗暴,报错概率还小。