Задача в Excel

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Gerek
Сообщения: 20
Зарегистрирован: 02 июл 2008, 11:30

Нужна помощь в решении такой задачи в Excel: Есть три файла A,B,C файлы В и С постоянно обновляются и затем информация из них в ручную переноситься в файл А при этом в случае совпадений строчка в файле А заменяется на строчки из В или С если совпадения нет то строчки добавляется снизу. Соответственно вопрос есть, какая ни будь возможность автоматизировать данный процесс с помощью макросов? Спасибо!
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Насколько я помню, VBA позволяет переносить данные из файла в файл. Примерно так:
Application.Workbooks("A.xls").Sheets(1).Cells(3,5).Value=Application.Workbooks("B.xls").Sheets(1).Cells(3,5).Value
А уж перебрать в цикле все значения в строке, думаю, несложно.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Gerek
Сообщения: 20
Зарегистрирован: 02 июл 2008, 11:30

Спасибо попробую!
Александр-Киев
Сообщения: 1
Зарегистрирован: 10 июл 2008, 14:47

Я решил эту проблему таким способом: в первом файле в одной из ячеек прописал гиперссылку на второй документ. После чего написал макрос, в котором для открытия второго файла просто тыкаешь на гиперссылку, а потом закрываешь после переноса данных второй файл. Работает безотказно. Только файлы должны иметь постоянное размещение и название.
Gerek
Сообщения: 20
Зарегистрирован: 02 июл 2008, 11:30

Появилась идея как это можно сделать довольно просто. С помощью макросов копировать все содержимое книги В в книгу А затем опять же с помощью макросов выбираю первую пустую строчку в низу таблицы и копирую туда содержание книги Ц. Правда все это работает только при одновременном открытии всех трех книг :( ( Вот теперь и пытаюсь понять как сделать так, чтобы макрос в книге А автоматом тянул информацию из книги В и С даже когда они закрыты, о чем и задал вопрос в соседней теме (http://forum.developing.ru/showthread.php?t=14723 ). Если кто знает как это можно сделать, помогите. Спасибо!
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

вот здесь http://www.programmersforum.ru/forumdisplay.php?f=20 SAS888 совсем недавно очень красиво решил подобную задачу, но я не могу найти этой темы, забыл как она называлась. Поищите, не пожалеете.
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
Gerek
Сообщения: 20
Зарегистрирован: 02 июл 2008, 11:30

Спасибо Всем за помощь. На данный момент пришел к такому решению: прописал две гиперссылки и через них с помощью макросов открываю требуемые файлы и копирую из них информацию. В качестве макросов

Код: Выделить всё

 Sub Макрос1()
работает Все на ура, как только пытаюсь сделать в виде кнопки

Код: Выделить всё

 Private Sub CommandButton1_Click()
возникает ошибка в выделенных строчках. Буду, признателен, если подскажете в чем причина и как с этим бороться.

Код: Выделить всё

Private Sub CommandButton1_Click()
    Range("C1").Select
    Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
    [B][I]Rows("2:1000").Select[/I][/B]    
    Selection.Copy
    Windows("General.xls").Activate
    Range("A3").Select
    ActiveSheet.Paste
    Range("C11").Select
    Application.CutCopyMode = False
    Selection.ClearContents
    Windows("Nikolaev.xls").Activate
    ActiveWindow.Close
    Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Select
    Range("D1").Select
    Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
    [I][B]Rows("2:1000").Select[/B][/I]
    Selection.Copy
    Windows("General.xls").Activate
    Range("A10").Select
    ActiveSheet.Paste
    Range("D18").Select
    Application.CutCopyMode = False
    Selection.ClearContents
    Windows("Vaganova.xls").Activate
    ActiveWindow.Close
End Sub
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

если работать с CommandButton1_Click код нужно разместитьв модуле листа, на котором находится кнопка.
похоже ошибка в этом
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
Gerek
Сообщения: 20
Зарегистрирован: 02 июл 2008, 11:30

VictorM писал(а):если работать с CommandButton1_Click код нужно разместитьв модуле листа, на котором находится кнопка.
похоже ошибка в этом

Макрос с CommandButton1_Click прописан в 1ом листе и при его использовании ошибка возникает только в выделенных строках, то есть если их убрать все остальное работает нормально. Также если перенести макрос с Sub Макрос1() в первый лист он тоже начинает выдавать ошибку (№400), что делать прям не знаю :confused:
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Gerek,
начинает выдавать ошибку (№400), что делать прям не знаю
а вот теперь я "прям не знаю". Днем я отвечал с работы, некогда было проверять, а вот сейчас попробовал Ваш код проверить.
Разместил в модуле Лист1 - все работает :confused:
и Sub Макрос1() и Private Sub CommandButton1_Click(). Ошибки в выделенных Вами строках не выдает. Так что даже не знаю, в чем причина Ваших неудач.
кстати, рекомендую сразу учиться избавляться от лишних Select, Activate.
т.е. две строки, к примеру

Код: Выделить всё

Rows("2:1000").Select
    Selection.Copy
можно заменить одной

Код: Выделить всё

Rows("2:1000").Copy
p.s. кстати, а попробуйте прописать ActiveCell.Rows("2:1000").Copy мож поможет
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
Ответить