У меня небольшая проблема с моей электронной таблицей Excel, я надеюсь, что кто-то может помочь. У меня есть имена, начинающиеся с ячейки = A7, которые идут к A177. Вся остальная информация находится в столбцах (B:H). В идеале я хотел бы запустить код после обновления данных. Я использую этот лист, чтобы искать информацию для другого листа, поэтому он должен быть в алфавитном порядке от A до Z. Информация из веб-запроса.
После обновления данных отсортировать столбец A по алфавиту
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
person
JJC
schedule
08.11.2015
Спасибо JJC за ответ. Код отлично работает для сортировки имен в столбце A, однако он не делает этого автоматически при ОБНОВЛЕНИИ ДАННЫХ, а также все данные в столбцах B:H не сортируются по именам. Так что в основном данные рядом с именами неверны. Любая помощь приветствуется.
- person DomsDad18; 09.11.2015
@ DomsDad18, я отредактировал свой ответ, чтобы исправить указанную вами проблему сортировки. Я также добавил некоторый код, чтобы он запускался автоматически после обновления подключений к данным.
- person JJC; 11.11.2015