仅替换VBA中字符串中最后一次匹配

Isa*_*vaa 4 string excel vba replace excel-vba

我有这样的字符串

"C://Documents/TestUser/WWW/Help/Files/Move_Help.txt"

而不得不更换Move_Help.txtMove_Job.txt

我在VBA EXCEL中使用以下代码

str = "C://Documents/TestUser/WWW/Help/Files/Move_Help.txt"
rlpStr = Replace(str, 'Help', 'Job')
Run Code Online (Sandbox Code Playgroud)

我正进入(状态

"C://Documents/TestUser/WWW/Job/Files/Move_Job.txt"
Run Code Online (Sandbox Code Playgroud)

预期

"C://Documents/TestUser/WWW/Help/Files/Move_Job.txt"
Run Code Online (Sandbox Code Playgroud)

你能帮忙吗?

仅供参考:我无法将Move_Help与Move_Job匹配(Move_不是常量.它可以是任何字符串)

Eng*_*ast 16

这是一个单行解决方案:

rlpStr = StrReverse(Replace(StrReverse(str), StrReverse("Help"),  StrReverse("Job"), , 1))
Run Code Online (Sandbox Code Playgroud)

从技术上讲,它的效率略低于组合InStr,Replace但如果需要,它可以在另一个表达式中使用.此外,我喜欢单线解决方案,只要它们不是不可理解的.


Ton*_*ore 5

下面的代码中的技术是否符合您的要求?

Str的初始值是:

 C://Documents/TestUser/WWW/Help/Files/Move_Help.txt
Run Code Online (Sandbox Code Playgroud)

最终价值是:

 C://Documents/TestUser/WWW/Help/Files/Move_Job.txt
Run Code Online (Sandbox Code Playgroud)

该代码用于InStrRev定位最后一次出现ValueCrnt,如果ValueCrnt存在,如果存在,它将替换最后一次出现ValueNew.

Option Explicit
Sub Demo()

  Dim Pos As Long
  Dim Str As String
  Dim ValueCrnt As String
  Dim ValueNew As String

  Str = "C://Documents/TestUser/WWW/Help/Files/Move_Help.txt"

  ValueCrnt = "Help"
  ValueNew = "Job"

  Pos = InStrRev(Str, ValueCrnt)

  If Pos > 0 Then
    Str = Mid(Str, 1, Pos - 1) & Replace(Str, ValueCrnt, ValueNew, Pos)
  End If

  Debug.Print Str

End Sub
Run Code Online (Sandbox Code Playgroud)