我正在解析几千封电子邮件,扫描错误。解析代码将结果转储到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中执行它不起作用。任何帮助都将大量占用。
答案 0 :(得分:0)
非常感谢@ A.S.H提供的遗失'。'
它没有使用excel,因为它们默认使用活动工作表。它现在有效!
Call .Range("A3:D30").Sort(Key1:=.Range("A3"), Order1:=xlDescending, Header:=xlNo)