В моей книге Excel у меня есть диалоговое окно (поле «Расходы», которое вызывается из рабочего листа «Расходы»), которое запускает сортировку на отдельном рабочем листе (рабочем листе «Учетные записи»), чтобы сохранять имена учетных записей в алфавитном порядке при добавлении или изменении учетной записи.,Все отлично работает с сортировкой, кроме следующих двух вещей:
Я не хочу менять выбор на листе «Счета».Но функция сортировки, в частности часть кода «Применить», приведенная ниже, выбирает всю таблицу счетов, я полагаю, поскольку поле «Расходы» запускается на отдельном листе, а не на том, что я пытаюсь отсортировать.
На рабочем листе Accounts есть событие Worksheet_SelectionChange, которое вызывается из-за изменения выбора, и это событие содержит Intersect.И Excel выбрасывает шипение, когда вы проверяете пересечение двух диапазонов на отдельных листах.Так что это заставляет весь мой макрос взрываться.Я могу поместить оператор If, содержащий пересечение, чтобы проверить, находится ли Activecell на правильном рабочем листе, но я бы предпочел отказаться от него и не изменять выбор в первую очередь.
У кого-нибудь есть метод сортировки, который не выбирает таблицу?Вот мой код до сих пор.(Диапазон AccountsTable относится к именам и полям учетных записей, а это Main! $ A $ 35: $ A $ 43. Причина этого оператора разделения заключается в сортировке по первому столбцу, столбцу имени.)
ActiveWorkbook.Worksheets("accounts").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("accounts").Sort.SortFields.Add Key:=Range(Split(Range("AccountsTable"), ":")(0)), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("accounts").Sort
.SetRange Range(AccountsTable)
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply '<==this is where the selection is happening
End With
Любой совет приветствуется!
Я проверил Google на наличие альтернативного кода, но ничего специально для меня не работает.Я также пробовал Сортировка VBA в Excel оставляет содержимое таблицы выбранным здесь, в Переполнении стека, но описанный там метод выдает ошибку, когда я нажимаю эту строку: Set lo = ActiveWorkbook.Worksheets("Accounts").ListObjects("accounts_table")
.Не знаю почему.