VBA正则expression式 – 试图replacestring中的字符时运行时错误91

为了大量减less不同团队的工作量,我正在做这个任务作为更大的一部分。

我试图读取一个string,并使用正则expression式来replace一个空格(或另一个字符)的一对多的空间。 目前我使用的是本地string,但是在主分区中,这些数据将来自外部的.txt文件。 此.txt中元素之间的空格数可以根据行而不同。

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

使用断点后,我发现我的RegularExpression(re)是空的,但是我不能完全弄清楚如何从这里进步。 如何用破折号replace我的空间? 我一直在这个问题上花了好几个小时,把大部分时间花在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 Regular Expressions 5.5“。我成功地用”vanilla“replace了空格replacefunction,但是由于元素之间的空格数目不同,所以我无法用它来解决我的问题。

埃德:我的.txt文件也不是固定的,有一些不同长度的行,所以我无法在Excel中使用MID函数parsingstring

请帮忙

谢谢,

JH

您没有正确设置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) 

尝试设置您的正则expression式对象中的模式。 现在, re只是一个没有分配真正模式的正则expression式。 尝试在初始化patternstring后添加re.Pattern = pattern

你初始化了模式,但实际上并没有把它绑定到正则expression式中。 当你结束调用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