Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Пакет Microsoft Office

  Все выпуски  

RFpro.ru: Пакет Microsoft Office


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

F®ost
Статус: Профессор
Рейтинг: 3071
∙ повысить рейтинг »
Black Cloud
Статус: Практикант
Рейтинг: 2220
∙ повысить рейтинг »
Kom906
Статус: 10-й класс
Рейтинг: 1608
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Помощь пользователю ПО / Пакет Microsoft Office

Номер выпуска:836
Дата выхода:18.09.2009, 08:30
Администратор рассылки:Ерёмин А.А., Мастер-Эксперт
Подписчиков / экспертов:543 / 329
Вопросов / ответов:1 / 2

Вопрос № 172127: Здравствуйте. Сейчас провожу на работе инвентаризацию и возникла следующая проблема - по идее 200 сотрудников должны заполнить экселевский файл, в котором они вводят в ячейку только инвентарный номер основных средств и при помощи функции "ВПР&qu...



Вопрос № 172127:

Здравствуйте. Сейчас провожу на работе инвентаризацию и возникла следующая проблема - по идее 200 сотрудников должны заполнить экселевский файл, в котором они вводят в ячейку только инвентарный номер основных средств и при помощи функции "ВПР" в соседние ячейки автоматически подтягиваются наименование, цена и дата. Также я сделал список, где они выбирают свою фамилию и автоматически подтягивается их должность и подразделение. С эти проблем нет, все работает хорошо.
Мне нужен Ваш совет в следующем - когда я получу 200 абсолютно одинаковых по структуре экселевских файлов, то как мне из них сделать один большой, т.е, как "слить" 200 маленьких таблиц по 10-20 записей в одну общую? Прописывать руками 200 связей, честно говоря, не хочется. Если это поможет, то у меня есть утилита, которая переименует эти 200 файлов в номера по порядку, т.е. 1.xls, 2.xls ... 200.xls.
Заранее благодарен за Ваши советы.

Отправлен: 13.09.2009, 08:10
Вопрос задал: Dlimon, Посетитель
Всего ответов: 2
Страница вопроса »


Отвечает Protos, Студент :
Здравствуйте, Dlimon.
Используйте программу MergeExcel. Она на русском языке, но не бесплатна. В дополнение к этому посмотрите здесь.

Приложение:

Ответ отправил: Protos, Студент
Ответ отправлен: 13.09.2009, 11:13

