尝试替换字符串中的字符时,VBA正则表达式 - 运行时错误91

时间:2013-05-30 15:29:55

标签: regex excel vba

我正在执行此任务,作为更大子项的一部分,以便大规模减少不同团队的工作量。

我正在尝试读取字符串并使用正则表达式用单个空格(或另一个字符)替换一对多空格。目前我正在使用本地字符串,但是在主子数据库中,此数据将来自外部.txt文件。此.txt中元素之间的空格数可能会因行而异。

我使用下面的代码,并用短划线替换空格。我在下面的代码中尝试了不同的变体和不同的逻辑,但总是得到“运行时错误'91':对象变量或没有设置时钟变量”在线“c = re.Replace(s,replacement)”

使用断点后,我发现我的RegularExpression(重新)是空的,但我无法弄清楚如何从这里开始。如何用破折号替换空格?我在这个问题上遇到了好几个小时,大部分时间都花在Google上,看看是否有人遇到过类似的问题。

Sub testWC()

Dim s As String
Dim c As String
Dim re As RegExp

s = "hello      World"

Dim pattern As String
pattern = "\s+"
Dim replacement As String
replacement = "-"

c = re.Replace(s, replacement)
Debug.Print (c)

End Sub

额外信息:使用Excel 2010.已成功链接我的所有引用(Microsoft VBScript正则表达式5.5“。我已成功使用vanilla”替换“功能替换空格,但是元素之间的空格数量各不相同我无法用它来解决我的问题。

Ed:我的.txt文件也没有修复,有很多行长度不同所以我无法在excel中使用MID函数来剖析字符串

请帮忙

谢谢,

J.H。

2 个答案:

答案 0 :(得分:1)

您没有正确设置RegExp对象。

Dim pattern As String
pattern = "\s+" ' pattern is just a local string, not bound to the RegExp object!

你需要这样做:

Dim re As RegExp
Set re = New RegExp
re.Pattern = "\s+"    ' Now the pattern is bound to the RegExp object
re.Global = True      ' Assuming you want to replace *all* matches

s = "hello      World"
Dim replacement As String
replacement = "-"

c = re.Replace(s, replacement)

答案 1 :(得分:0)

尝试在Regex对象中设置模式。现在,re只是一个没有分配实际模式的正则表达式。初始化re.Pattern = pattern字符串后,请尝试添加pattern

您初始化了模式,但实际上并未将其挂钩到正则表达式中。当你最终打电话给replace时,它并不知道它在寻找模式方面的意义,并抛出错误。

尝试将re设为New RegExp

Sub testWC()

Dim s As String
Dim c As String
Dim re As RegExp
Set re = New RegExp

s = "hello      World"

Dim pattern As String
pattern = "\s+"
re.Pattern = pattern
Dim replacement As String
replacement = "-"

c = re.Replace(s, replacement)
Debug.Print (c)

End Sub