2012-08-23 132 views
0
不排序

所以基本上我有一個名爲xlobj Excel對象,並在此SNIPPIT之前我的代碼,如果我這裏指的是xlobj我要說VBA宏稱爲在Outlook中的Excel

xlobj.Range(blahh blahh blahh).Value = "something" 

現在我的目標是在Excel中使用我的腳本的其餘部分從最新到最舊的所有值進行排序。我在Excel中使用了記錄宏函數來獲取宏代碼,然後將其粘貼到我的Outlook VBA中並附加了xlobj。所有必要的代碼行之前。

它不工作,但它的一切,但物理分選(選擇發生,代碼編譯)

xlobj.Range("A2:E900").Select 
xlobj.Sort.SortFields.Clear 
xlobj.Sort.SortFields.Add Key:=xlobj.Range("A1"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal 
With xlobj.Sort 
    .SetRange xlobj.Range("A2:E900") 
    .Header = xlNo 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    .Apply 
End With 

有誰看到代碼中的問題?

EDIT

Private Sub Extract(ByVal oFolder As Outlook.Folder) 

On Error Resume Next 
Set myOlApp = Outlook.Application 
Set mynamespace = myOlApp.GetNamespace("mapi") 
Set MyFolder = oFolder 

Set xlobj = CreateObject("excel.application.14") 
Set xlobjWbk = xlobj.Workbooks.Open("c:\Users\(username)\Desktop\(filename).xlsx") 
xlobj.Visible = True 
xlobj.Application.DisplayAlerts = False 

'Set Heading 
xlobj.Range("a" & 1).Value = "Recieved Time" 
xlobj.Range("b" & 1).Value = "Sender Email" 
xlobj.Range("c" & 1).Value = "Subject" 
xlobj.Range("d" & 1).Value = "Sender Name" 
xlobj.Range("e" & 1).Value = "Body" 
xlobj.Columns("A").ColumnWidth = 17 
xlobj.Columns("B").ColumnWidth = 32 
xlobj.Columns("C").ColumnWidth = 36 
xlobj.Columns("D").ColumnWidth = 19 
xlobj.Columns("E").ColumnWidth = 56 

For i = MyFolder.Items.Count To MyFolder.Items.Count + 100 
xlobj.Range("a" & i + 1).Value = "" 
xlobj.Range("b" & i + 1).Value = "" 
xlobj.Range("C" & i + 1).Value = "" 
xlobj.Range("d" & i + 1).Value = "" 
xlobj.Range("e" & i + 1).Value = "" 
Next 

For i = 1 To MyFolder.Items.Count 
Set myItem = MyFolder.Items(i) 
msgtext = myItem.body 

xlobj.Range("a" & i + 1).Value = myItem.ReceivedTime 
xlobj.Range("b" & i + 1).Value = myItem.SenderEmailAddress 
xlobj.Range("C" & i + 1).Value = myItem.Subject 
xlobj.Range("d" & i + 1).Value = myItem.SenderName 
xlobj.Range("e" & i + 1).Value = msgtext 
xlobj.Columns("A:E").VerticalAlignment = xlVAlignTop 
Next 

xlobj.Range("A2:E900").Select 
xlobj.Sort.SortFields.Clear 
xlobj.Sort.SortFields.Add Key:=xlobj.Range("A1"), SortOn:=xlSortOnValues,  Order:=xlDescending, DataOption:=xlSortNormal 
With xlobj.Sort 
    .SetRange xlobj.Range("A1:E900") 
    .Header = xlNo 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    .Apply 
End With 

此腳本進入通過參數傳遞的文件夾,然後轉儲收件箱到Excel表格

+0

我可以問一下,我想知道是否將xlobj設置爲正確的Excel實例/正確的工作表內。我可能是錯的(爲什麼我想看更多的代碼),但它看起來像你應該有更多像'xlobj.Sheets(1).Range(blahh blahh blahh)' – Gaffi

回答

0
With xlobj.Sort 
    .SetRange xlobj.Range("A1:E900") '<--- 
    .Header = xlYes     '<--- 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    .Apply 
End With 
+0

這並沒有改變任何東西。 .SetRange應該是A2,因爲A1的行是標題。我不想排序標題,我想排序在每個標題下面的列中的數據(日期) – bneigher

+0

設置.Header到xlYes告訴Excel你有一個標題行,所以它*不會*排序它。 –

+0

但蒂姆,他的原始代碼從'A2' *開始,*有'xlNo'。 – Gaffi

0

更改爲xlobj.Sort.SortFields。添加鍵:= xlobj.Range(「A2」),SortOn:= xlSortOnValues,Order:= xlDescending,DataOption:= xlSortNormal