VBA小技巧
运用VBA时,可以构造一些函数去实现诸如printf的方便函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | Public Function printf(mask As String , ParamArray tokens()) As String Dim i As Long For i = 0 To UBound(tokens) mask = Replace(mask, "{" & i & "}" , tokens(i)) Next printf = mask End Function Sub test() cc = genSearchedArr(6554, Array( "a" , "b" , "e" , "f" , "g" )) MsgBox cc End Sub Function genSearchedLines(searchedRow As Integer , columns()) As String Dim searchedVal As String Dim i As Long For i = 0 To UBound(columns) If i = 0 Then searchedVal = printf( "{0}{1}" , columns(i), searchedRow) Else searchedVal = searchedVal & printf( "&{0}{1}" , columns(i), searchedRow) End If Next genSearchedLines = searchedVal End Function Function genSearchedArr(searchedRow As Integer , columns()) As String Dim searchedArr As String Dim i As Long For i = 0 To UBound(columns) If i = 0 Then searchedArr = printf( "{0}1:{0}{1}" , columns(i), (searchedRow - 1)) Else searchedArr = searchedArr & printf( "&{0}1:{0}{1}" , columns(i), (searchedRow - 1)) End If Next genSearchedArr = searchedArr End Function |
特别地,将以上辅助函数用于Match,会非常方便:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Sub test() Dim warehouseWorkbook As Workbook Set warehouseWorkbook = Workbooks( "测试表.xls" ) Set w1 = warehouseWorkbook.Sheets( "terry" ) Dim paraArr() paraArr = Array( "b" , "e" , "f" , "g" , "h" , "i" ) eva_exp = printf( "Match({0}, {1}, 0)" , _ genSearchedLines(12, paraArr), _ genSearchedArr(12, paraArr)) MsgBox w1.Evaluate(eva_exp) End Sub |
1 2 3 4 5 6 7 8 9 10 11 12 | Sub test() Dim warehouseWorkbook As Workbook Set warehouseWorkbook = Workbooks( "测试表.xls" ) Set w1 = warehouseWorkbook.Sheets( "terry" ) eva_exp = printf( "Match({0}, {1}, 0)" , _ genSearchedLines(12, "a" , "b" , "c" ), _ genSearchedArr(12, "a" , "b" , "c" )) MsgBox w1.Evaluate(eva_exp) End Sub |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)