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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2010, 18:48   #1
IRI_NA
 
Регистрация: 23.01.2010
Сообщений: 7
По умолчанию макрос для копирования строк из одной таблицы в другую

Привет всем! Помогите, пожалуйста, сделать макрос. Задача: необходимо копировать с листа1 данные по определенному признаку из 9 столбца, и раскладывать их по листам, не удаляя с первого. Заранее спасибо!
Вложения
Тип файла: rar журнал_обр1.rar (40.3 Кб, 61 просмотров)

Последний раз редактировалось IRI_NA; 24.01.2010 в 09:57. Причина: неверный файл
IRI_NA вне форума Ответить с цитированием
Старый 23.01.2010, 22:36   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Макрос сделать, в принципе, несложно.

Но:
1) Надо раскидывать по цехам все строки первого листа, или только выделенные?

2) Потребуется как-то объяснить макросу, как искать лист, на который копировать. (названия цехов в выпадающем списке столбца 9 не совпадают с названиями листов)
Тут есть 2 варианта:
а) переименовать листы
б) в 13-й столбец рядом со списком цехов для выпадающих списков добавить 14-й столбец - с соответствующим каждому цеху названием листа.

3) Что делать, если для цеха из обрабатываемой строки не найден соответствующий лист в книге?
А если поле "цех" - пустое?

PS: Данные для выпадающих списков можно вынести на отдельный (возможно, скрытый) лист.

Последний раз редактировалось EducatedFool; 23.01.2010 в 22:38.
EducatedFool вне форума Ответить с цитированием
Старый 24.01.2010, 08:47   #3
IRI_NA
 
Регистрация: 23.01.2010
Сообщений: 7
Радость

немного разъяснила в файле. Причем строки на каждом листе должны выстраиваться сверху вниз по возрастанию нумерации заказов. Так как лист первый обновляется почти каждый день (признаки), необходимо, естественно,чтобы из листа, например, второго, согласно признаку строчка ушла куда положено...
Вложения
Тип файла: rar журнал_обр1.rar (40.3 Кб, 83 просмотров)

Последний раз редактировалось IRI_NA; 24.01.2010 в 08:53.
IRI_NA вне форума Ответить с цитированием
Старый 24.01.2010, 11:08   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Проверяйте:



Нажмите зеленую кнопку для запуска макроса.

Вот весь код:

Код:
Sub ОсновнойМакрос()
    Dim cell As Range, ra As Range: Application.ScreenUpdating = False
    Set ra = Range([i9], Range("i" & Rows.Count).End(xlUp))
    For Each cell In ra.SpecialCells(xlCellTypeConstants)
        ОбработатьСтроку cell
    Next cell
End Sub

Sub ОбработатьСтроку(ByRef cell As Range)
    ИмяЛиста = [Критерии].Find(cell).Next.MergeArea.Cells(1)
    ' если для данного цеха определён лист, и указана дата в столбце 2
    If Len(ИмяЛиста) And Len(cell.EntireRow.Cells(2)) > 0 Then
        On Error Resume Next
        Set МестоДляВставки = Worksheets(ИмяЛиста).Range("a" & Rows.Count).End(xlUp).Offset(1)
        'МестоДляВставки.Resize(1, 8).Value = cell.EntireRow.Range("a1:h1").Value
        cell.EntireRow.Range("a1:h1").Copy МестоДляВставки
    End If
End Sub
Кое-что переделал: вынес данные для выпадающих списков на отдельный лист Настройки

Принцип работы макроса:
  • Перебираются все заполненные ячейки в столбце ЦЕХ
  • Если для данного цеха на листе Настройки прописан существующий в книге лист, и для данной позиции проставлена дата во 2-м столбце, то строка копируется на нужный лист.
  • Если лист не найден, ничего не происходит
EducatedFool вне форума Ответить с цитированием
Старый 24.01.2010, 14:16   #5
IRI_NA
 
Регистрация: 23.01.2010
Сообщений: 7
По умолчанию

Спасибо за старания!
Проверила:
1) данные появляются не на всех листах - есть только на трех: газ. цех, печ.цех, переп.цех, в других нет.
2) при повторном применении макроса (при, например, обновлении данных на листе заказов) строки дублируются, а нужно, чтобы при перемещении заказа из цеха в цех, он (заказ) менял лист и убирался из старого; Т. е.списки каждый раз обновлялись.
3) 9 столбец нужен тоже - он описывает этап в цехе

благодарю!
IRI_NA вне форума Ответить с цитированием
Старый 24.01.2010, 14:46   #6
IRI_NA
 
Регистрация: 23.01.2010
Сообщений: 7
По умолчанию

9 столбец исправила сама, а вот все остальное...
IRI_NA вне форума Ответить с цитированием
Старый 24.01.2010, 14:49   #7
IRI_NA
 
Регистрация: 23.01.2010
Сообщений: 7
По умолчанию

нашла ошибку у себя - листы неправильно назывались. А все-таки как обновлять, а не добавлять списки?
IRI_NA вне форума Ответить с цитированием
Старый 24.01.2010, 15:24   #8
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте IRI_NA.
надеюсь правильно понял Вашу задачу, предлагаю решение с использованием библиотеки ADO. У этой конструкции нет ограничения по количеству строк, ограничения только по формату данных в столбцах - они должны быть одного типа.
Евгений.
Вложения
Тип файла: rar журнал_обр0.rar (51.2 Кб, 244 просмотров)
Teslenko_EA вне форума Ответить с цитированием
Старый 24.01.2010, 16:47   #9
IRI_NA
 
Регистрация: 23.01.2010
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Teslenko_EA Посмотреть сообщение
Здравствуйте IRI_NA.
надеюсь правильно понял Вашу задачу, предлагаю решение с использованием библиотеки ADO. У этой конструкции нет ограничения по количеству строк, ограничения только по формату данных в столбцах - они должны быть одного типа.
Евгений.
вот здесь, кажется, все получается!!! завтра проверю на работе! Спасибо!
IRI_NA вне форума Ответить с цитированием
Старый 25.01.2010, 20:55   #10
IRI_NA
 
Регистрация: 23.01.2010
Сообщений: 7
По умолчанию

Евгений
Большое спасибо за вашу помощь! Очень помогли!
IRI_NA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование записей из одной таблицы в другую rockedit БД в Delphi 4 10.12.2009 21:39
Передача данных из одной таблицы в другую, при выборе одной ячейки MickMick Microsoft Office Excel 6 06.10.2008 13:57
Копирования строк из одной таблици в другую Andersen Microsoft Office Access 6 13.08.2008 10:46
Копирование данных из одной таблицы в другую! фЁдОр БД в Delphi 18 06.01.2008 19:27
Отправлять данные из одной таблицы в другую Таня84 БД в Delphi 14 28.04.2007 23:23