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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2014, 00:54   #1
Kefirrr
Пользователь
 
Регистрация: 05.06.2010
Сообщений: 53
По умолчанию работа с диапазоном

Добрый день! подскажите, пожалуйста, как правильно написать код. У меня есть 3 макроса, есть таблица. Хочу сделать, чтобы при выборе нескольких строчек, для каждой выполнялись эти три макроса Т.е. сначала для первой выбранной строчки, затем для второй и т.д.
____________________________
Sub automatic()
Dim cell As Range
Application.ScreenUpdating = False

For Each cell In Selection.SpecialCells(xlCellTypeCo nstants)
Application.Run "Формирование_бланка1"
Next
For Each cell In Selection.SpecialCells(xlCellTypeCo nstants)
Application.Run "Формирование бланка_2"
Next
For Each cell In Selection.SpecialCells(xlCellTypeCo nstants)
Application.Run "сохранение_в_PDF"
Next
Application.ScreenUpdating = True
End Sub
_____________

У меня почему-то получается, что выполняется операция 3 раза (т.е. столько, сколько строчек выделила), а формируются данные только по 1ой строчке. Если ли какая-нибудь функция, по перемещению активной ячейки внутри диапазона. В интернете не нашла ничего схожего (только по перемещению всего диапазона)
Kefirrr вне форума Ответить с цитированием
Старый 19.05.2014, 01:26   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Возможно так
Код:
Sub automatic()
Dim cell As Range
Application.ScreenUpdating = False

For Each cell In Selection.SpecialCells(xlCellTypeCo nstants)
  Application.Run "Формирование_бланка1"
  Application.Run "Формирование_бланка_2"
  Application.Run "сохранение_в_PDF"
Next
Application.ScreenUpdating = True
End Sub
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 19.05.2014, 01:32   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
Если ли какая-нибудь функция, по перемещению активной ячейки внутри диапазона
есть, а зачем она Вам?
Код:
for each cell in range("A1:Z100")
  cell.select
  msgbox "Cell " & cell.address & " is selected now"
next
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 19.05.2014, 03:14   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Я бы еще добавил игнорирование возможных ошибок (On Error Resume Next) и запрет вывода сообщений (Application.DisplayAlerts = False) на случай, если в выделенном диапазоне не найдется ни одной ячейки, содержащей константы.
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 19.05.2014 в 05:51.
SAS888 вне форума Ответить с цитированием
Старый 19.05.2014, 12:17   #5
Kefirrr
Пользователь
 
Регистрация: 05.06.2010
Сообщений: 53
По умолчанию

Спасибо большое за ответ. Но все равно обрабатывается Nраз только первая ячейка из всего выделенного диапазона
Вложения
Тип файла: zip форма 7а.zip (261.1 Кб, 11 просмотров)
Kefirrr вне форума Ответить с цитированием
Старый 20.05.2014, 03:37   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

В макросах формирования бланков Вы используете код
Код:
Cells(ActiveCell.Row, 2).Value
т. е. при каждом вызове обращаетесь к одной и той же ячейке. Для того, чтобы организовать последовательное обращение к ячейкам выбранного диапазона, нужно вызывать макрос и в качестве параметра передавать текушую в основном цикле ячейку. Т. е. так:
Вызов макроса:
Код:
Application.Run "Формирование_бланка_ф7а_1", cell
Исполняемый макрос:
Код:
Sub Формирование_бланка_ф7а_1(cell As Range)
    Sheets("Лист1").Activate
    Sheets("Форма_7-а").Cells(21, 50) = Cells(cell.Row, 2) ' фамилия
    ' и т.д. по всему тексту макроса заменить "ActiveCell.Row" на "cell.Row"
End Sub
Также, можно оптимизировать макрос, исключив все Select-ы и при обращении к листу использовать конструкцию WIth... End With.
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 20.05.2014 в 09:53.
SAS888 вне форума Ответить с цитированием
Старый 20.05.2014, 23:23   #7
Kefirrr
Пользователь
 
