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

  • 请注意代码中注释的位置,通过代码前后可能出现的特定符号,用like来区分出哪些是独立的“王浩”,哪些是“王浩然”中的王浩。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值