Невозможно выполнить сортировку и удалить дубликаты для выполнения в макросе, выполняемом на указанном рабочем листе. - PullRequest
0 голосов
/ 04 апреля 2020

Попытка создать макрос, который будет выполняться нажатием кнопки на назначенном рабочем листе, а не на активном рабочем листе. Мне удалось выполнить копирование и вставку, но поскольку макрос работает для сортировки команд столбцов, я получаю сообщение об ошибке «400» Mircosoft VBA. Нет ошибки отладки, и ни одна строка не помечена ошибкой. Я пробовал тот же код в Microsoft 2007 и 2016, думая, что это проблема с версией, но работает так же. Любое направление будет с благодарностью.

Sub GUIDataExtract()
'Copy and paste data from "LOG PALLET RPT CART-" and then sorts and removes duplicates
'Macro is assigned to button for user to update

Dim wksSource As Worksheet, wksDest As Worksheet
Dim rngSource As Range, rngDest As Range

Set wksSource = ThisWorkbook.Worksheets("GUI")
Set wksDest = ThisWorkbook.Worksheets("GUI PIVOT")

'Copy First Range of Data
Set rngSource = wksSource.Range("A:A")

'Paste Values First Range of Data
Set rngDest = wksDest.Range("A:A")
rngSource.Copy
rngDest.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

'Sort First Data Range
wksDest.Sort.SortFields.Clear
wksDest.Sort.SortFields.Add Key:=Range("A2:B133336"), SortOn:=xlSortOnValues, Order:=xlAscending, 
DataOption:=xlSortNormal
With wksDest.Sort
    .SetRange Range("A1:B133336")
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

'Remove Duplicates in Data Range
wksDest.Range("$F$1:$K$133336").RemoveDuplicates Columns:=Array(1, 6), Header:=xlYes


End Sub

Ответы [ 2 ]

0 голосов
/ 05 апреля 2020

Это связано с тем, что критериями сортировки являются более двух столбцов.


wksDest.Sort.SortFields.Add Key: = Range (" A2: B133336 "), SortOn: = xlSortOnValues, Order: = xlAscending, DataOption: = xlSortNormal

до

wksDest.Sort.SortFields.Add Key: = Range (" A2: A133336 " ), SortOn: = xlSortOnValues, Порядок: = xlВосходящий, DataOption: = xlSortNormal

0 голосов
/ 04 апреля 2020

Я сам решил всегда использовать Sort() метод Range объект

With wksSource
    With Intersect(.UsedRange, .Range("A:A"))
        wksDest.Range("A1").Resize(.Rows.Count).Value = .Value

        wksDest.Range("A1").Resize(.Rows.Count).Sort Key1:=wksDest.Cells(1, 1), _
                        order1:=xlAscending, _
                        Header:=xlYes, _
                        MatchCase:=False, _
                        Orientation:=xlTopToBottom, _
                        SortMethod:=xlPinYin
    End With
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...