简体   繁体   English

VBA Excel-替换字符串短语中的确切单词

[英]VBA Excel - Replacing exact word in a String Phrase

I have an array with some words that i want to replace with other words, in fact, i have some problem: 我有一些单词要替换为其他单词的数组,实际上,我遇到了一些问题:

Eg: 例如:

  • Var1 -> wksArray Var1-> wksArray
  • Var2 -> wksArrayBigger Var2-> wksArrayBigger
  • string : Dim wksArray, wksArrayBigger as Variant 字符串:Dim wksArray,wksArrayBigger作为Variant

When i try to replace wksArray with "test1", it will cause: 当我尝试将wksArray替换为“ test1”时,它将导致:

  • var1 -> teste1 var1-> teste1
  • var2 -> test1Bigger var2-> test1Bigger
  • string : Dim teste1, teste1Bigger as Variant 字符串:Dim teste1,teste1Bigger as Variant

How can i solve that? 我该如何解决?

Function FindAndReplace(VBProjToClean, varArray)
Dim i, b As Integer
Dim str, replace_str As String
Dim VBC As VBComponent
    For Each VBC In VBProjToClean.VBComponents
            i = 1
            With VBC.CodeModule
                Do Until i > .CountOfLines
                    If Not .ProcOfLine(i, vbext_pk_Proc) = "VBE_Remove_Comments" Then
                        str = .Lines(i, 1)
                    End If
                    For b = 1 To UBound(varArray)
                        If InStr(1, str, varArray(b), vbTextCompare) > 0 Then
                           replace_str = Replace(str, varArray(b), varArray(b) & "banana")
                           .ReplaceLine i, replace_str
                            str = .Lines(i, 1)
                        End If
                    Next b
                i = i + 1
                Loop
            End With
    Next
End Function

While not a proper fix to your problem, you could sort your search list and possibly add some intermediary replacements should there be conflicts you cant resolve. 虽然不是解决问题的适当方法,但是您可以对搜索列表进行排序,并在无法解决冲突时添加一些中间替代品。

arrReplaceBigger -> arIM01
arrReplace -> aR
arIM01 -> aRB ' 

If your just replacing variable names, you could create a function to replace Replace that would do a number of extra replacements, appending however many possibilities for the next character there are. 如果您只是替换变量名,则可以创建一个Replace函数,该函数将执行许多额外的替换操作,但是会为下一个字符添加很多可能性。

white-space, comma, period, left bracket, right bracket, new line, plus, ...., etc

Or instead of doing many extra replacements you could do the same thing using Regular Expressions as David suggests. 或者,您可以像大卫建议的那样使用正则表达式来做相同的事情,而不是进行许多额外的替换。

编写一个函数,以查找某物对于VBA变量是否有效,然后对于每个字符串,查找要替换的字符串的出现,验证前面和后面的positoins不包含有效字符,如果是,替换字符串。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM