如何计算电子邮件中某个字符串的实例并存储该数字?

时间:2016-03-10 21:27:14

标签: vba outlook-vba

所以这个问题已经出现了,但是给出的唯一答案是使用正则表达式,但这对我来说没有意义。

我已经有一个模块正在从选定的电子邮件中复制文本并将其转储到CSV中,我还需要它来计算某个文本字符串的实例并转储该计数。我从我在这里找到的代码中得到了什么:

Sub CopyToExcel()
Dim xlApp As Object
Dim xlWB As Object
Dim xlSheet As Object
Dim olItem As Outlook.MailItem
Dim vText As Variant
Dim sText As String
Dim vItem As Variant
Dim i As Long
Dim rCount As Long
Dim bXStarted As Boolean
Const strPath As String =     
"F:\Scripting\Export\AEX_JUNIPER_LOGGING\Input\orders.csv" 'the path of the     workbook

If Application.ActiveExplorer.Selection.Count = 0 Then
MsgBox "No Items selected!", vbCritical, "Error"
Exit Sub
End If
On Error Resume Next
Set xlApp = GetObject(, "Excel.Application")
If Err <> 0 Then
    Application.StatusBar = "Please wait while Excel source is opened ... "
    Set xlApp = CreateObject("Excel.Application")
    bXStarted = True
    End If
On Error GoTo 0
'Open the workbook to input the data
Set xlWB = xlApp.Workbooks.Open(strPath)
Set xlSheet = xlWB.Sheets("orders")
xlSheet.Rows(2 & ":" & xlSheet.Rows.Count).ClearContents

'Process each selected record
 rCount = xlSheet.UsedRange.Rows.Count
  For Each olItem In Application.ActiveExplorer.Selection
    sText = olItem.Body
    vText = Split(sText, Chr(13))
    'Find the next empty line of the worksheet
     rCount = rCount + 1
    'Check each line of text in the message body
    For i = UBound(vText) To 0 Step -1

      If InStr(1, vText(i), "JOBID:") > 0 Then
            vItem = Split(vText(i), Chr(58))
            xlSheet.Range("A" & rCount) = Trim(vItem(1))
        End If

        If InStr(1, vText(i), "RMA Number   : ") > 0 Then
            vItem = Split(vText(i), Chr(58))
            xlSheet.Range("B" & rCount) = Trim(vItem(1))
        End If

        If InStr(1, vText(i), "DESTINATION WAREHOUSE : ") > 0 Then
            vItem = Split(vText(i), Chr(58))
            xlSheet.Range("C" & rCount) = Trim(vItem(1))
        End If

        If InStr(1, vText(i), "TRACKING NUMBER  : ") > 0 Then
            vItem = Split(vText(i), Chr(58))
            xlSheet.Range("D" & rCount) = Trim(vItem(1))
        End If

    Next i
    xlWB.Save
Next olItem
xlWB.Close SaveChanges:=True
If bXStarted Then
    xlApp.Quit
End If
Set xlApp = Nothing
Set xlWB = Nothing
Set xlSheet = Nothing
Set olItem = Nothing
End Sub

如何修改此内容以包含我需要的新代码?

1 个答案:

答案 0 :(得分:3)

不使用正则表达式,您可以使用类似的算法找到字符串(str)中子字符串(subStr)的出现次数,如下所示:

'Replaces all instances of substring with nothing, effectively removing all instances of it
newStr = Replace(str, subStr, "")

'Determine how many instances were removed
instancesOfSubStr = (len(str) - len(newStr)) / len(subStr)

此时我想你可以在处理完每个单元格之后将它累积在一个全局变量中。