Регистрация: 05.06.2010
Сообщений: 53
По умолчанию

Спасибо за ответ.
Попробовала реализовать, заменила "активные ячейки" на просто "ячейки". Теперь выводит ошибку 450 "Wrong number of arguments or invalid property assignment"
Вложения
Тип файла: zip форма 7а.zip (265.4 Кб, 7 просмотров)
Kefirrr вне форума Ответить с цитированием
Старый 21.05.2014, 10:05   #8
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Вы не внимательны... Если передавать в макрос параметры, то и сам макрос должен их принимать. Обратите внимание на скобочки при заголовке макроса.
Посмотрите приложенный файл. Я оптимизировал макросы, выкинув все Activate-ы и Select-ы и собрав все операции в циклы. Согласитесь, что так на много проще, быстрее и изящнее. Также, добавил "нормальную" функцию перевода суммы из числа в пропись.
Будут вопросы - задавайте. Будут ошибки - укажите в какой строке кода.
Желаю удачи.
Вложения
Тип файла: rar форма 7а_2.rar (214.3 Кб, 7 просмотров)
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 21.05.2014 в 12:29.
SAS888 вне форума Ответить с цитированием
Старый 21.05.2014, 13:06   #9
Kefirrr
Пользователь
 
Регистрация: 05.06.2010
Сообщений: 53
По умолчанию

SAS888, все работает. Даже и не знаю что и сказать, вы переделали полностью мой файл и код теперь занимает совсем чуть-чуть. Спасибо огромное, но вопросов ОЧЕНЬ МНОГО. Если Вам не тяжело. можете разъяснить кое-что (функцию перевода суммы из числа еще даже не разбирала)
1) на что сразу обратила внимания, но так и не смогла найти хоть какое-то объяснение. В макросе "Формирование_бланка_ф7а_1" вы присваиваете значение
a = Array(1441414144, 4111411114#...) судя по всему это перебор индекса, но хоть убейте не понимаю КАК, почему именно 4 и 1 ,и почему через один стоит знак #
2) FileNum$ = [AE1]: [AE1] = [AE1] + 1
а) почему на конце "$" - это значение относительности вроде
б) как правильно прочитать эту строчку, мы сначала запоминаем номер из ячейки,а затем в нее добавляем единицу?
3) Попыталась выделить всего 1 человека, и создать ПДФ, так компьютер немного завис, стал создавать кучу файлов (на 50 уже не выдержала и воспользовалась Ctrl+Alt+Delete) иэ этих 50 3 были с нормально-заполненными бланками, а остальные выдавали имя ячейки (т.е. в ячейке индекса, было написно "Индекс и.т.д" С чем это связано?
Но с 2-мя и более выделенными ячейками работает безукоризненно

P.S. я в самом начале познавания VBA, и циклы пока для меня тяжеловато читаются, поэтому и делала все обычными командами, чтобы могла легко понять что и куда

Последний раз редактировалось Kefirrr; 21.05.2014 в 13:16.
Kefirrr вне форума Ответить с цитированием
Старый 21.05.2014, 13:43   #10
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Заинтересовало эти 1414144141414...
Так там ведь оно используется в
Borders(i + 6).Weight = Mid$(a(n), i + 1, 1)
т.е. из этих строк в нужное время выбирается нужный символ. Хитро
P.S. а знак # ставится сам, ничего не поделать... Разве что перевести в строку, но это лишние кавычки.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с выделенным диапазоном DAN1L Microsoft Office Excel 5 29.11.2012 03:54
Функция с параметром диапазоном savraska Microsoft Office Excel 5 26.05.2010 13:35
работа с диапазоном ячеек? panzergto Microsoft Office Excel 4 01.04.2010 21:25
Работа с именным диапазоном tae1980 Microsoft Office Excel 32 21.08.2009 11:10
работа с выделенным диапазоном nastya007 Microsoft Office Excel 5 13.03.2009 08:33