当前位置:   article > 正文

VBA一键给代码加注释(翻译表名、字段名)_vba翻译器

vba翻译器

背景:
本人做ETL,在接触新项目的时候,会同时翻看处理大量的sql脚本文件,面对动辄几百个字段名和表名,无法快速阅读理解代码,于是想把所有的表名和字段名添加上注释,这样可以快速看懂代码。

适用情况:
有数据字典:所有需要翻译的表名或者字段名都有对应的中文解释。

事前准备:
按图中样式准备好excel表,A列为需要翻译的内容,B列为A列+对应注释。
在这里插入图片描述
思路及原理:
本代码的思路是利用两层循环,按特定顺位把A列内容替换成B列内容。

外层循环:
(用来循环行数,从1行到最后一行,通过行数可以选定A列和B列的单元格)
内层循环:
(获取到A列单元格内容后,在代码中循环获取可以执行替换的顺位号)
替换操作:按照对应的顺位号执行替换
结束内层循环
结束外层循环

  • 这里解释下为什么内层循环需要获取特定顺位号,而不是直接把A列中的内容直接全部替换为B列中的内容,因为会出现这种情况:A列同时存在“王浩然”,“王浩”,因为是循环执行替换,如果直接替换会出现下图中的结果。
    在这里插入图片描述

在这里插入图片描述

  • 所以这里应该想办法把王浩然和王浩分别识别为独立的个体并记录下对应顺位,之后按顺位执行替换,这样就不会在循环到“王浩”的时候误伤到之前已经替换结束的“王浩然”。

代码实现:


Sub trans_usecells()


    Dim source As Range
    Dim target As Range
    Dim sourceArea As Range
    Dim sCol As Integer
    Dim tCol As Integer
    Dim FirstRow As Integer
    Dim LastRow As Integer


    On Error GoTo 100:
    Set source = Application.InputBox("请选择要替换掉的内容所在列", "选择单元格", , , , , , 8)
    
     sCol = source.Column
     FirstRow = source.End(xlUp).Row
     LastRow = source.End(xlDown).Row
    Debug.Print ("要替换掉的内容所在区域为:" & source.End(xlUp).Address & ":" & source.End(xlDown).Address)

    Set target = Application.InputBox("请选择要替换成的内容所在列", "选择单元格", , , , , , 8)
     tCol = target.Column

    Debug.Print ("要替换成的内容所在区域为:" & target.End(xlUp).Address & ":" & target.End(xlDown).Address)

    Set sourceArea = Application.InputBox("请选择要翻译的单元格", "选择单元格", , , , , , 8)

    Debug.Print ("翻译的单元格地址为:" & sourceArea.Address)
    
    Dim i%, stnum%, x%, j%, k%, w, ss As String
    Dim c_num()
        
    For i = FirstRow To LastRow

        Do
            x = InStr(x + 1, sourceArea, Cells(i, sCol))
                If x = 0 Then Exit Do
'第一个和第二个like后面的"[]"中,分别填写要替换的内容前后相邻的特征字符(比如本例中:在替换ID的时候,ID的前面和后面
'只可能出现“,. ()”这些字符,如果没有这种特征字符,[]里面可以写*代表所有),避免替换“王浩”的时候误伤“王浩然”。
                If Mid(sourceArea, x - 1, 1) Like "[(., ]" And Mid(sourceArea, x + Len(Cells(i, sCol)), 1) Like "[),. ]" Then
                    j = j + 1
                    k = k + 1

                    ReDim Preserve c_num(1 To j)
                    c_num(j) = k
                Else
                    k = k + 1
                End If
        Loop

        If j > 0 Then
            For Each w In c_num
            sourceArea = Application.WorksheetFunction.Substitute(sourceArea, Cells(i, sCol), Cells(i, tCol), w)
            Next
            w = 0
        End If
        x = 0
        j = 0
        k = 0
    Next i
100:    Exit Sub
End Sub

  • 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
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 请注意代码中注释的位置,通过代码前后可能出现的特定符号,用like来区分出哪些是独立的“王浩”,哪些是“王浩然”中的王浩。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/661944
推荐阅读
相关标签
  

闽ICP备14008679号