Оценка ответа: 4
Комментарий к оценке:
Программу я, конечно,покупать не буду но макросы в форуме, надеюсь, помогут.

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 254125 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает Megaloman, Бакалавр :
    Здравствуйте, Dlimon.
    Вот макрос, решающий Вашу проблему.
    Идея решения - готовим сводную таблицу из таблицы для заполнения данных,
    Она должна быть не защищена от записи. Она должна быть отформатирована как и таблицы с данными.

    Таблицы с данными называются 1 2 3 и т д.

    Макрос делаем в сводной таблице. Перед использованием в начале макроса надо сделать свои настройки (пути, границы таблиц)
    По тексту макросов я написал комментарии в тексте.
    Макрос последовательно открывает таблицы с данными, определяет число заполненных строк,
    в сводной таблице делает ссылки на заполненные данные.

    Далее вместо ссылок в сводной таблице сохраняем значения. В принципе, можно оставить и ссылки,
    но в большой таблице громадное количество ссылок приведёт к очень медленной работе.Да и копировать
    такую таблицу затруднительно.

    Код:
    DannPath = "D:\Proba"           ' Путь со сливаемыми таблицами с именами 1 2 3 4 ... NTab
    ListSvod = "Данные" ' Имя листа в каждой таблице с данными
    NTab = 200 ' Число таблиц с данными. Имена таблицы совпадают с номером по порядку

    NameSvod = "Свод.xls" ' Имя файла со сводом (без путей)(в нём запишем макрос)
    NameDann = "Лист со сводом" ' Имя листа со сводом

    BegRow = 4 ' С какой строки начинаются данные
    BegCol = "A" ' С какого столбца начинаются данные
    EndCol = "H" ' Каким столбцом кончаются данные

    TestCol = "A" ' В каком столбце гарантированно непустое ЗАПОЛНЯЕМОЕ ПОЛЬЗОВАТЕЛЕМ поле при наличии данных

    Windows(&qu ot;Свод.xls").Activate
    Sheets("Лист со сводом").Select
    Rows(CStr(BegRow) + ":65535").ClearContents ' Чистим сводную таблицу

    Application.CutCopyMode = False

    nRow = BegRow

    For i = 1 To NTab ' Последовательно открываем все имеющиеся таблицы

    TekName = CStr(i) + ".xls" ' Имя таблицы, которую попытаемся открыть

    On Error Resume Next
    Workbooks.Open Filename:=DannPath + "\" + TekName ' Открываем

    If Err.Number = 0 Then ' Успешно открыли
    Sheets(ListSvod).Select
    EndRow = Range(TestCol + "65535").End(xlUp).Row ' Ищем последнюю заполненную строку

    Windows(NameSvod).Activate ' Вставим в свод ссылку на данные
    Range(BegCol + CStr(nRow)).Formula = "='" + DannPath + "\" + "[" + TekName + "]" + ListSvod + "'!" + BegCol + CStr(BegRow)

    Range(BegCol + CStr(nRow)).Copy ' Ссылку в своде размножим на необходимое число ячеек.
    Range(BegCol + CStr(nRow) + ":" + EndCol + CStr(nRow + EndRow - BegRow)).Select
    ActiveSheet.Paste
    nRow = nRow + EndRow - BegRow + 1

    ' Вместо ссылок сохраняем значения
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

    Windows(TekName).Close
    End If

    Next
    Range("A1").Select
    ActiveWorkbook.Save
    Вот еще вариант макроса - он копирует данные из таблицы с данными и вставляет в сводную таблицу
    значения исходных клеток. Макрос работает, но мне не удалось избавиться от запроса на сохранение буфера
    обме на при закрытии исходной таблицы. При большом кол-ве таблиц это неудобно.
    Буду благодарен, если кто-то подскажет, как этого избежать.
    Код:
    DannPath = "D:\Proba"           ' Путь со сливаемыми таблицами с именами 1 2 3 4 ... NTab
    ListSvod = "Данные" ' Имя листа в каждой таблице с данными
    NTab = 200 ' Число таблиц с данными. Имена таблицы совпадают с номером по порядку

    NameSvod = "Свод.xls" ' Имя файла со сводом (без путей)(в нём запишем макрос)
    NameDann = "Лист со сводом" ' Имя листа со сводом

    BegRow = 4 ' С какой строки начинаются данные
    TestCol = "A" ' В каком столбце гарантированно непустое ЗАПОЛНЯЕМОЕ ПОЛЬЗОВАТЕЛЕМ поле при наличии данных

    Windows("Свод.xls").Activate
    Sheets("Лис т со сводом").Select
    Rows(CStr(BegRow) + ":65535").ClearContents

    nRow = BegRow

    For i = 1 To NTab ' Последовательно открываем все имеющиеся таблицы

    TekName = CStr(i) + ".xls" ' Имя таблицы, которую попытаемся открыть

    On Error Resume Next
    Workbooks.Open Filename:=DannPath + "\" + TekName ' Открываем

    If Err.Number = 0 Then ' Успешно открыли
    Sheets(ListSvod).Select

    EndRow = Range(TestCol + "65535").End(xlUp).Row ' Ищем последнюю заполненную строку
    Rows(CStr(BegRow) + ":" + CStr(EndRow)).Copy ' Копируем в буфер заполненные строки

    Windows(NameSvod).Activate ' Вставим в свод ЗНАЧЕНИЯ скопированных в исх данных свод

    Rows(CStr(nRow)).PasteSpecia l Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

    nRow = nRow + EndRow - BegRow + 1
    Windows(TekName).Close SaveChanges:=False
    End If

    Next
    Range("A1").Select


    Но вообще-то такие вещи лучше делать в Access. Типичная задача для базы данных. А базу заполнять по сети каждому пользователю.

    -----
    Нет времени на медленные танцы

    Ответ отправил: Megaloman, Бакалавр
    Ответ отправлен: 13.09.2009, 20:54

    Оценка ответа: 5
    Комментарий к оценке:
    Спасибо. Завтра обязательно буду пробовать.

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 254142 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.8 от 28.08.2009

    В избранное