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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать макрос:перенос данных из формы в форму, Есть две формы. Слегка отличаются.  
:(
    Опции темы
nikhardy
Дата 19.12.2011, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



История
Экономический отдел создал форму отчётности (From.xls). Разослал филиалам. Её заполнили и прислали назад 500 файлов. Но потом форму экономический отдел поменял (удалил несколько строчек). 

Требуется:
Все старые файлы быстро и автоматизированно перевести в новый формат (To.xls). 

Подробнее:

Требуется: брать значения ячеек строчки из файла From и класть в заданную строчку в файле To.xls. И далее сохранить свежезаполненный To.xls под уникальным именем. 

На выходе:
Хочется вместо файлов From (1).xls, From (2).xls...From (200).xls иметь To (1).xls, To (2).xls...To (200).xls


Как это можно сделать? Огромное спасибо заранее тому, кто ответит  
p.s.
Да, я уже заказал книги по VBA, но они, зараза, ещё не пришли. Потому прошу вашей квалифицированной помощи. Направьте smile

Файлы:
From.xls и To.xls 
прилагаются в архиве.



Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  From.rar 627,36 Kb
PM MAIL   Вверх
LOPUH
Дата 19.12.2011, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Растение
*


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

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



Если вам нужно просто перенести данные из ячеек одной книги в ячейки другой, при этом вы далеки от VBA, то тут в самый раз может подойти  запись макросов. То есть добавляете в книгу-приемник новый лист, копируете на него данные из формы источника. Далее включаете запись макроса и ручками  перетаскиваете  все нужные данные в нужном порядке. По окончании -останавливаете запись, копируете данные из другой формы  и запускаете записанный макрос.
      А вот чтобы перебирать автоматически  все книги в какой то папке то необходим цикл, тут придется писать руками. тогда  дополнительный лист создавать не нужно, а просто копировать из книги в книгу внутри цикла.

Это сообщение отредактировал(а) LOPUH - 19.12.2011, 12:09
PM MAIL   Вверх
nikhardy
Дата 20.12.2011, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



К сожалению, там 500 документов. И у меня уже имеется похожий макрос, но я его не до конца понимаю (он чужой).

Если бы вы смогли помочь мне разобраться с этим макросом, я, возможно, сам бы всё написал. 

Private Sub Main()
' Определим переменные

    Dim path As String, file As String, arg As String, i As Long

'Не будем отображать действия макроса

    Application.ScreenUpdating = False

'Спросим пользователя о том, в какой папке лежат файлы
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Укажите рабочую папку": .Show
        If .SelectedItems.Count = 0 Then Exit Sub Else path = .SelectedItems(1) & "\"
    End With

'Далее мне не понятно ничего. Что такое ExecutreExcel4Marco? 
Эта часть - знаю, по очереди берёт ячейки из очередной рабочей книги и кладёт в определенные ячейки на рабочем листе (файла, в котором макрос и содержится). 
Но что это такое и как оно работает - я не понимаю. 

    Rows("2:" & Rows.Count).ClearContents: file = Dir(path & "*.xls"): i = 2
    Do While file <> ""
        Cells(i, 1) = ExecuteExcel4Macro("'" & path & "[" & file & "]" & "Лист1'!" & Range("H13").Range("A1").Address(, , xlR1C1))
        Cells(i, 2) = ExecuteExcel4Macro("'" & path & "[" & file & "]" & "Лист1'!" & Range("B19").Range("A1").Address(, , xlR1C1))
        i = i + 1: file = Dir
    Loop
End Sub



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


Новичок



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

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



Код

' Особенно не ясна эта строчка. Что делает?
' Почему i = 2? 
Rows("2:" & Rows.Count).ClearContents: file = Dir(path & "*.xls"): i = 2 


    Do While file <> ""
'Далее каждая строчка присваивает ячейке значение. равное значению ячейки в очередной в цикле рабочей книги. Но Что делает кончик - Address(, , xlR1C1)?

        Cells(i, 1) = ExecuteExcel4Macro("'" & path & "[" & file & "]" & "Лист1'!" & Range("H13").Range("A1").Address(, , xlR1C1))
        Cells(i, 2) = ExecuteExcel4Macro("'" & path & "[" & file & "]" & "Лист1'!" & Range("B19").Range("A1").Address(, , xlR1C1))

' 
        i = i + 1: file = Dir
    Loop
End Sub


Где, в каких строках происходит переход к следующему по списку файлу в директории?
Спасибо, уважаемые)
PM MAIL   Вверх
LOPUH
Дата 20.12.2011, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Растение
*


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

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



Код

 Особенно не ясна эта строчка. Что делает?
' Почему i = 2? 
Rows("2:" & Rows.Count).ClearContents

Очищает содержимое строк начиная со второй и по последнюю (Rows.Count -число строк)
Код

file = Dir(path & "*.xls")

присваивает переменной  значение , в данном случае это адрес файла
Код

  i = i + 1

увеличивает значение  переменной то есть осуществляется переход к следующей папке

Это сообщение отредактировал(а) LOPUH - 20.12.2011, 13:46
PM MAIL   Вверх
nikhardy
Дата 20.12.2011, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



i = i + 1 - не переход к новой папке. 
Это переход к новой ячейке (строчке). Чтобы формировался список.

А вот цикла на смену КНИГИ нету. И мне это выносит мозг. КАК происходит переход к следующему файлу?

Добавлено через 2 минуты и 23 секунды
Код

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

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

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

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



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


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

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


 




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


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

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