如何通过VBA对outlook中的excel列进行排序。代码excutes by不排序

时间:2017-02-10 00:13:03

标签: excel vba excel-vba sorting outlook

我正在解析几千封电子邮件,扫描错误。解析代码将结果转储到excel unsorted中,分为4列。答:点击,B:总计,C:百分比,D:用户。

这很好用。但是我想按总点击次数(或百分比)对这些数据进行排序,而不必在excel中手动完成。这是因为这会生成一个包含多个其他字段组的报表,我希望对每个字段组进行排序。

问题是我没想到能够从outlook中进行实际排序。代码执行没有错误但没有任何反应。我能够使用以下内容成功地对excel宏进行排序。

Sub test()
    With ActiveSheet
        Call .Range("A3:D30").Sort(Key1:=Range("A3"), Order1:=xlDescending, Header:=xlNo)
    End With
End Sub

然后我将调用行放入我的outlook vba代码中,定义了所有内容(引用了Excel对象库)

        With xlSheet

            If i > 0 Then hitp = Round(hits / i * 100, 1) Else hitp = "0"

            Dim vstr As Variant
            Dim temph As String

            j = 2
            .Range("A1:D1").Merge
            .Range("A1:D1").Value = "Basic Errors"
            .cells(j, 1).Value = "Total Hits:"
            .cells(j, 2).Value = "Total Sent:"
            .cells(j, 3).Value = "Percentage:"
            .cells(j, 4).Value = "Agent:"

            For Each vstr In userhit.Keys()
                j = j + 1
                temph = userhit(vstr)
                If temph = "" Then temph = "0"
                .cells(j, 1).Value = temph
                .cells(j, 2).Value = userhit(vstr) + userclean(vstr)
                .cells(j, 3).Value = Round(userhit(vstr) / (userhit(vstr) + userclean(vstr)) * 100, 1) & "%"
                .cells(j, 4).Value = vstr
                DoEvents
            Next

            Call .Range("A3:D30").Sort(Key1:=Range("A3"), Order1:=xlDescending, Header:=xlNo)

        End With

我正在使用字典(其中14个)来跟踪各种事情,这就是为什么在转储之前在vba中对它们进行排序会更加乏味,尽管如果我绝望的话可能会这样做。遗憾的是,尽管运行没有错误,但是如果我将其复制到excel宏中,这并不能在Excel中进行任何排序。

我还看到了另一种方法,就像这篇文章https://stackoverflow.com/questions/22220127/sorting-excel-range-in-class-module-from-outlook-or-access-vba

中所示
With xlSheet.Sort
        .SetRange Range((LeftColStr & RowStart & ":" & RightColStr & RowEnd))
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
End With

但是当我尝试时,最终对他或我不起作用。所以我切换到这个当前的方法,认为它会更容易,但事实并非如此。如果它在excel宏中,代码确实有效,但是尽管在outlook中执行它不起作用。任何帮助都将大量占用。

1 个答案:

答案 0 :(得分:0)

非常感谢@ A.S.H提供的遗失'。'

它没有使用excel,因为它们默认使用活动工作表。它现在有效!

Call .Range("A3:D30").Sort(Key1:=.Range("A3"), Order1:=xlDescending, Header:=xlNo)