|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
29.12.2010, 09:48 | #1 |
Новичок
Джуниор
Регистрация: 29.12.2010
Сообщений: 8
|
Всем привет!!! Вот моя задачка. Я скинула в архиве папочку 180 форма. В ней находится файлик prog_ter1.xls. В этом файлике 51 лист. Работает все это безобразие следующим образом:
1. На втором листе нажимаем кнопку "загрузить", и листы 3-48 заполняются данными. Данные находятся в файликах, которые лежат в папочке 180 форма:\temp 2. Нажимаем там же кнопочку "рассчитать", происходит расчет итоговой формочки, которая находится на первом листе, т.е. все данные с листов 3-48 помещаются на первый лист и там суммируются. 3. Нажимаем кнопочку "проверка". Происходит проверка правильности загруженных данных первого листа. 4. "выгрузка". Эта кнопочка нам не нужна. А теперь сама задача: 1. Создать кнопку "проверка_овд" и к ней привязать макрос, который будет выполнять проверку не первого листа, а каждого листа с 3 по 48 и выдавать ошибки в следующем виде: "Ошибка в столбце 1 раздела 1. Значение в строке 1 должно быть = строка1 + строка3 - строка10 Лист Самарский" "Ошибка в столбце 1 раздела 1. Значение в строке 1 должно быть = строка1 + строка3 - строка10 Лист Ленинский" и т. п. И помещать все эти ошибки на лист 51. 2. Я пробовала создавать уже этот макрос. Его можно посмотреть в макросах. Это "proverka_ovd" или "proverka1_ovd" или "proverka2_ovd" - там разные варианты моих попыток. 3. Главная фишка, очень облегчающая задачу в том, что макрос "proverka" - это тот, который работает для первого листа одинаков для всех остальных листов также и в нем ничего не стоит менять, кроме того, что удалить проверку для 9 и 10 разделов, т.к. в листах овд этих данных нет!!! 4. Мне нужно прокрутить макрос "proverka" с 3 по 48 лист и выдать все ошибки на лист 51, или, если ошибок нет, то там бы появилась запись: "ошибок нет". Т.е. на мой скромный взгляд юзера цикл должен работать следующим образом: Выбрали лист 3 => проверили на наличие ошибок => выписали найденные ошибки на лист 51 => написали имя листа => перешли к следующему листу. Если кто-то может помочь - напишите, пожалуйста!!! Задача очень срочная и важная. Если необходимо материальное вознаграждение, то в этом вопросе тоже проблем никаких нет. Только помогите!!! Еще была идея создания такого простенького макроса. Т.к. макрос proverka у нас уже есть и он адекватно работает, то может быть стоит создать цикл, в котором эта процедура будет вызываться такое число раз, сколько листов в нашей книге. Т.е. получилось у меня в итоге следующее: Sub proverka_ovd() errStr = 1 For Each iList In Worksheets Call Module1.proverka i = i + 1 If Worksheets(51).Cells(errStr, 1).Value = 0 Then Worksheets(51).Cells(errStr, 2).Value = "Ошибка на листе " & iNameList & Chr(10) & iList.Name End If Next ' proverka_ovd Макрос ' Макрос записан 20.12.2010 (adm) ' ' Сочетание клавиш: Ctrl+Shift+Y ' End Sub Но этот макрос не работает. В чем я ошибаюсь??? Что мне еще нужно учесть??? И кроме того этот макрос писался для каждого листа книги, а нужно, чтобы он выполнялся только для 3-48 листов... Последний раз редактировалось Stilet; 29.12.2010 в 17:25. |
29.12.2010, 11:02 | #2 |
Старожил
Регистрация: 15.05.2008
Сообщений: 2,058
|
так можно перебрать нужные листы
Код:
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499 |
29.12.2010, 11:35 | #3 |
Новичок
Джуниор
Регистрация: 29.12.2010
Сообщений: 8
|
Спасибо огромное за такой совет...
Теперь смотрите, что у меня получилось. Я переписала макрос. Во-первых, чтобы не исправлять работающий макрос proverka (proverka выводит данные на второй лист, а нам же ошибки нужны на 51), я создала макрос proverka1 и переписала код макроса proverka: Sub proverka_ovd() errStr = 1 'номер строки ошибки For iList = 3 To 48 Worksheets(iList).Activate Call Module3.proverka1 'выполняем проверку для каждого из листов с 3 по 51 If Worksheets(51).Cells(errStr, 1).Value <> 0 Then 'Начинаем заполнять имя листа. Если 'появилась ошибка, т.е. в строке 1 в столбце 1 есть данные, то надо писать название листа. Worksheets(51).Cells(errStr, 2).Value = "Ошибка на листе " & iList.Name 'этой строчкой как раз 'название листа и задаем и в ней ошибка. End If Next ' proverka_ovd Макрос ' Макрос записан 20.12.2010 (adm) ' ' Сочетание клавиш: Ctrl+Shift+Y ' End Sub Выдает ошибку в строке, где я пытаюсь выдать название листа... В чем я неправа??? |
29.12.2010, 11:50 | #4 |
Старожил
Регистрация: 15.05.2008
Сообщений: 2,058
|
Код:
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499 |
29.12.2010, 12:10 | #5 |
Новичок
Джуниор
Регистрация: 29.12.2010
Сообщений: 8
|
Код выполняется, ошибок по коду не выдает, но и ошибки на листах совсем даже не пытается искать. ПОЧЕМУ??? Никак не могу понять этот вопрос. Я же вызываю процедуру проверки, в которой все четко указано: что и где писать надо. А в завершении выдает ошибку на 48 листе. Я понимаю, что он на нем остановился и поэтому его и написал, а как-нибудь можно избежать этого???
Прикрепила последний вариант того, что у меня в итоге вышло окончательно: |
29.12.2010, 12:23 | #6 |
Участник клуба
Регистрация: 12.08.2010
Сообщений: 1,077
|
вы темр то каждый раз не гоняйте, ждать скачки 15 минут -- не .....
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание |
29.12.2010, 15:16 | #7 |
Новичок
Джуниор
Регистрация: 29.12.2010
Сообщений: 8
|
Довела до ума свой макросик. Осталась одна маленькая проблемка. Смотрим, что у нас получается на листе, где мы выводим ошибки - лист 51. В строке 1 столбец 1 у нас записываются ошибки, которые пороверка находит на листе, в 2 строке столбец 1 у нас выдается название листа, на котором эти ошибки сделаны. Проблема в том, что в 1 столбце у нас под ошибки выделяется только одна строчка на лист, если же на листе больше 1 ошибки, то записывается только та, которая найдена последней - как эту проблему решить??? Помогите, пожалуйста, довести задачку до конца!!!!
Кстати, на втором листе появилась кнопочка "ошибки райотделов", к которой привязан мой многострадальный макросик ))) |
29.12.2010, 16:06 | #8 |
Участник клуба
Регистрация: 12.08.2010
Сообщений: 1,077
|
стиль написания макроса
читабельность не более 2 баллов
если оставить вашу схему смещений, то посмотрите вариант Код:
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание |
29.12.2010, 16:17 | #9 |
Новичок
Джуниор
Регистрация: 29.12.2010
Сообщений: 8
|
Спасибо за код, но можно объяснить его словами??? А то я с функциями что-то запуталась совсем... (((
|
29.12.2010, 16:23 | #10 |
Участник клуба
Регистрация: 12.08.2010
Сообщений: 1,077
|
функция zc -значение ячейки со смещениями
функцмя fpech -печать некого текста в ячейке листа ошибок, которому дала имя zpech, и имя проверяемого листа и пара объявления переменных
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Какие есть книги по VBA для access 2007 | A.F. | Microsoft Office Access | 2 | 17.01.2011 09:16 |
Как создать кнопку для всех листов книги? | kipish_lp | Microsoft Office Excel | 5 | 06.05.2010 17:43 |
перенос данных из нескольких листов в 1 | Екатрина | Microsoft Office Excel | 5 | 17.12.2009 18:28 |
Список листов книги | Scolopendra | Microsoft Office Excel | 3 | 12.12.2009 21:58 |
печать нескольких листов | checkbox | Microsoft Office Excel | 2 | 16.01.2008 00:50 |