减少处理时间字符串分解

时间:2017-04-12 16:07:35

标签: string vba performance excel-vba outlook

我希望你能帮助我减少代码的运行时间:

<input
    type="text"
    name="dateofbirth"
    id="dateofbirth"
    placeholder="dd/mm/yyyy"
    onkeyup="
        var v = this.value;
        if (v.match(/^\d{2}$/) !== null) {
            this.value = v + '/';
        } else if (v.match(/^\d{2}\/\d{2}$/) !== null) {
            this.value = v + '/';
        }"
    maxlength="10"
>
  1. 代码的第一部分是在Outlook中查找特定的电子邮件,然后将其索引存储在Dim position As Long Dim CellRow As Long CellRow = 2 For position = InStr(Inbox.Items(MostRecentVersionIndex).body, "Name") To Len(Inbox.Items(MostRecentVersionIndex).body) ThisWorkbook.Sheets(1).Range("A" & CellRow) = Mid(Inbox.Items(MostRecentVersionIndex).body, InStr(position, Inbox.Items(MostRecentVersionIndex).body, "SCA"), InStr(InStr(position, Inbox.Items(MostRecentVersionIndex).body, "SCA") + 1, Inbox.Items(MostRecentVersionIndex).body, "SCA") - InStr(position, Inbox.Items(MostRecentVersionIndex).body, "SCA")) CellRow = CellRow + 1 position = InStr(InStr(position, Inbox.Items(MostRecentVersionIndex).body, "SCA") + 1, Inbox.Items(MostRecentVersionIndex).body, "SCA") - 1 Next position 中。 (未在上面显示)
  2. 这封电子邮件在其正文中有大量记录(大约50万个字符),我的代码的第二部分(如上所示)包括将每个记录放在Sheet 1的A列的新行中。我知道每条记录都以&#34; SCA&#34;这就是我将它用作分割参数的原因。
  3. 问题:运行整个事情需要(不出所料)大约10分钟。

    有关如何减少这个的想法吗?

    编辑:这是完整的代码(在解决方案更新后):

    MostRecentVersionIndex

1 个答案:

答案 0 :(得分:1)

这是多点点符号。首先读取项目,然后读取它的主体,然后循环遍历字符。

您需要意识到每次call Inbox.Items(MostRecentVersionIndex).body时,Outlook都会返回Items集合,滚动到索引MostRecentVersionIndex,打开消息,然后读取其(巨大的)Body属性。你没有充分理由这样做5到6次。

set Item = Inbox.Items(MostRecentVersionIndex)
body = item.Body
For position = InStr(body, "Name") To Len(body)
            ThisWorkbook.Sheets(1).Range("A" & CellRow) = Mid(body, InStr(position, body, "SCA"), InStr(InStr(position, body, "SCA") + 1, body, "SCA") - InStr(position, body, "SCA"))
            CellRow = CellRow + 1
            position = InStr(InStr(position, body, "SCA") + 1, body, "SCA") - 1
        Next position