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

   

 

posted @   kid551  阅读(305)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示