Страница 1 из 1

автозапуск макроса при изменении ячейки и сортировка др. столбца

Добавлено: 26 фев 2013, 08:37
clar
Помогите, пожалуйста, очень нужно записать автозапуск макроса в Visual Basic при изменении в ячейках диапазона C18:C37. Есть таблица в столбце С вложен список, макрос по автосортировке этого столбца по алфавиту работает (макрос2) , но не могу дополнить его автозапуском при изменении строк в этом столбце и еще нужна сортировка столбца В (В18:В37) , увязанная с сортировкой столбца С. В макросах новичок, получилось следующее:
Sub макрос2()
Range("C18:C37").Select
ActiveWorkbook.Worksheets("1д").Sort.sortfields.Clear
ActiveWorkbook.Worksheets("1д").Sort.sortfields.Add Key:=Range("C18"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("1д").Sort
.SetRange Range("C18:C37")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
Sub макрос1()
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Dim rng As Range: Set rng = [C18:C37]
If Not Intersect(rng, Target) Is Nothing Then макрос2
Application.EnableEvents = True
End Sub

Re: автозапуск макроса при изменении ячейки и сортировка др. столбца

Добавлено: 26 фев 2013, 09:05
pashulka
Подведите курсор мышки к ярлычку нужного рабочего листа, кликните правой кнопкой мышки и в появившемся контекстном меню выберите команду Исходный текст, после чего скопируйте нижеприведённый код в модуль листа и сохраните изменения.

Код: Выделить всё

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
   Dim iSource As Range
   Set iSource = Intersect(Range("C18:C37"), Target)
   If Not iSource Is Nothing Then
      Application.EnableEvents = False
      
      Range("B18:C37").Sort _
      Key1:=Range("C18"), Order1:=xlAscending, Header:=xlGuess, _
      OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
      
      Application.EnableEvents = True
   End If
End Sub

Re: автозапуск макроса при изменении ячейки и сортировка др. столбца

Добавлено: 26 фев 2013, 09:36
clar
К сожалению, не могу макрос запустить, запрашивает имя. Если присваиваю, то пишет ошибку "Expected End Sub".

Re: автозапуск макроса при изменении ячейки и сортировка др. столбца

Добавлено: 26 фев 2013, 10:28
clar
Выдает ошибку 424 на строку
Set iSource = Intersect(Range("C18:C37"), Target)

Re: автозапуск макроса при изменении ячейки и сортировка др. столбца

Добавлено: 26 фев 2013, 13:37
clar
Спасибо, подскажите еще , пожалуйста, на одном листе макрос запускается на др. листе этой же книги - нет. Нужно, чтобы запустился на нескольких листах (например, лист1-10), а на листы 11-13 макрос не распространялся

Re: автозапуск макроса при изменении ячейки и сортировка др. столбца

Добавлено: 26 фев 2013, 14:58
Naeel Maqsudov
Тогда перенесите этот обработчик события из модуля листа в модуль книги. Там он должен выглядеть так:

Код: Выделить всё

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
   Dim iSource As Range
   Select Case Sh.Name
     Case "Лист1", "Лист2"
       Set iSource = Intersect(Range("C18:C37"), Target)
     Case "Лист5", "Лист6"
       Set iSource = Intersect(Range("E6:E22"), Target)
     Case Else
       Exit Sub
   End Select
   If Not iSource Is Nothing Then
      Application.EnableEvents = False
      Range("B18:C37").Sort _
      Key1:=Range("C18"), Order1:=xlAscending, Header:=xlGuess, _
      OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
      Application.EnableEvents = True
   End If
End Sub

Re: автозапуск макроса при изменении ячейки и сортировка др. столбца

Добавлено: 26 фев 2013, 15:46
clar
Ура! Заработало

Re: автозапуск макроса при изменении ячейки и сортировка др. столбца

Добавлено: 26 фев 2013, 18:58
pashulka
От себя добавлю, что если существует вероятность переименования рабочих листов, где должна осуществляться сортировка, то Sh.Name можно заменить на Sh.CodeName и перечислить кодовые имена листов, которые, разумеется, могут отличаться от имён в семействе Worksheets

Re: автозапуск макроса при изменении ячейки и сортировка др. столбца

Добавлено: 26 фев 2013, 22:44
Naeel Maqsudov
А для совсем уж пущей юзабилити, :) можно добавить лист с настройками книги (возможно, скрытый), куда вынести список таких автосортируемых диапазонов, предусмотрев там еще и возможность указания параметров сортировки. Диапазон на том листе должен вводиться формулой, чтобы автоматически отслеживать, например, вставку строк и т.п.