2017-02-10 12 views
1

Я просматриваю несколько тысяч писем, проверяющих ошибки. Код синтаксического анализа выгружает результат в excel unsorted в 4 столбца. A: Hits, B: Total, C: Percentage, D: User.Как сортировать столбцы excel из Outlook через VBA. Код excutes не сортируется

Это прекрасно работает. Однако я хочу сортировать эти данные по общим хитам (или процентам) без необходимости делать это вручную в excel. Это связано с тем, что это создает отчет с несколькими другими группами полей, которые я хочу сортировать по каждому набору.

Проблема в том, что я не придумал, способный к фактическому сортировке из перспективы. Код выполняется без ошибок, но ничего не происходит. Я смог использовать следующее, чтобы успешно сортировать макрос excel.

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

я затем помещаюсь только телефонная линия в мою внешнем виде УВУ, определяются все (Excel Object ссылается библиотека)

 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 ")' (точка перед диапазоном)? Вам все равно придется делать эту модификацию, даже если она не устраняет проблему. –

+0

@ A.S.H Думаю, вы нашли проблему. Это работает в Excel без "." поскольку он по умолчанию соответствует действующей таблице. Мне придется подождать, пока я вернусь к работе завтра, чтобы проверить это. Я буду обновлять здесь, если это сработает. –

+0

он работает для меня, если вы используете '.Range (« A3: D30 »). Sort Key1: =. Range (« A3 »), Order1: = xlDescending, Header: = xlNo', то есть: удалить' Call', удалить скобки и добавить эту точку перед появлением 2-го диапазона – user3598756

ответ

0

Так спасибо @ A.S.H за кончик отсутствующего '.'

Он работал в excel без него, так как по умолчанию используется активный лист. Теперь это работает!

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