笔者用Excel VBA开发计划排产软件时,经常遇到一些用户反馈插入一列、删除一列、又或者调整的某列的位置,然后排产软件就无法正常使用了,这也给用户体验带来了一点遗憾。那么Excel是否也能够像其他应用程序一样,不受列表题位置影响呢?其实用Excel VBA自定义函数也能够轻松做到的,下面我分享给大家一个自定义函数。
Function Recol_no(field_name As String, current_row As Long)
'功能:返回字段名/列标题所在的列号
'field_name:查找的字段名
'current_row:查找区域的行号
Recol_no = Application.Match(field_name, Rows(current_row), 0)
End Function
在【开发工具】选项卡,打开Visual Basic代码编辑器,插入一个模块,复制以上代码,这样一个名称为Recol_no()函数就定义好了,它的功能就是返回字段名/列标题所在的列号,只需传入两个参数,field_name表示要查找的列表题/字段名;current_row表示要查找的内容所在的行号。
为方便大家理解,下面我用示例演示一下。
示例的功能需求很简单,就是要用Excel VBA代码事件进行销售额计算,【销售额计算】按钮事件代码如下:
Sub 销售额计算()
Dim 单价_no, 销量_no, 销售额_no As Long '单价列号,销量列号,销售额列号
Dim 当前行_no As Long
单价_no = Recol_no("单价", 1)
销量_no = Recol_no("销量", 1)
销售额_no = Recol_no("销售额", 1)
For 当前行_no = 2 To 4
Cells(当前行_no, 销售额_no) = Cells(当前行_no, 销量_no) * Cells(当前行_no, 单价_no)
Next
End Sub
单击【销售额计算】按钮后,计算结果显示如下图:
下面将单价、销量、销售额这三列位置全部调整,如下图所示:
再次单击【销售额计算】按钮,程序运行正常,而且计算结果显示完全一致,如下图显示:
由此可见,单价、销量、销售额的数据列可以随意调整,其计算结果都是正确的。