2017-02-10 21 views
1

我正在解析通過幾千個電子郵件掃描錯誤。解析代碼將結果轉儲爲excel未排序爲4列。答:命中,B:總計,C:百分比,D:用戶。如何通過VBA對Outlook中的excel列進行排序。代碼沒有排序

這工作正常。不過,我想按總點擊量(或百分比)對數據進行排序,而無需在Excel中手動執行。這是因爲這會生成一個包含多個其他字段組的報告,我想對每個字段進行排序。

這個問題是沒有什麼,我想出來的是能夠從前景實際排序。代碼執行沒有錯誤,但沒有任何反應。我能夠使用以下方式成功地在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

您是否嘗試過正確的代碼:'Key1:=。Range(「A3」)'(Range before Range)?無論如何,即使不修復問題,也必須進行此修改。 –

+0

@ A.S.H我認爲你發現了這個問題。這在沒有'。'的Excel中工作。因爲它默認爲activesheet。我必須等到明天回去工作才能進行測試。如果有效,我會在這裏更新。 –

+0

如果你使用'.Range(「A3:D30」),它適用於我。Sort Key1:=。Range(「A3」),Order1:= xlDescending,Header:= xlNo',即:移除'Call',remove括號並在第二個'Range'出現之前添加該點 – user3598756

回答

0

非常感謝@ A.S.H提供的缺失提示。

它沒有它在excel中工作,因爲它們默認使用活動工作表。它現在工作!

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