Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2015, 20:54   #1
Оксана33
Форумчанин
 
Аватар для Оксана33
 
Регистрация: 24.11.2014
Сообщений: 156
По умолчанию Coртировка листов в Экселе через макрос

Sub Sortsheets()

Dim i As Integer
Dim c As Integer
For i = 1 To 100
c = i + 1
Sheets(i).Move Before:=Sheets(c)
Next
End Sub

Есть листы (3, 1, 2, ... до 10) Подскажите, где ошибка? не выполняется сортировка
Знание надмевает, а любовь назидает

Последний раз редактировалось Оксана33; 29.01.2015 в 15:16. Причина: ошибка
Оксана33 вне форума Ответить с цитированием
Старый 29.01.2015, 00:48   #2
RAN.
Форумчанин
 
Аватар для RAN.
 
Регистрация: 05.07.2011
Сообщений: 208
По умолчанию

Все работает. Лист №1 помещается перед листом №2, №2 перед №3 и т.д.
Правда, они и так там находятся...
RAN. вне форума Ответить с цитированием
Старый 29.01.2015, 08:52   #3
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Вы сортируете листы по индексу. При этом, не важно, какие имена присвоены листам. А Вам нужно по имени. Например, так:
Код:
Sub SortSheets()
    Dim i As Integer, j As Integer
    For i = 1 To Sheets.Count - 1
        For j = i + 1 To Sheets.Count
            If UCase(Sheets(i).Name) > UCase(Sheets(j).Name) Then Sheets(j).Move Before:=Sheets(i)
        Next j
    Next i
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 29.01.2015, 15:14   #4
Оксана33
Форумчанин
 
Аватар для Оксана33
 
Регистрация: 24.11.2014
Сообщений: 156
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Вы сортируете листы по индексу. При этом, не важно, какие имена присвоены листам. А Вам нужно по имени. Например, так:
Код:
Sub SortSheets()
    Dim i As Integer, j As Integer
    For i = 1 To Sheets.Count - 1
        For j = i + 1 To Sheets.Count
            If UCase(Sheets(i).Name) > UCase(Sheets(j).Name) Then Sheets(j).Move Before:=Sheets(i)
        Next j
    Next i
End Sub
спасибо, я подозревала, что дело в имени
Знание надмевает, а любовь назидает
Оксана33 вне форума Ответить с цитированием
Старый 29.01.2015, 15:15   #5
Оксана33
Форумчанин
 
Аватар для Оксана33
 
Регистрация: 24.11.2014
Сообщений: 156
По умолчанию

Цитата:
Сообщение от RAN. Посмотреть сообщение
Все работает. Лист №1 помещается перед листом №2, №2 перед №3 и т.д.
Правда, они и так там находятся...
да нет же - они в беспорядке, так как переименовываются постоянно
Знание надмевает, а любовь назидает
Оксана33 вне форума Ответить с цитированием
Старый 29.01.2015, 15:37   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

RAN хотел сказать так - первый перед вторым, второй перед третьим и т.д....
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 29.01.2015, 18:15   #7
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
да нет же - они в беспорядке, так как переименовываются постоянно
Вы не хотите понять, что лист с индексом 1 будет иметь этот индекс вне зависимости от того, как вы его переименуете. Поэтому, сортировать по индексу есть неправильно. Именно об этом говорят RAN. и Hugo121.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 02.02.2015, 15:11   #8
Оксана33
Форумчанин
 
Аватар для Оксана33
 
Регистрация: 24.11.2014
Сообщений: 156
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Вы не хотите понять, что лист с индексом 1 будет иметь этот индекс вне зависимости от того, как вы его переименуете. Поэтому, сортировать по индексу есть неправильно. Именно об этом говорят RAN. и Hugo121.
да я знаю про индекс, просто не знала как к имени листа обратиться
Знание надмевает, а любовь назидает
Оксана33 вне форума Ответить с цитированием
Старый 02.02.2015, 15:27   #9
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Цитата:
Сообщение от Оксана33 Посмотреть сообщение
да я знаю про индекс, просто не знала как к имени листа обратиться
Включаете рекордер, перетягиваете лист, выключаете рекордер - смотрите в код
Код:
    Sheets("Sheet1").Move After:=Sheets(2)
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 02.02.2015, 15:39   #10
Оксана33
Форумчанин
 
Аватар для Оксана33
 
Регистрация: 24.11.2014
Сообщений: 156
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Включаете рекордер, перетягиваете лист, выключаете рекордер - смотрите в код
Код:
    Sheets("Sheet1").Move After:=Sheets(2)
я так и делала, но метод привязан к имени, и если имя иное, то он затупит, а у меня имена листов - 1,2,3 и т.д. И потом этот код Move After:=Sheets(2) нужно прописать множество раз с другими индексами 3,4,5...

SAS888 дал исчерпывающий ответ
Знание надмевает, а любовь назидает

Последний раз редактировалось Оксана33; 02.02.2015 в 15:41. Причина: ошибка
Оксана33 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать простой макрос в Экселе (Excel). Заплачу) QueenPanda91 Фриланс 14 31.01.2015 16:27
Макрос в экселе Mercial Помощь студентам 0 14.12.2013 18:17
макрос в экселе Иван_homa Помощь студентам 0 29.02.2012 11:03
Макрос для всех листов as-is Microsoft Office Excel 8 10.02.2011 21:15