2012-08-23 57 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