Задача в Excel
Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill
Нужна помощь в решении такой задачи в Excel: Есть три файла A,B,C файлы В и С постоянно обновляются и затем информация из них в ручную переноситься в файл А при этом в случае совпадений строчка в файле А заменяется на строчки из В или С если совпадения нет то строчки добавляется снизу. Соответственно вопрос есть, какая ни будь возможность автоматизировать данный процесс с помощью макросов? Спасибо!
Насколько я помню, VBA позволяет переносить данные из файла в файл. Примерно так:
Application.Workbooks("A.xls").Sheets(1).Cells(3,5).Value=Application.Workbooks("B.xls").Sheets(1).Cells(3,5).Value
А уж перебрать в цикле все значения в строке, думаю, несложно.
Application.Workbooks("A.xls").Sheets(1).Cells(3,5).Value=Application.Workbooks("B.xls").Sheets(1).Cells(3,5).Value
А уж перебрать в цикле все значения в строке, думаю, несложно.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
-
- Сообщения: 1
- Зарегистрирован: 10 июл 2008, 14:47
Я решил эту проблему таким способом: в первом файле в одной из ячеек прописал гиперссылку на второй документ. После чего написал макрос, в котором для открытия второго файла просто тыкаешь на гиперссылку, а потом закрываешь после переноса данных второй файл. Работает безотказно. Только файлы должны иметь постоянное размещение и название.
Появилась идея как это можно сделать довольно просто. С помощью макросов копировать все содержимое книги В в книгу А затем опять же с помощью макросов выбираю первую пустую строчку в низу таблицы и копирую туда содержание книги Ц. Правда все это работает только при одновременном открытии всех трех книг
( Вот теперь и пытаюсь понять как сделать так, чтобы макрос в книге А автоматом тянул информацию из книги В и С даже когда они закрыты, о чем и задал вопрос в соседней теме (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 совсем недавно очень красиво решил подобную задачу, но я не могу найти этой темы, забыл как она называлась. Поищите, не пожалеете.
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
научите их ловить рыбу - и вы накормите их на всю жизнь".
Спасибо Всем за помощь. На данный момент пришел к такому решению: прописал две гиперссылки и через них с помощью макросов открываю требуемые файлы и копирую из них информацию. В качестве макросов работает Все на ура, как только пытаюсь сделать в виде кнопки возникает ошибка в выделенных строчках. Буду, признателен, если подскажете в чем причина и как с этим бороться.
Код: Выделить всё
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 код нужно разместитьв модуле листа, на котором находится кнопка.
похоже ошибка в этом
похоже ошибка в этом
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
научите их ловить рыбу - и вы накормите их на всю жизнь".
VictorM писал(а):если работать с CommandButton1_Click код нужно разместитьв модуле листа, на котором находится кнопка.
похоже ошибка в этом
Макрос с CommandButton1_Click прописан в 1ом листе и при его использовании ошибка возникает только в выделенных строках, то есть если их убрать все остальное работает нормально. Также если перенести макрос с Sub Макрос1() в первый лист он тоже начинает выдавать ошибку (№400), что делать прям не знаю

- VictorM
- Сообщения: 794
- Зарегистрирован: 23 окт 2006, 01:44
- Откуда: Lugansk, Ukraine
- Контактная информация:
Gerek,
Разместил в модуле Лист1 - все работает
и Sub Макрос1() и Private Sub CommandButton1_Click(). Ошибки в выделенных Вами строках не выдает. Так что даже не знаю, в чем причина Ваших неудач.
кстати, рекомендую сразу учиться избавляться от лишних Select, Activate.
т.е. две строки, к примеру
можно заменить одной
p.s. кстати, а попробуйте прописать ActiveCell.Rows("2:1000").Copy мож поможет
а вот теперь я "прям не знаю". Днем я отвечал с работы, некогда было проверять, а вот сейчас попробовал Ваш код проверить.начинает выдавать ошибку (№400), что делать прям не знаю
Разместил в модуле Лист1 - все работает

и Sub Макрос1() и Private Sub CommandButton1_Click(). Ошибки в выделенных Вами строках не выдает. Так что даже не знаю, в чем причина Ваших неудач.
кстати, рекомендую сразу учиться избавляться от лишних Select, Activate.
т.е. две строки, к примеру
Код: Выделить всё
Rows("2:1000").Select
Selection.Copy
Код: Выделить всё
Rows("2:1000").Copy
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
научите их ловить рыбу - и вы накормите их на всю жизнь".