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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2009, 10:02   #11
ruavia3
Форумчанин
 
Регистрация: 13.03.2009
Сообщений: 253
По умолчанию

Спасибо, очень выручили.
ruavia3 вне форума Ответить с цитированием
Старый 14.05.2009, 16:43   #12
ruavia3
Форумчанин
 
Регистрация: 13.03.2009
Сообщений: 253
По умолчанию

Код используется для заполнения дней недели, с указанием каждой ячейки. В примере код работает, но если добавить еще несколько групп (например c,d,f) то макрос выдаст 'procedure too large'

Можно каким-нибудь образом сократить код?
Вложения
Тип файла: rar Book1_7.rar (37.1 Кб, 7 просмотров)
ruavia3 вне форума Ответить с цитированием
Старый 15.05.2009, 07:10   #13
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Посмотрите пример во вложении.
Вложения
Тип файла: rar Book1_8.rar (34.3 Кб, 7 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 15.05.2009, 09:33   #14
ruavia3
Форумчанин
 
Регистрация: 13.03.2009
Сообщений: 253
По умолчанию

Спасибо огромное.
Вот так сократили

Set sh1 = Sheets(sh): Set sh2 = Sheets(sh + 4): j = 10: - почему именно 10 ?

Последний раз редактировалось ruavia3; 15.05.2009 в 09:37.
ruavia3 вне форума Ответить с цитированием
Старый 15.05.2009, 09:58   #15
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Обратите внимание, как адресуются ячейки "откуда брать" и "куда вставлять".
В первом проходе внешнего цикла j=10 и k=0. Соответственно, берем значения из нужного листа в найденной строке из столбцов j, j + 1 и j + 2 (т.е. "J", "K" и "L") и вставляем в 1-й лист в столбцы 5, 6 и 7 (т.е. "E", "F" и "G").
При втором проходе - j = 2 и k = 1. Соответственно, из столбцов "B:D" вставляем в "B:D".
Подставьте значения j и k для 1-го и 2-го прохода в формулы, например, этого фрагмента макроса:
Код:
Cells(i, j + 5 * k - 5) = sh1.Cells(x.Row, j)
Cells(i, j + 5 * k - 4) = sh1.Cells(x.Row, j + 1)
Cells(i, j + 5 * k - 3) = sh1.Cells(x.Row, j + 2)
Посмотрите, какие номера столбцов получаются - и все станет понятно.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 15.05.2009, 13:49   #16
ruavia3
Форумчанин
 
Регистрация: 13.03.2009
Сообщений: 253
По умолчанию

Не работает
Хорошо, когда значения выборки стоят по порядку, мы можем задать цикл с j=10, а потом j=2 (выбирая столбец). А если данные идут не по порядку, если столбцы выборки для одной группы находятся в середине другой?
Вложения
Тип файла: rar Book1_8.rar (19.0 Кб, 9 просмотров)

Последний раз редактировалось ruavia3; 15.05.2009 в 15:57.
ruavia3 вне форума Ответить с цитированием
Старый 18.05.2009, 10:03   #17
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Решение делается в зависимости от задания. Если для прошлого случая было рационально использовать цикл с изменением номера столбца, то сейчас лучше сделать так (см. вложение).
P.S. Давайте называть вещи своими именами: предыдущий макрос работает и полностью выполняет свою задачу. Если Вы снова будете изменять требования, то либо вносите корректные изменения в код макроса, либо поставьте соответствующий вопрос.
Вложения
Тип файла: rar Book_9.rar (17.7 Кб, 9 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 18.05.2009, 10:14   #18
ruavia3
Форумчанин
 
Регистрация: 13.03.2009
Сообщений: 253
По умолчанию

Виноват, согласен. Я планировал дальше сам дописать код, не зная, что придется переписывать его целиком.
В последнем файле, группа b почему-то не заполняется(
ruavia3 вне форума Ответить с цитированием
Старый 18.05.2009, 11:13   #19
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Добавил. Посмотрите.
Вложения
Тип файла: rar Book_10.rar (18.5 Кб, 14 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 18.05.2009, 11:52   #20
ruavia3
Форумчанин
 
Регистрация: 13.03.2009
Сообщений: 253
По умолчанию

Если потребуется добавить еще группы листов, например с, d. То в конце кода нужно написать:
Next
Set ws = Sheets(sh + 4)
Next
Set ws = Sheets(sh + 8)
Next
Set ws = Sheets(sh + 12)
Next


Верно?
ruavia3 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Optionbutton(ы) на MultiPage ruavia3 Microsoft Office Excel 2 30.04.2009 14:26
OptionButton Волк Microsoft Office Excel 3 09.04.2009 09:53
макрос для суммирования jisu Microsoft Office Excel 5 30.03.2009 23:21
Макрос для копирования knyz Microsoft Office Excel 28 11.01.2009 06:12
Макрос для терпеливых jungo Microsoft Office Excel 3 04.05.2008 14:49