Макрос для копирования данных из одного файла в другой
Помогите пожалуйста.
Очень нужен макрос, но нет опыта в написании. Автоматическим макросом не получается выполнить все требования.
Суть в чем: есть два файла – форма 1 и форма 2 (общий список) Необходимо данные из файла №1 перенести в общий список (Форма 2). Файл 1 всегда стандартный, меняется только данные.
Алгоритм такой: Сначала копируется в форму 2 номер исполнительного листа, если он уже есть в списке, то находит эту строку и меняет ее, если нет в списке – с новой строки создает запись. Далее в эту строку подтягивает все остальные данные с формы 1 (ФИО, основной долг, удержания….все по таблице). В конце строки вставляет текущую дату.
Не могу понять как это все сотворить, помогите у кого есть возможность и знания
Помогите пожалуйста.
Очень нужен макрос, но нет опыта в написании. Автоматическим макросом не получается выполнить все требования.
Суть в чем: есть два файла – форма 1 и форма 2 (общий список) Необходимо данные из файла №1 перенести в общий список (Форма 2). Файл 1 всегда стандартный, меняется только данные.
Алгоритм такой: Сначала копируется в форму 2 номер исполнительного листа, если он уже есть в списке, то находит эту строку и меняет ее, если нет в списке – с новой строки создает запись. Далее в эту строку подтягивает все остальные данные с формы 1 (ФИО, основной долг, удержания….все по таблице). В конце строки вставляет текущую дату.
Не могу понять как это все сотворить, помогите у кого есть возможность и знания Omeg
Добрый вечер, уважаемый Omeg!
Пометте цветом, пожалуйста, блоки формы, количество строк в которых может изменятся. Или же форма неизменна ни по строкам ни по столбцам?
Добрый вечер, уважаемый Omeg!
Пометте цветом, пожалуйста, блоки формы, количество строк в которых может изменятся. Или же форма неизменна ни по строкам ни по столбцам? GWolf
Пометте цветом, пожалуйста, блоки формы, количество строк в которых может изменятся. Или же форма неизменна ни по строкам ни по столбцам? Автор - GWolf
Дата добавления - 17.01.2013 в 18:03
Добрый вечер, уважаемый GWolf!
Пометил строки, количество которых может изменяться. Если это сильно осложняет положение, можно количество полей оставить в таком виде)
Спасибо что откликнулись, два дня сижу с книгой по VBA, но опыта нет, до этого не приходилась делать такие задачи. Очень трудно сразу сообразить что к чему((
Добрый вечер, уважаемый GWolf!
Пометил строки, количество которых может изменяться. Если это сильно осложняет положение, можно количество полей оставить в таком виде)
Спасибо что откликнулись, два дня сижу с книгой по VBA, но опыта нет, до этого не приходилась делать такие задачи. Очень трудно сразу сообразить что к чему(( Omeg
Доброй ночи, уважаемый Omeg!
Пока ждал от Вас ответа, набросал макрос для неизменного количества строк в файле-источнике:
Sub AddToBase_Щелкнуть()
'
Dim tPath As String
Dim wbOp As Object
Dim stroka As String
Dim flag As Boolean
Dim P_familija As String, P_imja As String, P_otcestwo As String
Dim P_NomIspList As String
Dim P_SumOsnDolg As String, P_SumUderj As String, P_SumPerecisl As String
P_familija = "" '- Фамилия
P_imja = "" '- Имя
P_otcestwo = "" '- Отчество
P_NomIspList = "" '- Номер исполнительного листа
P_SumOsnDolg = "" '- Сумма основного долга --> Начальный баланс
P_SumUderj = "" '- Сумма удержанная
P_SumPerecisl = "" '- Сумма начисленная
'заполним переменные значениями
With ThisWorkbook.ActiveSheet
P_familija = .Cells(5, 1).Text
P_imja = .Cells(6, 1).Text
P_otcestwo = .Cells(7, 1).Text
P_NomIspList = .Cells(10, 1).Text
P_SumOsnDolg = .Cells(12, 3).Text
P_SumUderj = .Cells(31, 2).Text
P_SumPerecisl = .Cells(31, 4).Text
End With
'откроем файл-приемник
'-- определим путь к файлу-приемнику и, если он лежит в той же папке, что и _
файл-источник, то путь определяем при помощи .Path
tPath = ""
tPath = ThisWorkbook.Path
'открываем файл-приемник с занесением его в объектную переменную
Set wbOp = Workbooks.Open(Filename:=tPath & "\_2--.xlsm")
With wbOp '- в файле-приемнике
With .Worksheets("Лист1") '- на листе "Лист1"
flag = False '- значение флага для результата поиска
nR = 5 '- стартовое значение счетчика (№ строки начала поиска)
Do '- "бежать по кругу пока не .
stroka = .Cells(nR, 5).Value '- в переменную stroka значение из текущей строки
If stroka = P_NomIspList Then '- если значение переменной = значение P_NomIspList (эталона), то
flag = True '- флаг в ИСТИНА
Exit Do '- прервать цикл
End If
nR = nR + 1 '- изменение значения счетчика строк
Loop While .Cells(nR, 1).Text <> "" '. будет ячейка пуста
nR = 0 '- обнуляем счетчик
'закроем файл-приемник с сохранением
.Close SaveChanges:=True
End With
Set wbOp = Nothing '- чистим объектную переменную
'очистим значения переменных
P_familija = ""
P_imja = ""
P_otcestwo = ""
P_NomIspList = ""
P_SumOsnDolg = ""
P_SumUderj = ""
P_SumPerecisl = ""
End Sub
полагаю, что в виду того, что Вы
два дня сижу с книгой по VBA, но опыта нет, до этого не приходилась делать такие задачи. Очень трудно сразу сообразить что к чему
мой труд не будет бесполезен. Для случая с изменяющимися координатами "Итого начислено" и "Итого удержано" код будет несколько другим. Если будете иметь немного терпения то я таки и его Вам напишу!
С уважением GWolf.
Доброй ночи, уважаемый Omeg!
Пока ждал от Вас ответа, набросал макрос для неизменного количества строк в файле-источнике:
Sub AddToBase_Щелкнуть()
'
Dim tPath As String
Dim wbOp As Object
Dim stroka As String
Dim flag As Boolean
Dim P_familija As String, P_imja As String, P_otcestwo As String
Dim P_NomIspList As String
Dim P_SumOsnDolg As String, P_SumUderj As String, P_SumPerecisl As String
P_familija = "" '- Фамилия
P_imja = "" '- Имя
P_otcestwo = "" '- Отчество
P_NomIspList = "" '- Номер исполнительного листа
P_SumOsnDolg = "" '- Сумма основного долга --> Начальный баланс
P_SumUderj = "" '- Сумма удержанная
P_SumPerecisl = "" '- Сумма начисленная
'заполним переменные значениями
With ThisWorkbook.ActiveSheet
P_familija = .Cells(5, 1).Text
P_imja = .Cells(6, 1).Text
P_otcestwo = .Cells(7, 1).Text
P_NomIspList = .Cells(10, 1).Text
P_SumOsnDolg = .Cells(12, 3).Text
P_SumUderj = .Cells(31, 2).Text
P_SumPerecisl = .Cells(31, 4).Text
End With
'откроем файл-приемник
'-- определим путь к файлу-приемнику и, если он лежит в той же папке, что и _
файл-источник, то путь определяем при помощи .Path
tPath = ""
tPath = ThisWorkbook.Path
'открываем файл-приемник с занесением его в объектную переменную
Set wbOp = Workbooks.Open(Filename:=tPath & "\_2--.xlsm")
With wbOp '- в файле-приемнике
With .Worksheets("Лист1") '- на листе "Лист1"
flag = False '- значение флага для результата поиска
nR = 5 '- стартовое значение счетчика (№ строки начала поиска)
Do '- "бежать по кругу пока не .
stroka = .Cells(nR, 5).Value '- в переменную stroka значение из текущей строки
If stroka = P_NomIspList Then '- если значение переменной = значение P_NomIspList (эталона), то
flag = True '- флаг в ИСТИНА
Exit Do '- прервать цикл
End If
nR = nR + 1 '- изменение значения счетчика строк
Loop While .Cells(nR, 1).Text <> "" '. будет ячейка пуста
nR = 0 '- обнуляем счетчик
'закроем файл-приемник с сохранением
.Close SaveChanges:=True
End With
Set wbOp = Nothing '- чистим объектную переменную
'очистим значения переменных
P_familija = ""
P_imja = ""
P_otcestwo = ""
P_NomIspList = ""
P_SumOsnDolg = ""
P_SumUderj = ""
P_SumPerecisl = ""
End Sub
полагаю, что в виду того, что Вы
два дня сижу с книгой по VBA, но опыта нет, до этого не приходилась делать такие задачи. Очень трудно сразу сообразить что к чему
мой труд не будет бесполезен. Для случая с изменяющимися координатами "Итого начислено" и "Итого удержано" код будет несколько другим. Если будете иметь немного терпения то я таки и его Вам напишу!
С уважением GWolf. GWolf
Путей к вершине множество. Этот один из многих.
Пока ждал от Вас ответа, набросал макрос для неизменного количества строк в файле-источнике:
Sub AddToBase_Щелкнуть()
'
Dim tPath As String
Dim wbOp As Object
Dim stroka As String
Dim flag As Boolean
Dim P_familija As String, P_imja As String, P_otcestwo As String
Dim P_NomIspList As String
Dim P_SumOsnDolg As String, P_SumUderj As String, P_SumPerecisl As String
P_familija = "" '- Фамилия
P_imja = "" '- Имя
P_otcestwo = "" '- Отчество
P_NomIspList = "" '- Номер исполнительного листа
P_SumOsnDolg = "" '- Сумма основного долга --> Начальный баланс
P_SumUderj = "" '- Сумма удержанная
P_SumPerecisl = "" '- Сумма начисленная
'заполним переменные значениями
With ThisWorkbook.ActiveSheet
P_familija = .Cells(5, 1).Text
P_imja = .Cells(6, 1).Text
P_otcestwo = .Cells(7, 1).Text
P_NomIspList = .Cells(10, 1).Text
P_SumOsnDolg = .Cells(12, 3).Text
P_SumUderj = .Cells(31, 2).Text
P_SumPerecisl = .Cells(31, 4).Text
End With
'откроем файл-приемник
'-- определим путь к файлу-приемнику и, если он лежит в той же папке, что и _
файл-источник, то путь определяем при помощи .Path
tPath = ""
tPath = ThisWorkbook.Path
'открываем файл-приемник с занесением его в объектную переменную
Set wbOp = Workbooks.Open(Filename:=tPath & "\_2--.xlsm")
With wbOp '- в файле-приемнике
With .Worksheets("Лист1") '- на листе "Лист1"
flag = False '- значение флага для результата поиска
nR = 5 '- стартовое значение счетчика (№ строки начала поиска)
Do '- "бежать по кругу пока не .
stroka = .Cells(nR, 5).Value '- в переменную stroka значение из текущей строки
If stroka = P_NomIspList Then '- если значение переменной = значение P_NomIspList (эталона), то
flag = True '- флаг в ИСТИНА
Exit Do '- прервать цикл
End If
nR = nR + 1 '- изменение значения счетчика строк
Loop While .Cells(nR, 1).Text <> "" '. будет ячейка пуста
nR = 0 '- обнуляем счетчик
'закроем файл-приемник с сохранением
.Close SaveChanges:=True
End With
Set wbOp = Nothing '- чистим объектную переменную
'очистим значения переменных
P_familija = ""
P_imja = ""
P_otcestwo = ""
P_NomIspList = ""
P_SumOsnDolg = ""
P_SumUderj = ""
P_SumPerecisl = ""
End Sub
полагаю, что в виду того, что Вы
два дня сижу с книгой по VBA, но опыта нет, до этого не приходилась делать такие задачи. Очень трудно сразу сообразить что к чему
мой труд не будет бесполезен. Для случая с изменяющимися координатами "Итого начислено" и "Итого удержано" код будет несколько другим. Если будете иметь немного терпения то я таки и его Вам напишу!
С уважением GWolf. Автор - GWolf
Дата добавления - 17.01.2013 в 19:56
Спасибо Огромное. Вы меня очень выручили. Я бы не справился точно.
Уважаемы GWolf, если у вас будет свободное время и желание, напишите пожалуйста еще для случая с изменяющимися координатами "Итого начислено" и "Итого удержано".
Я Вам крайне благодарен! Вы правда меня очень выручили))
Спасибо Огромное. Вы меня очень выручили. Я бы не справился точно.
Уважаемы GWolf, если у вас будет свободное время и желание, напишите пожалуйста еще для случая с изменяющимися координатами "Итого начислено" и "Итого удержано".
Я Вам крайне благодарен! Вы правда меня очень выручили)) Omeg
Здравствуйте, подскажите что в моем коде не так? Написал макрос который: копирует данные из одной книги и вставляет в другую.
Копирование данных из эксель в ворд макросом
Есть база данных в эксель типа: адрес этаж описание суворова 2 .
Копирование одного текстового файла в другой, используя посимвольное, построчное и поблочное копирование
Здраствуйте, у меня такая проблемма мне надо обеспечить копирование одного текстового файла в.
Автоматизация переноса значений из одного документа в эксель в другой эксель
Мне необходимо из таблицы перенести все данные в акта. На каждую строчку таблицы необходим.
Копирование с одного файла в другой
Здравствуйте! Нужна помощь. Нужно с одно файла скопировать только номера в другой. Есть вот такой.
Смайлы
И ThisWorkbook как-то лишнее, может дать ошибку.
А вообще всё не так, но это не значит, что не будет работать
Подскажите что конкретно не так?
Если можно небольшой пример как правильно!
Буду очень благодарен!
Смайлы я не ставил, как то получилось, что ни сами там оказались.
Чтобы написать нормально маловато информации - что за файлы, как и когда открываются, где планируете поместить макрос?
Высылаю пример, если можно посмотрите!
В примере приложены два файла эксель. Задача при с помощью макроса копировать данные из "книги1" и вставлять в "книгу2". Я не прошу писать макрос полностью, прошу хотя бы с ориентировать мне, так как сам разобраться не могу.
Заранее спасибо!
Я подозреваю задача там в целом не совсем элементарная.
Правда если смотреть на пример я бы копирование заменил на "сохранить как"
Но Вы так и не ответили на вопрос про процесс в целом.
Я думаю возможен такой вариант -
1. код в персональной книге или файле-инструменте (или это вообще отдельный скрипт vbs)
2. выполняется код (по Alt+F8 или кнопкой, или по событию открытия файла-инструмента)
3. кодом открываются оба файла, при открытии получаем ссылки на файлы типа
далее копируем так:
далее файлы закрываем с сохранением результата
или не закрываем, смотря по задаче.
Ну в общем вот и весь код - пропишите пути к файлам и диапазоны (с названиями листов).
Но подозреваю, что на деле там ещё нужно будет искать место куда копировать, или суммировать, или ещё что-то. Иначе проще saveas и готово
В этом уроке я покажу Вам самые популярные макросы в VBA Excel, которые вы сможете использовать для оптимизации своей работы. VBA - это язык программирования, который может использоваться для расширения возможностей MS Excel и других приложений MS Office. Это чрезвычайно полезно для пользователей MS Excel, поскольку VBA может использоваться для автоматизации вашей работы и значительно увеличить Вашу эффективность. В этой статье Вы познакомитесь с VBA и я вам покажу некоторые из наиболее полезных, готовых к использованию примеров VBA. Вы сможете использовать эти примеры для создания собственных скриптов, соответствующих Вашим потребностям.
Вам не нужен опыт программирования, чтобы воспользоваться информаций из этой статьи, но вы должны иметь базовые знания Excel. Если вы еще учитесь работать с Excel, я бы рекомендовал Вам прочитать статью 20 формул Excel, которые вам нeобходимо выучить сейчас, чтобы узнать больше о функциональных возможностях Excel.
Я подготовил для вас несколько самых полезных примеров VBA Excel с большой функциональностью, которую вы сможете использовать для оптимизации своей работы. Чтобы их использовать, вам необходимо записать их в файл. Следующий параграф посвящен установке макроса Excel. Пропустите эту часть, если вы уже знакомы с этим.
Table of Contents
Как включить макросы в Excel
В Excel нажмите комбинацию клавиш alt + F11. Это приведет вас к редактору VBA в MS Excel. Затем щелкните правой кнопкой мыши папку Microsoft Excel Objects слева и выберите Insert => Module. Это место, где сохраняются макросы. Чтобы использовать макрос, вам нужно сохранить документ Excel как макрос. Из табуляции File => Save as, выберите Save as macro-enabled Workbok (расширение .xlsm) Теперь пришло время написать свой первый макрос!
1. Копирование данных из одного файла в другой.
Очень полезный макрос, поскольку он показывает, как скопировать ряд данных изнутри vba и как создать и назвать новую книгу. Вы можете изменить этот макрос в соответствии с вашими собственными требованиями:
2. Отображение скрытых строк
Иногда большие файлы Excel можно содержать скрытые строки для большей ясности И для лучшего удобства пользователей. Вот один макрос, который отобразит все строки из активной рабочей таблицы:
3. Удаление пустых строк и столбов
Пустые строки в Excel - может быть проблемой для обработки данных. Вот как избавиться от них:
4. Нахождение пустых ячеек
13. Создание сводной таблицы
Вот как создать сводную таблицу в MS Excel (версия 2007). Особенно полезно, когда вы делаете индивидуальный отчет каждый день. Вы можете оптимизировать создание сводной таблицы следующим образом:
14. Отправка активного файла по электронной почте
15. Вставка всех графиков Excel в презентацию PowerPoint
Очень удобный макрос, который позволяет вам добавлять все ваши графики Excel в презентацию Powerpoint одним щелчком мыши:
16. Вставка таблицы Excel в MS Word
Таблицы Excel обычно помещаются внутри текстовых документов. Вот один автоматический способ экспорта таблицы Excel в MS Word:
17. Извлечение слов из текста
Мы можем использовать формулы, если хотим извлечь определенное количество символов. Но что, если мы хотим извлечь только одно слово из предложения или диапазон слов в ячейке? Для этого мы можем сами создать функцию Excel с помощью VBA. Это одна из самых удобных функций VBA, поскольку она позволяет создавать собственные формулы, которые отсутствуют в MS Excel. Давайте продолжим и создадим две функции: findword() и findwordrev():
Отлично, мы уже создали две новые функции в Excel! Теперь попробуйте использовать их в Excel. Функция = FindWordRev (A1,1) берет последнее слово из ячейки A1. Функция = FindWord (A1,3) берет третье слово из ячейки A1 и т. Д.
18. Защита данных в MS Excel
Иногда мы хотим защитить данных нашего файла, чтобы только мы могли его изменять. Вот как это сделать с VBA:
Поздравления! Поскольку вы все еще читаете это, вы действительно заинтересованы в изучении VBA. Как вы уже сами видели, язык программирования VBA чрезвычайно полезен и может сэкономить нам много времени. Надеюсь, вы нашли эту информацию полезной и использовали ее, чтобы стать мастером MS Excel, VBA и компьютерных наук в целом.
Задача состоит в том, чтобы скопировать определенный диапазон текущего листа, открыть другую книгу, и вставить эти скопированные данные в определенную ячейку, сохранить этот файл и закрыть. Ниже приведен код VBA.
Вариант 2: В открывшейся книге запускаем макрос, чтобы он открыл нужную нам книгу, скопировал от туда нужные нам данные и вставил в нашу открытую книгу, закрыв файл из которого эти данные были скопированы
Еще пример — Скопировать диапазоны данных из активной открытой книги Excel нескольких листов (в нашем примере 3-х листов) в другую книгу, которая хранится в определенном месте. Данные будут вставлены как значения, плюс будут перенесены форматы ячеек.
Если статья была вам полезна, то буду благодарен, если вы поделитесь ей со своими друзьями с помощью кнопок расположенных ниже.
Спасибо за внимание.
Related posts:
Здравствуйте.
А если, например, открыто две книги и находясь в активной книге, как не используя путь, скопировать данные в скрытом листе пассивной книги и вставить их в активную.
Здравствуйте
А если например открыто две книги и находясь в активной книге, как не используя путь скопировать данные с пассивной книги и вставить их в активную.
Hey. I sent a screenshot. Did you get it?
Здравствуйте.
редактирую Ваш код. Возникло 2 проблемы:
1.начало таблицы, из которой необходимо скопировать данные каждый раз начинается с разного номера строки так как в первоначальном файле данные формируются расширенным фильтром (выделено красным)
2.перед тем как скопируются новые данные во второй файл, необходимо , чтобы из этого столбца удалились старые
Sub Макрос()
Range(«b20000:b20100»).Select
Selection.Copy
Workbooks.Open Filename:= «путь к файлу, в который копируем»
Range(«A2»).Select
ActiveSheet.Paste
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub
Можно так сделать или нужно писать другой макрос?
Добрый день. Подскажите что надо поменять в это строчке что бы не прописывать полный путь к файлу, а можно было выбирать диалоговым окном путь и имя файла
Set bookconst = Workbooks.Open(«C:\Users\User\Desktop\1.xlsx»)
Вызов диалогового окна нашел. Спасибо за ответ
Sub AttachFile_test() ‘ пример использования
Filename$ = GetFilePath()
If Filename$ = «» Then Exit Sub
MsgBox «Выбран файл: » & Filename$
End Sub
Function GetFilePath(Optional ByVal Title As String = «Выберите файл для обработки», _
Optional ByVal InitialPath As String = «c:\», _
Optional ByVal FilterDescription As String = «Файлы счетов», _
Optional ByVal FilterExtention As String = «*.*») As String
On Error Resume Next
With Application.FileDialog(msoFileDialogOpen)
.ButtonName = «Выбрать»: .Title = Title:
.InitialFileName = GetSetting(Application.Name, «GetFilePath», «folder», InitialPath)
.Filters.Clear: .Filters.Add FilterDescription, FilterExtention
If .Show -1 Then Exit Function
GetFilePath = .SelectedItems(1)
folder$ = Left(.SelectedItems(1), InStrRev(.SelectedItems(1), «\»))
SaveSetting Application.Name, «GetFilePath», «folder», folder$
End With
End Function
Добрый день! Могли бы Вы помочь в решении проблемы, есть лист который необходимо поделить на несколько новых книг по параметру Город ( т.е. будет новая книга :Москва в которой будет шапка, город, марка,номер, водитель, Питер в которой будет шапка, город, марка,номер, водитель и т.д.) при этом сохранились форматы ячеек, а сама книга будет названа как город который будет в ней. Потом необходимо поделить лист на книги по параметру Марка и книга будет называться как Марка которая в ней будет. Заранее благодарна!
Как можно изменить код макроса, если при открытии файла его нет по указанному адресу. Нужно чтобы макрос остановится и открылось окно с информацией, что файл не найден. Иначе выдаёт ошибку.
Здравствуйте! Помогите, пожалуйста, в решении задачи:
Есть 2 файла. В первом файле хранятся столбцы с данными, файл ежедневно обновляется данными. Во втором — итоговая таблица. Нужно автоматически копировать столбцы из первого файла и вставить в конец таблицы второго.
Помогите, пожалуйста.
Нужен макрос, чтобы по нажатию, копировал данные из определенного статичного столбца в активный столбец (на котором стоит курсор).
Заранее, спасибо!
Включите запись макрорекодера, проделайте всю операцию и остановите запись. Получится нужный вам макрос
Добрый день! Вы просто герой! всем отвечаете и помогаете!
Помогите и мне пожалуйста, Вот код:
Sub форЮля()
Range(«A1:G1»).Select
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
Selection.Copy
ChDir «C:\Users\karlov\Desktop\mind»
Workbooks.Open Filename:=»1″
Range(«A1»).Select
ActiveSheet.Paste
ActiveWorkbook.Save
ActiveWorkbook.Close
Application.CutCopyMode = False
End Sub
как сделать так что бы запись в фаил «1» всегда была на одну строчку ниже?
2 дня уже не могу сделать , надеюсь на Вас. Спасибо.
Попробуйте добавить между
Range («A1»).Select и ActiveSheet.Paste
ActiveSheet.Range("A1").End(xlDown).Offset(1, 0).Select
ДД!
спасибо большое за Ваш пост! Нужно было переносить строки из общей таблицы на разные листы другой книги.
Подскажите, можно ли добавить условие в код? У меня большая таблица хронометража по разным показателям. Возможно ли копирование только тех ячеек значение которых больше 0?
То, что я имею сейчас:
Sub Перенос_строк_состав_комм_КМ()
Workbooks.Open Filename:=C:\1\2.xlsx»
Workbooks(«2.xlsx»).Worksheets(«приложение 3»).Range(«F30:BC30»).Copy
Workbooks(«КФ.xlsm»).Activate
ActiveWorkbook.Worksheets(«составление комм КМ»).Range(«C5»).Select
ActiveSheet.Paste
Workbooks(«2.xlsx»).Close
End Sub
Добрый день. Ваш код мне очень подходит. Вопрос, как изменить диапазон ячеек в коде, при условии, что я хочу перенести в другую книгу в определенный лист несколько разных ячеек с одного листа НАПРИМЕР диапазоны B7:С24 и H7:I24 . Подскажите как правильно это нужно указать. Спасибо.
Решили вопрос? Вам нужно скопировать сначала один диапазон, потом снова выделить книгу откуда вы копируете, например так
Workbooks(«Книга1.xlsm»).Activate
снова повторить копирование уже другого диапазона
У меня более 30 вкладок в одной книге, и часть ячеек не должна копировать в другую книгу, они должны совместиться. Я уже много перепробовала, но почему то копирует только второй диапазон, а первый будто не видит… например я пишу код
abook.Worksheets(«3»).Activate
Range(«B7:C39», «H7:I39»).Copy
bookconst.Worksheets(«3»).Activate
Range(«B7»).Select ‘выделяем диапазон
а копирует он только диапазон «H7:I39», игнорируя диапазон B7:C39
Так я и не решила эту проблему..
На мой взгляд у вас проблема о объединенных ячейках. У вас 61 и другие строки объединены. Вы попробуйте вручную выделить диапазон B7:C39 — у вас не получится и у VBA тоже не получается
Нужно делать по-отдельности. Сначала одни диапазон, потом второй и так далее
abook.Worksheets («3»).Activate
Range («B7:C39»).Copy
bookconst.Worksheets («3»).Activate
Range («B7»).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 («H7:I39»).Copy
…
Эти Варианты я все перепробовала, решение оказалось таким:
Range(«B9:C2900, D9:E2900, K9:L2900»).Copy
bookconst.Worksheets(«благ»).Activate
Range(«B4»).Select ‘встаем на ячейку А1
При этом в заданных диапазонах не должны быть пересечения объеденных ячеек.
СПАСИБО АВТОРУ
Добрый день,
В коде при варианте 1 выводит ошибку 1004, выделяя желтым строку кода:
Range(«A6»).Select
В этой строке вряд ли ошибка может быть. Проверил код, должно все работать
Единственное вот тут неправильное описание
Workbooks.Open Filename:= «путь к файлу»
здесь нужно указать не путь к файлу, а только название файла, путь к папке мы указали в чуть выше в коде
Вопрос не актуален, спасибо!
Решение найдено!
Отлично, в чем была причина?
Также, вот чуток модифицированный вариант для того, чтобы данные не перезаписывались, а вставлялись в новую строку:
Range(«A1:E1»).Select
Selection.Copy
ChDir «C:\Users\50545\Desktop»
Workbooks.Open Filename:=»123.xlsx»
ActiveSheet.Range(«A1»).Select
If ActiveSheet.Range(«A1»).Value = «» Then
ActiveSheet.Paste
ActiveWorkbook.Save
ActiveWorkbook.Close
Else
Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Select
ActiveSheet.Paste
ActiveWorkbook.Save
ActiveWorkbook.Close
Создал отдельный модуль для макроса (до этого был в модуле листа)…
Добрый день,
К сожалению, ошибку все еще выдает 🙁
Прикладываю сам файл и принт-скрин…
Буду признателен за помощь в исправлении…
Доброго времени суток.
Подскажите пожалуйста код макроса со следующим функционалом:
Есть несколько документов. Первый документ — база со всеми данными, а остальные — документы в которых нужно скопировать некоторые данные из базы.
На словах макрос я бы описал так:
Открываем документ «База» вкладка «Лист1» копируем значение ячейки С15, после чего вставляем её в документ «Отчёт» вкладка «Данные» в поле F19.
Далее
Открываем документ «База» вкладка «Лист1» копируем значение ячейки С18, после чего вставляем её в документ «Отчёт» вкладка «Данные» в поле D20.
Далее
Открываем документ «База» вкладка «Лист1» копируем значение ячейки С24, после чего вставляем её в документ «Отчёт» вкладка «Данные» в поле L3.
И так далее…
Да, необходимо копировать только значение (стиль и т.д. не нужно) И если например в базе какая то ячейка стала пустой, то на пустоту необходимо заменить значение, что было прописано ранее в остальных документах.
В программировании не силён, если можно с кратким объяснением.
Пример приложил. Значения цифровые и текстовые, могут быть одновременно. Должны быть скопированы в неизменном виде (как в примере). Поля Параметр 2, Параметр 3 и т.д. роли не играют. Этим я просто показал что ячейки могут находиться в разных местах.
Да, в примере имена людей совпадают, но в реальности они могут отличаться, потому то я и прошу скрипт с указанием с какой в какую ячейку копировать данные. Положение в списке как правило не меняется.
Добрый вечер. Это опять я.
Появилась новая задача. Есть файл источник в котором есть данные.
Тот макрос, который Вы помогли запустить копирует только из этого, определенного файла.
А можно сделать так, чтобы макрос работал из любого другого файла.
То есть я копирую макрос в другой файл , а он сохраняет в отдельный.
нет. все равно заменяет.
может Вы можете помочь немного по другому.
Вот макрос, который копирует нужный диапазон и копирует в нужную книгу.
НО как и в первом варианте надо , после изменения в основном файле данных, вставлять не в туже строку , а в следующую.
Sub Кнопка2 Щелчок()
‘
‘ Кнопка2_Щелчок Макрос
‘
‘ Сочетание клавиш: Ctrl+j
‘
Range(«A7:J7″).Select
Selection.Copy
Workbooks.Open Filename:=»C:\Users\Slava\Desktop\Neuer Ordner\1.xlsm»
Range(«A1:J1»).Select
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWorkbook.Save
ActiveWindow.Close
End Sub
может быть так проще?
Нет, не проще. Проверьте еще раз внимательно. У меня все работает. Данные не заменяются, а вставляются в следующие строку.
Сейчас, кстати заметил, что надо брать не G5000, а F5000 так как в столбце G ничего не вставляется, поэтому он и заменяет данные, так как последняя строчка всегда одна и та же
Добрый вечер. Хочу Вас поблагодарить. Все получилось.
Только я методом «тыка» изменил немного код. А именно вот эту строку
iLastRow = Workbooks(«Книга1.xlsm»).Worksheets(«Лист1»).Range(«F5000»).End(xlUp).Row + 1
у Вас стоял («Книга1.xlsm») а я написал («1.xlsm») указал ту книгу в которую производить копирование и всё пошло нормально.
Еще раз спасибо.
Да, все верно. Я просто тестировал на своих файлах и забыл поменять. Удачи!
Здравствуйте!
Объединение эксель-файлов - это здорово, но. нет предела совершенству
Друзья, помогите организовать такой макрос:
нужно из текущего открытого документа скопировать все данные, кроме первой строки и в ставить их по адресу D:\XXX\09(номер текущего месяца)\общ\Документ.xlsx
Данные должны добавляться в конец "Документ.xlsx", а не заменяться. таблица всегда однотипна
Не судите строго работа с отдельными книгами и листами пока ещё вызывает затруднения.
Здравствуйте!
Объединение эксель-файлов - это здорово, но. нет предела совершенству
Друзья, помогите организовать такой макрос:
нужно из текущего открытого документа скопировать все данные, кроме первой строки и в ставить их по адресу D:\XXX\09(номер текущего месяца)\общ\Документ.xlsx
Данные должны добавляться в конец "Документ.xlsx", а не заменяться. таблица всегда однотипна
Не судите строго работа с отдельными книгами и листами пока ещё вызывает затруднения. emkub
я как раз таки поднимал похожую тему и аж набралось три листа обсуждений и понимания этого действия (((( тяжело но сделать можно.
My WebPage
там как раз за копирование с одного листа на множество других листов (с разными параметрами и столбцами).
А вот чтоб в нужный вам файл это можно путь и самому попытаться прописать через ЗАПИСЬ МАКРОСА потом его вытянуть и вставить в тот код с копированием.
я как раз таки поднимал похожую тему и аж набралось три листа обсуждений и понимания этого действия (((( тяжело но сделать можно.
My WebPage
там как раз за копирование с одного листа на множество других листов (с разными параметрами и столбцами).
А вот чтоб в нужный вам файл это можно путь и самому попытаться прописать через ЗАПИСЬ МАКРОСА потом его вытянуть и вставить в тот код с копированием. lebensvoll
я как раз таки поднимал похожую тему и аж набралось три листа обсуждений и понимания этого действия (((( тяжело но сделать можно.
My WebPage
там как раз за копирование с одного листа на множество других листов (с разными параметрами и столбцами).
А вот чтоб в нужный вам файл это можно путь и самому попытаться прописать через ЗАПИСЬ МАКРОСА потом его вытянуть и вставить в тот код с копированием. Автор - lebensvoll
Дата добавления - 20.09.2016 в 21:56
Читал вашу тему, но честно говоря, практически ничего не понял, что вы хотели сделать
Сейчас буду смотреть внимательнее.
А записью макроса пробую всегда в первую очередь. Но тут и близко не то.
Читал вашу тему, но честно говоря, практически ничего не понял, что вы хотели сделать
Сейчас буду смотреть внимательнее.
А записью макроса пробую всегда в первую очередь. Но тут и близко не то. emkub
Скажу откровенно по опыту. Вы выкладывайте ваши старания как получилось. Народ вас подправит (я в этом уверен). А вот если создали тему и ждете когда за вас ее кто сделает, то вам будут предлагать перейти во фриланс.
Тем самым (если вы хоть как то стараетесь и пытаетесь понять) народ это видит и поверьте помогает (ну иногда и ругает что подтормаживаешь ))))).
Так что не стесняйтесь выкладывайте ваши старания в свет. Вам обязательно помогут скорректируют ваши действия
Скажу откровенно по опыту. Вы выкладывайте ваши старания как получилось. Народ вас подправит (я в этом уверен). А вот если создали тему и ждете когда за вас ее кто сделает, то вам будут предлагать перейти во фриланс.
Тем самым (если вы хоть как то стараетесь и пытаетесь понять) народ это видит и поверьте помогает (ну иногда и ругает что подтормаживаешь ))))).
Так что не стесняйтесь выкладывайте ваши старания в свет. Вам обязательно помогут скорректируют ваши действия lebensvoll
Даже мне видно, что мои "старания" выглядят полнейшей ахинеей стыдно такое выкладывать.
Ничего, я с этим только третий день воюю. Через месяцок вид будет лучше
Однако, ваш макрос с пояснениями подталкивает в нужную сторону.
Даже мне видно, что мои "старания" выглядят полнейшей ахинеей стыдно такое выкладывать.
Ничего, я с этим только третий день воюю. Через месяцок вид будет лучше
Однако, ваш макрос с пояснениями подталкивает в нужную сторону. emkub
Sub copyData()
With Application
.ScreenUpdating = False
.EnableEvents = False
.DisplayAlerts = False
End With
Dim sh1 As Worksheet, wbOpen As Workbook
Dim lr1 As Long, lc1 As Long, lr2 As Long
Dim wbPath As String
Set sh1 = ThisWorkbook.Sheets(1)
'Путь книге, в которую копируем
wbPath = "D:\XXX\" & Format(Month(Now), "00") & "\общ\Документ.xlsx"
'последняя строка в исходной книге (по 1-му столбцу)
lr1 = sh1.Cells(Rows.Count, 1).End(xlUp).Row
'последний столбец в исходной книге (по 1-й строке)
lc1 = sh1.Cells(1, Columns.Count).End(xlToLeft).Column
Set wbOpen = Workbooks.Open(wbPath)
With wbOpen.Sheets(1)
'последняя строка в новой книге (wbOpen) по 1-му столбцу +1
lr2 = .Cells(Rows.Count, 1).End(xlUp).Row + 1
'копируем
Range(sh1.Cells(2, 1), sh1.Cells(lr1, lc1)).Copy Range(.Cells(lr2, 1), .Cells(lr2 + lr1 - 1, lc1))
End With
wbOpen.Close True
With Application
.ScreenUpdating = True
.EnableEvents = True
.DisplayAlerts = True
End With
End Sub
Sub copyData()
With Application
.ScreenUpdating = False
.EnableEvents = False
.DisplayAlerts = False
End With
Dim sh1 As Worksheet, wbOpen As Workbook
Dim lr1 As Long, lc1 As Long, lr2 As Long
Dim wbPath As String
Set sh1 = ThisWorkbook.Sheets(1)
'Путь книге, в которую копируем
wbPath = "D:\XXX\" & Format(Month(Now), "00") & "\общ\Документ.xlsx"
'последняя строка в исходной книге (по 1-му столбцу)
lr1 = sh1.Cells(Rows.Count, 1).End(xlUp).Row
'последний столбец в исходной книге (по 1-й строке)
lc1 = sh1.Cells(1, Columns.Count).End(xlToLeft).Column
Set wbOpen = Workbooks.Open(wbPath)
With wbOpen.Sheets(1)
'последняя строка в новой книге (wbOpen) по 1-му столбцу +1
lr2 = .Cells(Rows.Count, 1).End(xlUp).Row + 1
'копируем
Range(sh1.Cells(2, 1), sh1.Cells(lr1, lc1)).Copy Range(.Cells(lr2, 1), .Cells(lr2 + lr1 - 1, lc1))
End With
wbOpen.Close True
With Application
.ScreenUpdating = True
.EnableEvents = True
.DisplayAlerts = True
End With
End Sub
Sub copyData()
With Application
.ScreenUpdating = False
.EnableEvents = False
.DisplayAlerts = False
End With
Dim sh1 As Worksheet, wbOpen As Workbook
Dim lr1 As Long, lc1 As Long, lr2 As Long
Dim wbPath As String
Set sh1 = ThisWorkbook.Sheets(1)
'Путь книге, в которую копируем
wbPath = "D:\XXX\" & Format(Month(Now), "00") & "\общ\Документ.xlsx"
'последняя строка в исходной книге (по 1-му столбцу)
lr1 = sh1.Cells(Rows.Count, 1).End(xlUp).Row
'последний столбец в исходной книге (по 1-й строке)
lc1 = sh1.Cells(1, Columns.Count).End(xlToLeft).Column
Set wbOpen = Workbooks.Open(wbPath)
With wbOpen.Sheets(1)
'последняя строка в новой книге (wbOpen) по 1-му столбцу +1
lr2 = .Cells(Rows.Count, 1).End(xlUp).Row + 1
'копируем
Range(sh1.Cells(2, 1), sh1.Cells(lr1, lc1)).Copy Range(.Cells(lr2, 1), .Cells(lr2 + lr1 - 1, lc1))
End With
wbOpen.Close True
With Application
.ScreenUpdating = True
.EnableEvents = True
.DisplayAlerts = True
End With
End Sub
Читайте также: