1
我们已经导入了几封电子邮件(真正为1000+),其中有各种数据。我正在寻找一种方法来从电子邮件中提取工资范围。电子邮件看起来是这样的:VBA数据解析 - 带用户定义功能的regEx循环
John Doe:您好,
下面是修改后的电子邮件反映在预算批准的薪水 的变化。
职位描述进行了审查,并已经从 国家人事制度基于在 学术或学术支持单位进行专业工作豁免。
全薪范围为$ XX,XXX至$ XXX,XXX。批准的预算 工资是$ XX,XXX。
此职位不符合加班补偿条件。
UPDATE UPDATE - @ A.S.H。精美地回答了我的原始问题,请参阅下面的答案。一旦我意识到自己的错误,我也修复了UDF功能。现在都在工作!
这里是我的代码:
用户定义的函数:
Function GetDollars(s As String, item As Long)
With CreateObject("vbscript.regexp")
.Global = True
.Pattern = "\$\d*[,\d]*\d*"
On Error Resume Next
If .test(s) Then Set GetDollars = .Execute(s)(item - 1)
If Err <> 0 Then GetDollars = vbNullString
End With
End Function
环子:
Sub salaryRanges()
'Loops through the Email Body and pull out Salary Ranges
Dim strText As String
lastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
Set selCol = Range("C1:C" & lastRow)
For Each oRng In selCol
strText = oRng.Value
oRng.Offset(0, 1).Value = GetDollars(strText, 1)
Next
Set oRng = Nothing
End Sub
列(0,0)不工作这让我失配误差或对象变量错误。
想法?
谢谢,这与出错误运行,但不会产生结果。当我在上面放置一个监视器时,在设置reg = CreateObject之后它为reg.test提供了“错误的参数数目”,然后在循环中跳过r.offset(,1).value ......因为我假设它并不是真的。思考? –
@JasonLeach数据位于何处?它在C列吗?并且它是如何说reg.test *的“错误数量的参数”,因为你说它运行没有错误? –
数据在列C是,它运行时没有错误,因为它进入“If reg.test(r.Text)Then”,然后跳到“End If”跳过“r.Offset ....”代码行“如果我正确理解”如果reg.test“似乎不是真的。那有意义吗?谢谢! –