После обновления данных отсортировать столбец A по алфавиту

У меня небольшая проблема с моей электронной таблицей Excel, я надеюсь, что кто-то может помочь. У меня есть имена, начинающиеся с ячейки = A7, которые идут к A177. Вся остальная информация находится в столбцах (B:H). В идеале я хотел бы запустить код после обновления данных. Я использую этот лист, чтобы искать информацию для другого листа, поэтому он должен быть в алфавитном порядке от A до Z. Информация из веб-запроса.


person DomsDad18    schedule 08.11.2015    source источник
comment
макрос записи: обновить данные -> отсортировать их по своему усмотрению -> остановить запись... используйте макрос, чтобы повторить это действие :D   -  person Dirk Reichel    schedule 08.11.2015


Ответы (1)


ИЗМЕНИТЬ:

Добавьте следующий код в стандартный модуль. Посмотрите изменения в коде, чтобы убедиться, что он правильно сортирует все ваши столбцы вместе, как и ожидалось.

Option Explicit

dim DataTable as New Class1

Sub Auto_Open()
'This will run automatically when the workbook is opened, so macros will need to be enabled. 

'Select any cell in the data table.
Activesheet.Range("A7").Select
Set DataTable.qt = ThisWorkbook.ActiveSheet.QueryTables(1)
Sub

Sub AutoSort()
Dim rng As Range
Dim Nrow As Integer
Dim Ncol As Integer
Dim WS As Worksheet

'Assume that the active sheet contains the data that you want to sort
'Since it sounds like you'll be calling this from another macro, this
'is probably not a good assumption.
Set WS = ActiveWorkbook.ActiveSheet

'Get the row number of your last entry in column A, then the right most
'column of your data. Assume there is no other data on this worksheet.
Nrow = WS.Cells(Rows.Count, "A").End(xlUp).Row '177 in your case

'Replace the following line
'Ncol = WS.Cells(1, Columns.Count).End(xlToLeft).Column '8 in your case
'with this line
Ncol = WS.Cells(7, Columns.Count).End(xlToLeft).Column '8 in your case

'set all of your data in a range.
Set rng = WS.Range(Cells(7, 1), Cells(Nrow, Ncol))

'the actual sorting
rng.Sort key1:=rng, order1:=xlAscending, Header:=xlYes

End Sub

Затем создайте модуль класса и вставьте следующий код:

Option Explicit

Public WithEvents qt As QueryTable

Private Sub qt_AfterRefresh(ByVal Success As Boolean)

    If Success = True Then

        Call Module1.AutoSort
        MsgBox "Data was updated and sorted."

    End If

End Sub

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

Код в значительной степени опирается на работу других, а именно:
Как вызвать макрос после нажатия кнопки "Обновить" или "Обновить все"? ответил @Rory

Документация Microsoft

person JJC    schedule 08.11.2015
comment
Спасибо JJC за ответ. Код отлично работает для сортировки имен в столбце A, однако он не делает этого автоматически при ОБНОВЛЕНИИ ДАННЫХ, а также все данные в столбцах B:H не сортируются по именам. Так что в основном данные рядом с именами неверны. Любая помощь приветствуется. - person DomsDad18; 09.11.2015
comment
@ DomsDad18, я отредактировал свой ответ, чтобы исправить указанную вами проблему сортировки. Я также добавил некоторый код, чтобы он запускался автоматически после обновления подключений к данным. - person JJC; 11.11.2015