【发布时间】:2017-08-17 23:44:10
【问题描述】:
我正在尝试在 Excel 2015 宏中使用 RegEx。我不知道我是否做错了什么,但每次我运行它时,我的 Excel 都会崩溃。这是宏:
Sub MakeExplicit()
Dim whitespace As RegExp
Set whitespace = New RegExp
whitespace.Pattern = "\s+"
whitespace.MultiLine = True
whitespace.Global = True
Dim implicit As RegExp
Set implicit = New RegExp
implicit.Pattern = "^\d+-\d+$"
Dim row As range
For Each row In ActiveSheet.UsedRange.Rows
Dim first As range
Set first = row.Cells(1, 1)
Dim str As String
str = first.Text
str = whitespace.Replace(str, Nothing)
If implicit.Test(str) Then 'FIXME here it crashes
Dim FromTo As Variant
FromTo = Split(str, "-")
Dim sFrom, sTo As Integer
sFrom = FromTo(1)
sTo = FromTo(2)
' doplň chybějící číslice
' např [2345, 78] doplní
' na [2345, 2378]
sTo = Left( _
sFrom, _
Len(sFrom) - Len(sTo) _
) + sTo
Dim iFrom, iTo As Integer
iFrom = CInt(sFrom)
iTo = CInt(sTo)
If iFrom > iTo Then _
Err.Raise 42, first.Address, _
"Wrong order of numbers!"
Dim i As Integer
For i = iFrom To iTo
' some more code
Next i
End If
Next row
End Sub
通过使用调试器,我发现当代码到达“If implicit.Test(str) Then”时它会崩溃,这意味着 RegEx 有问题。这些是项目的参考资料:
显而易见的问题是如何让它工作? VBA 本身就是一种非常丑陋的语言,所以我对如何没有偏好,只是让它工作够了。
【问题讨论】: