Добрый день! Прикрепленные файлы
|
|
Hugo Пользователь Сообщений: 23249 |
Практически никак. Теоретически делали на ADO, но там всякие ограничения, я не особо разбираюсь… Изменено: Hugo — 22.03.2017 17:54:30 |
Мотя Пользователь Сообщений: 3218 |
В связи с чем такие требования к файлу Book2? |
В Book2 хочу прописать потом формулы которые не должны быть общедоступны. |
|
Wanschh Пользователь Сообщений: 231 |
Уважаемый The_Priest в другой, но похожей теме рекомендовал ознакомиться: с этим Возможно, это Ваш случай. |
Hugo Пользователь Сообщений: 23249 |
Так там — ПОЛУЧИТЬ. А тут — ПОЛОЖИТЬ! |
Мотя Пользователь Сообщений: 3218 |
Сделайте Book2 транзитным файлом. В своем личном файле делайте обновления из транзитного файла. |
Колеги, можите пожалуйста продемонстрировать это на моем примере? Не совсем понимаю значения «транзитный файл». И как делать эти обновления. Спасибо. |
|
Hugo Пользователь Сообщений: 23249 |
Вообще формулы можно спрятать защитой листа. Другое дело насколько эта защита надёжна… |
Это да. Но интересно сделать так, чтобы операции проводились в одной книге, потом вставлялись как значения в другую не открывая её. |
|
kuklp Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Ни вставить, ни прочитать ничего не открывая файл невозможно. Ни через какие АДО. Разве что силой мысли Я сам — дурнее всякого примера! … |
То есть по факту выход только тот чтобы делать все в одном файле? |
|
PowerBoy Пользователь Сообщений: 141 |
#13 23.03.2017 11:44:02
ТС имеет ввиду не открывая файл в экселе. Через ADO он спокойно считает всю информацию,не открывая его в экселе. Excel + SQL = Activetables |
||
Мотя Пользователь Сообщений: 3218 |
#14 23.03.2017 11:45:19
Транзитный пассажир (трансферный пассажир) — пассажир любого типа транспорта, который находится в определенной точке временно, с целью того, чтобы продолжить свой путь дальше через какой-то промежуток времени. |
||
PowerBoy Пользователь Сообщений: 141 |
#15 23.03.2017 12:12:15 Поместите код в модуль книги Book2,сохраните Book2 с поддержкой макросов, книги должны лежать рядом, данные перекинуться из Book1.
Изменено: PowerBoy — 23.03.2017 12:19:48 Excel + SQL = Activetables |
||
kuklp Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
#16 23.03.2017 12:40:28
похвально, что Вы умеете читать мысли ТС
Лично я понял это так, что первый файл уже открыт. И для меня сомнительно преимущество привлечения сторонней библиотеки(OLEDB), при этом же все равно файл 2 нужно открыть. Почему просто не открыть второй файл макросом из первого, запузырить туда все что надо, сохранить и закрыть его, скрывая все эти действа с экрана? И примеров такому на форуме несть числа. Я сам — дурнее всякого примера! … |
||||
Все равно работает только когда Book2 открыта. И как написать чтобы эти данные падали в нужные ячейки и каждый раз когда задействовался макрос данные в Book2 накапливались а не заменялись? |
|
AlexBosenko Пользователь Сообщений: 195 |
#18 23.03.2017 13:24:53 Вот пишу такой код. Но данные вставляются в виду ошибке. В чем может быть причина?
|
||
взять (положить) данные из файла не открывая сам файл можно только прямым чтением (записью) секторов с накопителя на котором он находиться. у файловой системы спросить где он лежит, определить кластер и цепочку кластеров и считывать… с записью сложнее, если что-то поправить и записать обратно скорее всего файл рухнет так, что его уже не откроет никто и ничто. Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
|
Игор, спасибо. Но как это сделать при «на кодах»? Логику эту я понимаю, и как раз о такой логике я писал сначала. Но вот в кодах (макросах) слабоват. |
|
Колеги, окей. Подскажите пожалуйста следующее: Прикрепленные файлы
Изменено: AlexBosenko — 23.03.2017 14:16:39 |
|
Ігор Гончаренко Пользователь Сообщений: 13746 |
#22 23.03.2017 14:07:11 однако…
смотрим #18 Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
Hugo Пользователь Сообщений: 23249 |
#23 23.03.2017 14:11:01
— это смотря где лежит код, может быть и так, а может и иначе. А где код — это мне неизвестно… |
||
посмотрите пожалуйста, последнее письмо где прикреплена только одна книга. Думаю стоит попробовать все сделать в одной книге и просто потом запаролить листы Прикрепленные файлы
Изменено: AlexBosenko — 23.03.2017 14:18:12 |
|
извините, «загнался» Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
|
Hugo Пользователь Сообщений: 23249 |
#26 23.03.2017 14:29:09
если код в стандартном модуле. А если в модуле книги, как некоторые любят? |
||
Давайте остановимся но одной книге и попробуем там решить задачу пожалуйста Прикрепленные файлы
|
|
осталось выяснить в чем суть задачи Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
|
ладно, что я сам себе задачу не поставлю… Прикрепленные файлы
Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
|
AlexBosenko Пользователь Сообщений: 195 |
#30 23.03.2017 16:39:02 Игор, спасибо большое. Но как сделать: Чтобы копиросалось не все, а только те строчки где есть дата (то есть в столбце Date)? |
Задача состоит в том, чтобы скопировать определенный диапазон текущего листа, открыть другую книгу, и вставить эти скопированные данные в определенную ячейку, сохранить этот файл и закрыть. Ниже приведен код VBA.
Sub Название_Макроса() 'Выделить диапазон который необходимо скопировать Range("A1:F52").Select 'Скопировать то, что выделено Selection.Copy ChDir "путь к папке где лежит файл в который необходимо скопировать" Workbooks.Open Filename:= "Название файла, который находится в папке, путь к которой указан выше" 'Выделить начальную ячейку в которую необходимо вставить скопированные данные Range("A6").Select 'Вставить данные ActiveSheet.Paste 'сохранить текущую книгу ActiveWorkbook.Save 'Закрыть книгу ActiveWorkbook.Close End Sub
Вариант 2: В открывшейся книге запускаем макрос, чтобы он открыл нужную нам книгу, скопировал от туда нужные нам данные и вставил в нашу открытую книгу, закрыв файл из которого эти данные были скопированы
Sub Название_Макроса2() 'Открываем файл с которого нужно скопировать данные Workbooks.Open Filename:="C:Данные.xlsx" 'Скопировать нужный диапазон в открывшейся книге на листе 1 Workbooks("Данные.xlsx").Worksheets("Лист1").Range("A16:E16").Copy 'Активируем нужную нам книгу Workbooks("Книга1.xlsm").Activate 'Выделяем и вставляем скопированные данные в ячейку А1 ActiveWorkbook.Worksheets("Лист1").Range("A1").Select ActiveSheet.Paste 'Закрываем книгу откуда мы скопировали данные Workbooks("Данные.xlsx").Close End Sub
Еще пример — Скопировать диапазоны данных из активной открытой книги Excel нескольких листов (в нашем примере 3-х листов) в другую книгу, которая хранится в определенном месте. Данные будут вставлены как значения, плюс будут перенесены форматы ячеек.
Sub Копируем_листы_в_другую_книгу() Dim bookconst As Workbook Dim abook As Workbook Set abook = ActiveWorkbook 'присваиваем перменную активной книге Set bookconst = Workbooks.Open("C:UsersUserDesktop1.xlsx") 'присваиваем перменную книге куда необходимо копировать данные 'переходим в активную книгу откуда необходимо скопировать данные abook.Worksheets("Лист1").Activate Range("A1:I23").Copy 'копируем определенный диапазон листа, укажите свой диапазон bookconst.Worksheets("Лист1").Activate 'активируем лист куда необходимо вставить данные Range("A1:I23").Select 'встаем на ячейку А1 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем только форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'второй лист abook.Worksheets("Лист2").Activate Range("A1:I23").Copy bookconst.Worksheets("Лист2").Activate Range("A1:I23").Select 'выделяем диапазон Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем только форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'третий лист abook.Worksheets("Лист3").Activate Range("A1:I23").Copy bookconst.Worksheets("Лист3").Activate Range("A1:I23").Select 'выделяем диапазон Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем только форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'сохранить текущую книгу bookconst.Save 'Закрыть книгу bookconst.Close abook.Activate End Sub
Если статья была вам полезна, то буду благодарен, если вы поделитесь ей со своими друзьями с помощью кнопок расположенных ниже.
Спасибо за внимание.
Kassia 4 / 1 / 0 Регистрация: 25.11.2012 Сообщений: 108 |
||||
1 |
||||
10.02.2015, 15:58. Показов 24312. Ответов 23 Метки нет (Все метки)
Добрый день! Знаю тут много тем про копирование данных. Но я так и не нашла по теме. Вобщем мне надо из разных файлов собрть ин6формацию в один.
Вобщем каждый раз открываю и закрываю файл чтобы вытащить значение одной ячейки. Вот как сделать чтобы сразу вытаскивать эти все знаения и вставлять их в нужные ячейки. И вот интересно как сделать чтобы допустим из нужного файла по одному столбцу найти значение допустим а = 3407 и если нашлось то выбераем значение из столбца рядом напротив которого эта цифра и вставляем ее в общий файл в нужную ячейку. надеюсь понятно объяснила)
0 |
Казанский 15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||
10.02.2015, 16:50 |
2 |
|||
Вобщем каждый раз открываю и закрываю файл чтобы вытащить значение одной ячейки Интересно, а когда Вы вручную копируете ячейки из одного файла в другой, Вы тоже каждый раз файл закрываете? Ну хотя бы так:
1 |
Hugo121 6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
||||
10.02.2015, 17:39 |
3 |
|||
Если нужны только данные без попугаев/форматов, то думаю сработает так:
1 |
4 / 1 / 0 Регистрация: 25.11.2012 Сообщений: 108 |
|
10.02.2015, 19:03 [ТС] |
4 |
Нет так я не могу D3:F3 вставить потому что там значения вставлять нужно через одну ячейку. Но спасибо за поомщь) код продукта (столбец С) количество (столбец В) вот как мне так записать : найди код такой то и вытащи значение из столбца В и вставь это значение в общий файл в нужную ячейку. if kod = 3408 then … ?
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
10.02.2015, 20:21 |
5 |
Я обычно сперва загоняю все эти пары в словарь (код-значение или код-позиция_в_массиве_или_на_листе), затем просто извлекаю нужное из словаря, без всяких долгих поисков.
0 |
chumich 2079 / 1232 / 464 Регистрация: 20.12.2014 Сообщений: 3,237 |
||||
10.02.2015, 20:42 |
6 |
|||
вот как мне так записать : найди код такой то и вытащи значение из столбца В и вставь это значение в
0 |
4 / 1 / 0 Регистрация: 25.11.2012 Сообщений: 108 |
|
11.02.2015, 16:36 [ТС] |
7 |
Вот прикрепляю два файла. Из файла Омская нужно вытащить значения в файл 1. Я думала по коду как то искать потому что ячейки могут меняться при загрузке обновленных файлов. так вот как записать: ищу по коду значение и беру значение напротив этого и вставляю в общий файл. в нужную ячейку.
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
11.02.2015, 17:35 |
8 |
Поясните каким образом «ячейки могут меняться» — потому что есть несколько вариантов действий, но думаю проще всего использовать ВПР() (можно в макросе).
0 |
4 / 1 / 0 Регистрация: 25.11.2012 Сообщений: 108 |
|
11.02.2015, 19:33 [ТС] |
9 |
Эти файлы по областям выгружаются из базы. и могут ячейки смещаться. то есть был доупстим топливо в ячейке C1 а стало в ячейке C2 так как может впереди добавиться допустим молоко, которого в прошлом месяце не было. поэтому мне и нужно чтоб наверняка сравнивать по коду товара как то) и нужен макрос. впр не пойдет(
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
11.02.2015, 22:11 |
10 |
Так как раз ВПР и пойдёт.
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
||
11.02.2015, 22:21 |
11 |
|
Вот, только имя файла поменять. Ну а если коды известны — то конечно нужно искать по коду, чтоб например не спутать газовое топливо с газировкой Вложения
0 |
4 / 1 / 0 Регистрация: 25.11.2012 Сообщений: 108 |
|
12.02.2015, 18:33 [ТС] |
12 |
Ох, не подходит мне ВПР. я же напсиала . мне нужно именно макросом а не функцией! Я же спрашиваю конкретно как прописать такой макрос))))) Мне не подходит ВПР! конечно это проще и им бы я и сама могла сделать.
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
12.02.2015, 18:59 |
13 |
Запишите рекордером простановку этой ВПР() и замену её на значение (с полными путями к файлу), подправьте по вкусу.
0 |
Alexander_LA 0 / 0 / 0 Регистрация: 21.05.2015 Сообщений: 8 |
||||
04.08.2015, 10:32 |
14 |
|||
Помогите пожалуйста найти ошибку: Код открывает выбранный пользователем файл и копирует данные из него в заданное место. Но работало-работало и вдруг перестало, не могу понять в чем дело. Выдает то out of range, то error 1004. P.S. Таких кнопок считывающих данные с других файлов 4, вставляют на 4 разных листа.
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
04.08.2015, 11:00 |
15 |
1. А нет ли MISSING в референсах ВБА?
0 |
0 / 0 / 0 Регистрация: 21.05.2015 Сообщений: 8 |
|
04.08.2015, 11:01 |
16 |
MISSING в референсах простите, а что это?
Код можно чуть подправить, избавиться от селектов, активаций и даже копи. как?
0 |
Hugo121 6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
||||
04.08.2015, 11:09 |
17 |
|||
Вроде где-то так (не проверял ессно…)
Добавлено через 2 минуты
простите, а что это? В редакторе VBA идёте Tools->References и смотрите — если есть, то снимаете галки или устанавливаете компоненты.
0 |
0 / 0 / 0 Регистрация: 21.05.2015 Сообщений: 8 |
|
04.08.2015, 11:28 |
18 |
С одним файлом сработало, а второй — снова выдал out of range.
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
04.08.2015, 11:31 |
19 |
Подозреваю что не те файлы открываете… *.xls нужно исключить, не уследил, виноват…
0 |
0 / 0 / 0 Регистрация: 21.05.2015 Сообщений: 8 |
|
04.08.2015, 11:44 |
20 |
*.xls нужно исключить, не уследил, виноват… Да вроде уже открывает и *.xls. Чего с ним могут быть проблемы? По моему помогло! Спасибо большое! А может еще подскажете как втянуть строки из txt файла по этому же принципу?
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
04.08.2015, 11:44 |
20 |
Excel для Microsoft 365 Excel для Microsoft 365 для Mac Excel 2021 Excel 2021 для Mac Excel 2019 Excel 2019 для Mac Excel 2016 Excel 2016 для Mac Excel 2013 Excel 2010 Excel 2007 Еще…Меньше
Если книга содержит макрос Visual Basic для приложений(VBA),который вы хотите использовать в другом месте, вы можете скопировать модуль, содержащий этот макрос, в другую открытую книгу с помощью редактора Visual Basic(VBE).
Макросы и средства VBA находятся на вкладке Разработчик, которая по умолчанию скрыта, поэтому сначала нужно включить ее.
-
Чтобы Windows, перейдите в меню Параметры > >Настроить ленту.
-
Для Macперейдите на Excel > параметры… >ленты & панели инструментов.
-
Затем в разделе Настройка ленты в разделе Основные вкладкиубедитесь в том, что в разделе Разработчик.
Общие сведения о макросах и VBA
Если вы не знакомы с макросами и VBA в целом, вам могут пригодиться следующие сведения:
-
Макрос — это действие или набор действий, которые можно использовать для автоматизации задач.
-
Макрос можно записать с помощью команды Запись макроса на вкладке Разработчик.
-
Макрос записуется на языке программирования VBA.
-
Вы можете проверить и изменить макрос в редакторе Visual Basic, которое открывается Excel. Вот пример окна VBE для Windows:
Макрос с именами MakeCellGreen и SetRowHeight находится в модуле Module1,который хранится в книге Book1.
Копирование модуля из одной книги в другую
-
Откройте книгу, содержаную макрос, который вы хотите скопировать, и книгу, в которую вы хотите его скопировать.
-
На вкладке Разработчик щелкните Visual Basic, чтобы открыть редактор Visual Basic редактора.
-
В редакторе Visual Basic меню Вид выберите Project проводник
или нажмите CTRL+R .
-
В области Project проводника перетащите модуль, содержащий макрос, который нужно скопировать в 9-ю книгу. В этом случае мы копируете Module1 из Book2.xlsm в Book1.xlsm.
-
Модуль1, скопирован из Book2.xlsm
-
Копия модуля1, скопированная в Book1.xlsm
Дополнительные сведения
Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.
Нужна дополнительная помощь?
Макрос для переноса данных из одного файла в другой |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Макрос переноса данных из одного файла в другой
Автор Alexandrin, 28.01.2011, 12:12
« назад — далее »
Добрый день всем! Нужна помощь.
Требуется, чтобы при нажатии кнопки в файле «Исходные данные», который может находиться в любом месте, выделенные желтым данные вставлялись в пустую строку, следующую после последней заполненной строки. Файл «Итоговый файл» находится в строго определенном месте, таблица в нем дополняется из файлов, аналогичных указанному выше. Место, откуда нужно вставить данные, указано в ячейках формулами. Ссылки скорее всего работать не будут, но можно сориентироваться по номерам ячеек.
Посмотрите у Сержа (который 007) на форуме. Он, вроде, в друзьях с этим форумом, поэтому, надеюсь, что ссылка не будет считаться нарушением правил.
Там в топике Макрос «Copy_ROWs_to_EXT_FILE» я выкладывал решение — макрос, который копирует строки выбранных ячеек во внешний файл Excel.
С уважением, Алексей
Цитата: Alex_ST от 28.01.2011, 16:01
Посмотрите у Сержа (который 007) на форуме. Он, вроде, в друзьях с этим форумом, поэтому, надеюсь, что ссылка не будет считаться нарушением правил.
Там в топике Макрос «Copy_ROWs_to_EXT_FILE» я выкладывал решение — макрос, который копирует строки выбранных ячеек во внешний файл Excel.
А возможно сделать что бы бралось из 2 файлов источников?
Вы, кажется, чего-то не совсем поняли…
Макрос Copy_ROWs_to_EXT_FILE заносится в стандартный модуль файла-источника.
Вот, я немного добавил комментариев в код для его понимабельности:
Sub Copy_ROWs_to_EXT_FILE() ' скопировать строки выделенных ячеек во внешний файл-накопитель
'---------------------------------------------------------------------------------------
' Procedure : Copy_ROWs_to_EXT_FILE
' Author : KuklP & Alex_ST
' Topic_HEADER : Макрос "Copy_ROWs_to_EXT_FILE"
' Topic_URL : http://www.excelworld.ru/forum/3-176-2008-16-1293625247
' DateTime : 29.12.10, 15:20
' Purpose : скопировать строки выделенных ячеек во внешний файл-накопитель
' Notes : после работы макроса файл-накопитель становится невидимым в обычных окнах Excel (как надстройка или Personal.xls)
'---------------------------------------------------------------------------------------
If Not TypeName(Selection) = "Range" Then Exit Sub
Dim lr&, wb As Workbook, lb As Workbook
With Application: .ScreenUpdating = False: .DisplayAlerts = False: .EnableEvents = False: End With
Set wb = GetObject("c:test.xls") ' здесь нужно прописать полный путь к файлу-накопителю
Set lb = ThisWorkbook
lr = wb.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row ' lr - номер последней не пустой строки файла-накопителя
Selection.EntireRow.Copy wb.Sheets(1).Cells(lr + 1, 1) ' вставить выбранные в файле-источнике строки после последней не пустой строки в файл-накопитель
wb.Close (True) ' закрыть файл-накопитель с сохранением
With Application: .EnableEvents = True: .DisplayAlerts = True: .ScreenUpdating = True: End With
Set wb = Nothing: Set lb = Nothing
End Sub
В файле-накопителе всего лишь в модуле книги прописывается обработка события Private Sub
Workbook_Open()
If Me.Parent.Caption = Application.Caption Then Windows(Me.Name).Visible = True
End Sub
При этом число файлов-источников ничем не ограничено. Можно и два, и три, и четыре…
С уважением, Алексей
Цитата: Alex_ST от 28.01.2011, 16:01
…надеюсь, что ссылка не будет считаться нарушением правил.
Нет, Алекс, не будет
Если ссылка по теме — то на любом нормальном форуме это не будет нарушением правил.
Цитата: Serge 007 от 28.01.2011, 22:44
Если ссылка по теме — то на любом нормальном форуме это не будет нарушением правил.
Ну, про все форумы это ты зря…
Например, на форуме про iPod’ы на iworld-club на меня модератор гневаться изволил, когда я там в конце ответа на вопрос одного из новичков посоветовал поподробнее посмотреть топик на форуме ipoding
При этом ни один из этих форумов я бы не отнёс к ненормальным. Оба очень толковые.
С уважением, Алексей
Цитата: Alex_ST от 29.01.2011, 23:27
…ни один из этих форумов я бы не отнёс к ненормальным. Оба очень толковые.
Толковый и нормальный — это разные понятия.
В рунете есть сайт киберфорум (я там тоже модератор). Очень толковый. Уровень постоянных участников минимум не ниже планетарного. Но ненормальный. Ссылки на другие форумы запрещены ВООБЩЕ. Почему — не знаю. Таково желание админа. Приходится ему подчиняться.
Цитата: Alex_ST от 28.01.2011, 20:51
Вы, кажется, чего-то не совсем поняли…
Макрос Copy_ROWs_to_EXT_FILE заносится в стандартный модуль файла-источника.
Вот, я немного добавил комментариев в код для его понимабельности:Sub Copy_ROWs_to_EXT_FILE() ' скопировать строки выделенных ячеек во внешний файл-накопитель
'---------------------------------------------------------------------------------------
' Procedure : Copy_ROWs_to_EXT_FILE
' Author : KuklP & Alex_ST
' Topic_HEADER : Макрос "Copy_ROWs_to_EXT_FILE"
' Topic_URL : http://www.excelworld.ru/forum/3-176-2008-16-1293625247
' DateTime : 29.12.10, 15:20
' Purpose : скопировать строки выделенных ячеек во внешний файл-накопитель
' Notes : после работы макроса файл-накопитель становится невидимым в обычных окнах Excel (как надстройка или Personal.xls)
'---------------------------------------------------------------------------------------
If Not TypeName(Selection) = "Range" Then Exit Sub
Dim lr&, wb As Workbook, lb As Workbook
With Application: .ScreenUpdating = False: .DisplayAlerts = False: .EnableEvents = False: End With
Set wb = GetObject("c:test.xls") ' здесь нужно прописать полный путь к файлу-накопителю
Set lb = ThisWorkbook
lr = wb.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row ' lr - номер последней не пустой строки файла-накопителя
Selection.EntireRow.Copy wb.Sheets(1).Cells(lr + 1, 1) ' вставить выбранные в файле-источнике строки после последней не пустой строки в файл-накопитель
wb.Close (True) ' закрыть файл-накопитель с сохранением
With Application: .EnableEvents = True: .DisplayAlerts = True: .ScreenUpdating = True: End With
Set wb = Nothing: Set lb = Nothing
End Sub
В файле-накопителе всего лишь в модуле книги прописывается обработка события Private SubWorkbook_Open()
If Me.Parent.Caption = Application.Caption Then Windows(Me.Name).Visible = True
End Sub
При этом число файлов-источников ничем не ограничено. Можно и два, и три, и четыре…
Да, верно, извините. Просто ищу решение для копирования строк(но не все даннуе) из одного файла во второй и из третьего файла также во второй. Плюс еще есть свой сложности там. Уже цепляюсь за что то похожее.
https://forum.msexcel.ru/empty-t4785.0.html
Про строки понятно, но мне нужно вставлять не строки целиком, а конкретные ячейки в нужное место, как я указал в файле. Как Это сделать?
И как сделать, чтобы итоговый файл был виден?
Я же писАл, что в файле-накопителе в модуле книги необходимо прописать обработку события
Private Sub Workbook_Open()
If Me.Parent.Caption = Application.Caption Then Windows(Me.Name).Visible = True
End Sub
тогда накопитель не будет становиться не невидимым при обычном его открытии.
Я в своём примере продемонстрировал общий принцип копирования данных (строки) во внешний файл в строку, следующую за последней занятой.
Кто вам мешает теперь чуть-чуть «подпилить» макрос под свои нужды чтобы копировалась не вся строка, а только отдельные её ячейки?
С уважением, Алексей
Цитата: Alex_ST от 30.01.2011, 22:04
Я же писАл, что файле-накопителе в модуле книги прописывается обработка событияPrivate Sub Workbook_Open()
If Me.Parent.Caption = Application.Caption Then Windows(Me.Name).Visible = True
End Sub
тогда накопитель не будет становиться не невидимым при обычном его открытии.Я в своём примере продемонстрировал общий принцип копирования данных (строки) во внешний файл в строку, следующую за последней занятой.
Кто вам мешает теперь чуть-чуть «подпилить» макрос под свои нужды чтобы копировалась не вся строка, а только отдельные её ячейки?
С видимостью разобрался, спасибо . Я просто не знаю, как в этом макросе прописать пути копирования нужных ячеек. Поэтому надеюсь на помощи форума
Наверное, что-то типа этого:
Sub Copy_CELLS_to_EXT_FILE() ' скопировать ячейки 1, 2, 3 из выбранной строки в ячейки 3, 2, 1 внешнего файла-накопителя
If Not TypeName(Selection) = "Range" Then Exit Sub
Dim DST_lr&, SRC_row& ' последняя занятая строка накопителя и строка источника, в которой выбрана любая ячейка
Dim SRC_wbk As Workbook, DST_wbk As Workbook ' книги источника и накопителя
With Application: .ScreenUpdating = False: .DisplayAlerts = False: .EnableEvents = False: End With
Set DST_wbk = GetObject("c:test.xls") ' здесь нужно прописать полный путь к файлу-накопителю
Set SRC_wbk = ThisWorkbook
DST_lr = DST_wbk.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row ' DST_lr - номер последней не пустой строки файла-накопителя
SRC_row = Selection.Row
SRC_wbk.ActiveSheet.Cells(SRC_row, 1).Copy DST_wbk.Sheets(1).Cells(DST_lr + 1, 3) ' данные из ячейки 1 источника вставить в ячейку 3 первой пустой строки накопителя
SRC_wbk.ActiveSheet.Cells(SRC_row, 2).Copy DST_wbk.Sheets(1).Cells(DST_lr + 1, 2) ' данные из ячейки 2 источника вставить в ячейку 2 первой пустой строки накопителя
SRC_wbk.ActiveSheet.Cells(SRC_row, 3).Copy DST_wbk.Sheets(1).Cells(DST_lr + 1, 1) ' данные из ячейки 3 источника вставить в ячейку 1 первой пустой строки накопителя
DST_wbk.Close (True) ' закрыть файл-накопитель с сохранением
With Application: .EnableEvents = True: .DisplayAlerts = True: .ScreenUpdating = True: End With
Set DST_wbk = Nothing: Set SRC_wbk = Nothing
End Sub
Честно предупреждаю: не проверял, т.к. приболел, гриппую, жена от компа гонит соблюдать постельный режим
С уважением, Алексей
Желаю скорейшего выздоровления, а то у меня появился еще вопросик
Как модернизировать макрос, чтобы он автоматически делал гиперссылку в ячейке 3 итогового файла на исходный файл?
Спасибо за помощь
А вы попробуйте самостоятельно:
1. Макрорекордером записать процесс вставки гиперссылки на внешний файл.
2. Вставить соответствующие команды в процедуру Copy_CELLS_to_EXT_FILE
Да, и ещё, определитесь, что вы хотите получить в ячейке НАКОПИТЕЛЯ:
— внешнюю связь (формулу, ссылающуюся на некую ячейку ИСТОЧНИКА)
— гиперссылку — при «клике» на неё открывается ИСТОЧНИК
С уважением, Алексей
У меня такая строчка получилась:
DST_wbk.Sheets(1).Cells(DST_lr + 1, 3).Hyperlinks.Add Anchor:=Selection, Address: = «G:My DocumentsРаботаИсходные данные.xls»
Но что-то она не работает
Но если даже она заработает, то на гиперссылке будет висеть фиксированный адрес, а мне нужен текущий адрес SRC_wbk.
Help me, please
Цитата: Alexandrin от 01.02.2011, 14:31
У меня такая строчка получилась:
DST_wbk.Sheets(1).Cells(DST_lr + 1, 3).Hyperlinks.Add Anchor:=Selection, Address: = «G:My DocumentsРаботаИсходные данные.xls»
Но что-то она не работаетНо если даже она заработает, то на гиперссылке будет висеть фиксированный адрес, а мне нужен текущий адрес SRC_wbk.
Help me, please
С гиперссылкой разобрался, получилось вот так:
DST_wbk.Sheets(1).Hyperlinks.Add Anchor:=DST_wbk.Sheets(1).Cells(DST_lr + 1, 3), Address:=»G:My DocumentsРаботаИсходные данные.xls»
Осталось сделать ее динамической
С гиперссылкой разобрался, получилось вот так:
DST_wbk.Sheets(1).Hyperlinks.Add Anchor:=DST_wbk.Sheets(1).Cells(DST_lr + 1, 3), Address:=»G:My DocumentsРаботаИсходные данные.xls»
Осталось сделать ее динамической
[/quote]
Сделал так:
DST_wbk.Sheets(1).Hyperlinks.Add Anchor:=DST_wbk.Sheets(1).Cells(DST_lr + 1, 3), Address:=ThisWorkbook.Path
Всем спасибо
только добрался до компа…
Вижу, прогресс налицо.
Правда, меня смущает в вашем коде
Address:=ThisWorkbook.Path
ThisWorkbook.Path, вроде бы возвращает путь с файлу. При чём без финишного слэша.
Я хотел, но не успел предложить использовать
Address:=ThisWorkbook.FullName
тогда будет полный путь, включая имя файла
Но, может, я по причине высокой температуры что-то и путаю в синтаксисе и операндах гиперссылки.
С уважением, Алексей
Главное направить в нужное русло
Действительно, открывает только папку. Поправил код.
С уважением, Алексей
Интересная тема!
А расширьте, пожалуйста вариации:
1. Например, я выделяю три ряда в источнике и хочу, чтобы по выполнению макроса они попали в файл накопитель на аналогичные ряды (и накопитель при этом открылся и был виден).
2. Выделенный диапазон ячеек из источника в накопитель (с теми же условиями).
Заранее спасибо!
Макрос «Copy_ROWs_to_EXT_FILE», на который я уже давал ссылку на первом листе топика копирует столько строк, сколько выбранные ячейки занимают в источнике. Если выберете три ячейки по вертикали, то три строки и скопируются.
Замените там поиск последней занятой строки
lr = wb.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
на прямое её задание.
С уважением, Алексей
- Профессиональные приемы работы в Microsoft Excel
-
►
Обмен опытом -
►
Microsoft Excel -
►
Макрос переноса данных из одного файла в другой
Teslenko_EA писал(а):Здравствуйте russian imigration.
1. Что значит «…файл …не открывается…», невозможно открыть архив или не подключается надстройка?
2. «создал переменную … проверил, переменная равна … » — а объект (файл), адрес которого содержит переменная, открывался ?
Добрый день, Евгений Teslenko_EA
Спасибо за ответ.
1. теперь все открывается. раньше писало, что файл по данному адресу не найден, то есть не удавалось скачать его.
2. нет, сам файл оставался закрытым. обязательно ли надо его открывать, чтобы прочитать из него данные? от постоянно требует обновлений данных, что не очень удобно (но, в принципе, с этим можно смириться)
Насчет переменной str я понял еще вчера во время попыток отладки. Что-то задумался и создал такую, а потом, увидев у себя код типа «str = str(ячейка в экселе)», сам удивился, как такое написал
ЗЫ. Еще раз спасибо, что подсказываете, в том числе и как общаться. По ходу у меня с этим проблемы Не обращаясь ни к кому конкретно, я подразумевал, что ответит тот, кто будет знать ответ…
mc-black, спасибо за ответ, но, в принципе, Ваш код совпал с кодом Teslenko_EA
@antonio souza
I’m not a believer in macros or VBA routines, except as a last resort. So here’s what could be a different way to bring that data across, making use of the recently available FILTER dynamic array function. I added a criterion column to your leafnew sheet, to identify the rows in question.
You don’t describe how this request of yours fits into a bigger picture….and I don’t pretend that this could be a solution for all situations, so it may be that a macro is needed, and I’ll let others who are good at that chime in. My point is that a fairly simple formula can bring over those rows—I only wrote two formulas…the results «spill» down into adjacent rows, however many are required. No need to copy the formula, no need to copy and paste….
So I just wanted to make sure you’re aware of these new functions.