Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перенос строк из соответсвующих листов 
V
    Опции темы
Mrak
Дата 6.4.2006, 05:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 16.10.2004

Репутация: нет
Всего: 5



Постановка задачи.
Есть документ в Excel, в котором 6 листов. Предположим, что названия стандартные: Лист1…..Лист 6.
У каждого листа одинаковая шапка
№ п/п Задача Дата Выполнено
(A) (B) (С) (D)
В поле выполнено будет записываться или «да» или «нет»
У нас есть второй документ с таким же порядком листов – этот документ называется архив.
Суть задачи.
При открытии файла нужно, чтобы проверялось поле выполнено в каждой строчке таблицы каждого листа. Если в нем уже написано «да», то строка таблицы должна вырезаться и вставляться в первую свободную строку в файл архив на соответствующий лист, т.е. на лист, имеющий то же название, что и исходный, но находящийся в другой книге (Архив).
Если поле «Выполнено» написано «нет», то нужно проверить, меньше ли дата, в поле «Дата» сегодняшней даты. Если это верно, то выделить красным строку.
Реализация.
В принципе примерное представление о том как делать есть. Но работа со строками не совсем ясна. Как лучше это организовать?
Помогите пожалуйста, разобраться в этом.
Заранее спасибо.

PM MAIL   Вверх
shovkoplyas
Дата 6.4.2006, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 24.3.2006
Где: Украина, г.Северо донецк

Репутация: 3
Всего: 3



Цитата

В поле выполнено будет записываться или «да» или «нет»
Я думаю в даном случае лучше использовать флажок, чтобы исключить пустое значение. Например установить в данном столбце шрифт Marlett и использовать вместо "да" символ латинское "a".
Цитата

Если это верно, то выделить красным строку.
Это проще всего реализовать с помощью условного форматирования, не прибегая к написанию макроса.
Становимся на ячейку флажка
Меню-Формат-Условное форматирование
Выбираем Формула и пишем =C1<СЕГОДНЯ() 'под C1 подразумеваем ячейку даной строки с датой
Теперь нажимаете кнопку Формат и устанавливаем красный цвет шрифта или фона
и так для всех ячеек, если недостаточно подсвечивать ячейку флажка
Цитата

Если поле «Выполнено» написано «нет»
Это проверять нет необходимости, если строки с "да" при открытии файла удаляются.
Цитата

Если в нем уже написано «да», то строка таблицы должна вырезаться и вставляться в первую свободную строку в файл архив на соответствующий лист
Если книга "Архив" открыта то:
Код

Private Sub Workbook_Open()
Dim a
Windows("Книга1").Activate
Sheets("Лист1").Select 
For a = 1 To 100 'для 100 строк начиная с первой. Необходимо ввести количество строк или определить предварительно начало и конец
If Cells(a, 4) = "a" Then 'тоесть в столбце (C) установлен флажок
    Rows("" & CStr(a) & ":" & CStr(a) & "").Select
    Selection.Cut
    Windows("Архив").Activate
    Sheets("Лист1").Select
    Rows("1:1").Select
    Selection.Insert Shift:=xlDown
    Windows("Книга1").Activate
    Sheets("Лист1").Select
    Selection.Delete
End If
Next
End Sub


Примерно так. В чистовом виде можно зациклить для каждого листа и упростить код.
PM MAIL WWW   Вверх
Staruha
Дата 6.4.2006, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: 13
Всего: 27



Примерно так
For list=1 to 6
For rng=2 to 500
If Лист(x).cells(rng, 4)="да" Then


--------------------
Возмездие настигнет
PM MAIL   Вверх
shovkoplyas
Дата 7.4.2006, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 24.3.2006
Где: Украина, г.Северо донецк

Репутация: 3
Всего: 3



Что такое:
Цитата

Лист(x)

в этом примере.
PM MAIL WWW   Вверх
Staruha
Дата 7.4.2006, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: 13
Всего: 27



Извини описалась smile Вот код бежит по листам и строкам.
Код

Private Sub CommandButton1_Click()
For List = 1 To 3
For rng = 2 To 500
If Sheets("Лист" & List).Cells(rng, 4) = "да" Then
 MsgBox "jjj"
 End If
 Next
 Next
End Sub



--------------------
Возмездие настигнет
PM MAIL   Вверх
Mrak
Дата 8.4.2006, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 16.10.2004

Репутация: нет
Всего: 5



Надо попробовать, отпишусь о результатах. smile


--------------------
Смерть - не противоположность жизни, а лишь ее часть. (Х. Мураками)
PM MAIL   Вверх
Mrak
Дата 15.5.2006, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 16.10.2004

Репутация: нет
Всего: 5



У меня был небольшой перерыв. Поэтому задачка замерла. Но теперь я к ней вернулся. 
shovkoplyas, код хороший почти во всем, кроме строчки 12. Rows(1:1).Select. При следующем открытии книги будет возникать ошибка, по причине того, что эта строчка уже заполнена. Что с этим делать?  

То есть единственное, чего я не понял - как определить последнюю непустую ячейку, запомнить ее строку, преобразовать ее в тип, пригодный для Rows(). 

Заранее спасибо за помощь и разъяснения. 

Это сообщение отредактировал(а) Mrak - 15.5.2006, 20:57


--------------------
Смерть - не противоположность жизни, а лишь ее часть. (Х. Мураками)
PM MAIL   Вверх
Artiom
Дата 16.5.2006, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1031
Регистрация: 11.3.2003
Где: Минск\Баку

Репутация: 1
Всего: 17



Если у твоего файла регулярная структура (состоит только из таких строк) то можно использовать
Код

Dim rg As Range
Set rg = ActiveSheet.UsedRange
Dim max_row As Integer
max_row = rg.Rows.Count

max_row - номер последней используемой строки 


--------------------
Если тебя жизнь трахает, значит, ты ещё живой
PM MAIL ICQ   Вверх
shovkoplyas
Дата 16.5.2006, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 24.3.2006
Где: Украина, г.Северо донецк

Репутация: 3
Всего: 3



Загляни сам. Не хочу повторяться.

http://forum.sources.ru/index.php?showtopic=93671 
PM MAIL WWW   Вверх
Mrak
Дата 19.5.2006, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 16.10.2004

Репутация: нет
Всего: 5



Все спасибо! Задача решена smile  


--------------------
Смерть - не противоположность жизни, а лишь ее часть. (Х. Мураками)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0857 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.