我有一个这样的字符串
“C://Documents/TestUser/WWW/Help/Files/Move_Help.txt”
并且必须将
Move_Help.txt
替换为 Move_Job.txt
我在 VBA EXCEL 中使用以下代码
str = "C://Documents/TestUser/WWW/Help/Files/Move_Help.txt"
rlpStr = Replace(str, 'Help', 'Job')
我正在
"C://Documents/TestUser/WWW/Job/Files/Move_Job.txt"
预计
"C://Documents/TestUser/WWW/Help/Files/Move_Job.txt"
您能帮忙解决一下吗?
仅供参考:我无法将 Move_Help 与 Move_Job 匹配(Move_ 不是常量。它可以是任何字符串)
有一个单行解决方案:
rlpStr = StrReverse(Replace(StrReverse(str), StrReverse("Help"), StrReverse("Job"), , 1))
从技术上讲,它比组合
InStr
和 Replace
的效率稍低,但如果需要,可以在另一个表达式中使用。另外,我喜欢单行解决方案,只要它们不难以理解。
下面代码中的技术能满足您的要求吗?
Str 的初始值为:
C://Documents/TestUser/WWW/Help/Files/Move_Help.txt
最终值为:
C://Documents/TestUser/WWW/Help/Files/Move_Job.txt
代码使用
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
Str =“C://Documents/TestUser/WWW/Help/Files/Move_Help.txt”
ValueCrnt =“帮助” 新值=“工作”
Pos = InStrRev(Str, ValueCrnt)
如果 Pos > 0 那么 Str = Mid(Str, 1, Pos - 1) & 替换(Str, ValueCrnt, ValueNew, Pos) 结束如果
Wscript.Echo Str
str =“C://Documents/TestUser/WWW/Help/Files/Move_Help.txt” rlpStr = 替换(str, 'Move_Help', 'Move_Job')