День добрый! Есть две книги, одна сформирована экспортом из проги Wialon (транспортный мониторинг, Webморда, статистику позволяет экспортировать сразу в .xlsx), вторая чистый лист. Во второй книге, для переноса части значений из выгрузки, для дальнейшей работы с ними, использую стандартный макрос:
При выполнении в первый раз или два, всё прошло удачно, данные скопировались. На третий и далее повторения, выдает ошибку:
Цитата
Run-time error '1004':
Цитата
данные не могу быть вставлены из-за несоответствия формы и размеров области копирования и области вставки. Выполните одно из следующих действий: 1. выберите и вставьте одну ячейку; 2. выберите и вставьте прямоугольник соответ. размера и формы;
В первые два раза ячейку-приемник никак не изменял, абсолютно стоковая ячейка, принимала значения столбцов на ура. Следом вторая ячейка приняла значение второго диапазона значений из исходной выгрузки. А вот на третий раз, появилась ошибка. После этого, первые два варианта макроса(изменялись только значения источника-диапазон и приемника данных-ячейка) - также перестали выполнятся и выдают ту же ошибку.
Я попробовал:
1. Сменить предварительно размер ячейки, перед выполнением макроса(бредовая идея, но всё же попробовал) - не помогло;
2. Создал отдельно две книги, в первую положил кнопку, к ней прикрутил свой макрос. Во второй создал простой набор данных, в первой колонке цифры, во второй дни недели по именам. Всё копируется в первую книгу, выполняется - работает. Подкидываю в макрос файл с выгрузкой - не копируется ни одна колонка, всё время ошибка указанная выше;
3. Менял формат "чистой" ячейки на формат, как в исходнике - не помогло;
По нажатию кнопки "Debug", отправляет на вот эту строку: [vba]
Код
ActiveSheet.Paste
[/vba]
Если в ручную выделить диапазон(любой) значений в исходном файле, через копипаст вставить в книгу-приёмник, в любую ячейку, всё скопируется.
В чем может быть ошибка? В выгрузке? Но как тогда первые два раза отработало? Нет ли какого-нибудь переполнения или чего-то подобного?
Заранее благодарю за помощь!
День добрый! Есть две книги, одна сформирована экспортом из проги Wialon (транспортный мониторинг, Webморда, статистику позволяет экспортировать сразу в .xlsx), вторая чистый лист. Во второй книге, для переноса части значений из выгрузки, для дальнейшей работы с ними, использую стандартный макрос:
При выполнении в первый раз или два, всё прошло удачно, данные скопировались. На третий и далее повторения, выдает ошибку:
Цитата
Run-time error '1004':
Цитата
данные не могу быть вставлены из-за несоответствия формы и размеров области копирования и области вставки. Выполните одно из следующих действий: 1. выберите и вставьте одну ячейку; 2. выберите и вставьте прямоугольник соответ. размера и формы;
В первые два раза ячейку-приемник никак не изменял, абсолютно стоковая ячейка, принимала значения столбцов на ура. Следом вторая ячейка приняла значение второго диапазона значений из исходной выгрузки. А вот на третий раз, появилась ошибка. После этого, первые два варианта макроса(изменялись только значения источника-диапазон и приемника данных-ячейка) - также перестали выполнятся и выдают ту же ошибку.
Я попробовал:
1. Сменить предварительно размер ячейки, перед выполнением макроса(бредовая идея, но всё же попробовал) - не помогло;
2. Создал отдельно две книги, в первую положил кнопку, к ней прикрутил свой макрос. Во второй создал простой набор данных, в первой колонке цифры, во второй дни недели по именам. Всё копируется в первую книгу, выполняется - работает. Подкидываю в макрос файл с выгрузкой - не копируется ни одна колонка, всё время ошибка указанная выше;
3. Менял формат "чистой" ячейки на формат, как в исходнике - не помогло;
По нажатию кнопки "Debug", отправляет на вот эту строку: [vba]
Код
ActiveSheet.Paste
[/vba]
Если в ручную выделить диапазон(любой) значений в исходном файле, через копипаст вставить в книгу-приёмник, в любую ячейку, всё скопируется.
В чем может быть ошибка? В выгрузке? Но как тогда первые два раза отработало? Нет ли какого-нибудь переполнения или чего-то подобного?
Sub Кнопка1_Щелчок() 'Открываем файл с которого нужно скопировать данные Workbooks.Open Filename:=ThisWorkbook.Path & "\3.xlsx" 'Скопировать нужный диапазон в открывшейся книге на листе 1 Workbooks("3.xlsx").Sheets("Сводка").Range("B2:B10").Copy ThisWorkbook.Sheets("Лист1").Range("H1") 'Закрываем книгу откуда мы скопировали данные Workbooks("3.xlsx").Close End Sub
[/vba]
[vba]
Код
Sub Кнопка1_Щелчок() 'Открываем файл с которого нужно скопировать данные Workbooks.Open Filename:=ThisWorkbook.Path & "\3.xlsx" 'Скопировать нужный диапазон в открывшейся книге на листе 1 Workbooks("3.xlsx").Sheets("Сводка").Range("B2:B10").Copy ThisWorkbook.Sheets("Лист1").Range("H1") 'Закрываем книгу откуда мы скопировали данные Workbooks("3.xlsx").Close End Sub
Если есть у вас время, не могли бы пояснить хотя бы немного, что я сделал не так. В моём(взял на другом сайте посвященному excel) макросе, нет обработки типа данных, или я совсем не в ту сторону думаю?
KuklP, благодарю! Заработало!
Если есть у вас время, не могли бы пояснить хотя бы немного, что я сделал не так. В моём(взял на другом сайте посвященному excel) макросе, нет обработки типа данных, или я совсем не в ту сторону думаю?vlad_stv
vlad_stv, объединенных ячеек нет? Если нет - исправьте на специальную вставку - должно заработать:
[vba]
Код
Sub Кнопка1_Щелчок() Workbooks.Open Filename:="D:\reports\test\3.xlsx" Workbooks("3.xlsx").Worksheets("Статистика").Range("B3:B5").Copy Workbooks("1.xlsm").Activate ActiveWorkbook.Worksheets("Лист1").Range("A1").PasteSpecial Workbooks("3.xlsx").Close End Sub
[/vba]
Код не проверял. Работоспособность не гарантирую.
vlad_stv, объединенных ячеек нет? Если нет - исправьте на специальную вставку - должно заработать:
[vba]
Код
Sub Кнопка1_Щелчок() Workbooks.Open Filename:="D:\reports\test\3.xlsx" Workbooks("3.xlsx").Worksheets("Статистика").Range("B3:B5").Copy Workbooks("1.xlsm").Activate ActiveWorkbook.Worksheets("Лист1").Range("A1").PasteSpecial Workbooks("3.xlsx").Close End Sub
[/vba]
Код не проверял. Работоспособность не гарантирую. akobir
А как правильно поправить в макрос KuklP, чтобы имя листа бралось из ячейки? Или еще проще, чтобы имя листа для выполнения копирования, бралось из имени листа)? Есть какой-нибудь параметр/переменная который можно использовать? Например: Первоначальный вариант: [vba]
Код
Sheets("Сводка")
[/vba] Второй: [vba]
Код
Sheets(A3)
[/vba] Третий: [vba]
Код
Sheets(Sheetname)
[/vba]
А как правильно поправить в макрос KuklP, чтобы имя листа бралось из ячейки? Или еще проще, чтобы имя листа для выполнения копирования, бралось из имени листа)? Есть какой-нибудь параметр/переменная который можно использовать? Например: Первоначальный вариант: [vba]
KuklP, не, не получается. Он берет ячейку из файла исходника. А надо чтобы брал из файла приёмника. То есть при копировании макрос понимал в какой лист книги ему копировать. Возможно первый раз неверно выразился, извиняюсь!
Может перед началом всего скрипта ввести переменную, которая содержит имя листа, и потом по всему макросу её использовать? И получить на выходе третий вариант. Кривой код, но мысль ясна, я думаю: [vba]
Код
Dim x Sheetname Sheets(Sheetname)
[/vba]
KuklP, не, не получается. Он берет ячейку из файла исходника. А надо чтобы брал из файла приёмника. То есть при копировании макрос понимал в какой лист книги ему копировать. Возможно первый раз неверно выразился, извиняюсь!
Может перед началом всего скрипта ввести переменную, которая содержит имя листа, и потом по всему макросу её использовать? И получить на выходе третий вариант. Кривой код, но мысль ясна, я думаю: [vba]
Да откуда же мне знать, где Ваша ячейка находится? Я показал Вам как использовать данные ячейки в качестве переменной. Если в книге откуда запускается макрос то и указывайте ее как ThisWorkbook. Т.е.: ThisWorkbook.Sheets(ThisWorkbook.Sheets("01.01").Range("С3").value).Range("B8")
Да откуда же мне знать, где Ваша ячейка находится? Я показал Вам как использовать данные ячейки в качестве переменной. Если в книге откуда запускается макрос то и указывайте ее как ThisWorkbook. Т.е.: ThisWorkbook.Sheets(ThisWorkbook.Sheets("01.01").Range("С3").value).Range("B8")KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
KuklP, вы не улавливаете суть. Я не могу использовать имя листа в явном виде в макросе.
Цитата
ThisWorkbook.Sheets("01.01")
Сегодня лист именуется как "01.01", а завтра как "02.01". Я сдернул имя листа в ячейку, и при копировании листов, и последующим их переименованием, в ячейку нормально попадают данные, то есть имя соответствующего листа. Ячейка копируется с каждым новым листом. То есть на каждом листе книги есть ячейка, которая содержит имя листа на котором она расположена. Как теперь использовать эту ячейку в макросе? И возможно ли это вообще?
KuklP, вы не улавливаете суть. Я не могу использовать имя листа в явном виде в макросе.
Цитата
ThisWorkbook.Sheets("01.01")
Сегодня лист именуется как "01.01", а завтра как "02.01". Я сдернул имя листа в ячейку, и при копировании листов, и последующим их переименованием, в ячейку нормально попадают данные, то есть имя соответствующего листа. Ячейка копируется с каждым новым листом. То есть на каждом листе книги есть ячейка, которая содержит имя листа на котором она расположена. Как теперь использовать эту ячейку в макросе? И возможно ли это вообще?vlad_stv
KuklP, если так писать, то получается макрос копирует диапазон D2:D122 в ячейку K8 Всё верно делает, да вот только в другую книгу надо копировать, а он копирует в пределах книги источника. Видимо, потому, что в самом начале макроса мы открываем книгу, то есть делаем её активной:
KuklP, если так писать, то получается макрос копирует диапазон D2:D122 в ячейку K8 Всё верно делает, да вот только в другую книгу надо копировать, а он копирует в пределах книги источника. Видимо, потому, что в самом начале макроса мы открываем книгу, то есть делаем её активной:
- значит имя книги все-таки стационарно? А нужный лист Вы как-то раньше активировали? Как-то к нему обращались, чтоб активировать? Или "на кого Бог пошлет"? Т.е. открывая книгу.. стоп, Workbooks("1.xlsm")? это та книга из которй запущен макрос? Вы читаете, что Вам пишут?
Если в книге откуда запускается макрос то и указывайте ее как ThisWorkbook
- и что, Вы не знаете на каком листе в Вашей книге находится ячейка с названием? Туда что как попало вставляются листы и как попало называются? Так поместите ячейку в лист, где кнопка и ссылайтесь на него.
Да я понятия не имею где у Вас что расположено и что куда Вы хотите копировать. Сами-то смекалку проявите.
- значит имя книги все-таки стационарно? А нужный лист Вы как-то раньше активировали? Как-то к нему обращались, чтоб активировать? Или "на кого Бог пошлет"? Т.е. открывая книгу.. стоп, Workbooks("1.xlsm")? это та книга из которй запущен макрос? Вы читаете, что Вам пишут?
Если в книге откуда запускается макрос то и указывайте ее как ThisWorkbook
- и что, Вы не знаете на каком листе в Вашей книге находится ячейка с названием? Туда что как попало вставляются листы и как попало называются? Так поместите ячейку в лист, где кнопка и ссылайтесь на него.KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
KuklP, премного благодарен за вашу помощь, но хамить идите на улицу! Читать я умею. Вы читаете, что вам пишут?
Цитата
Если так, то снова возвращаемся к имени листа...
Цитата
Я не могу использовать имя листа в явном виде в макросе.
Цитата
- значит имя книги все-таки стационарно?
ЛИСТА! Имя книги вообще не причем! И я нигде не говорил, что имя книги не стационарно!
Ваш же макрос и использую, и он именно так и работает. [vba]
Код
' 1. Открывает книгу-источник Workbooks.Open Filename:=ThisWorkbook.Path & "\test.xlsx" ' 2. Копирует диапазон в книге-источнике и переносит в книгу-приемник в ячейку C8 Workbooks("test.xlsx").Sheets("Статистика").Range("B2:B122").Copy ThisWorkbook.Sheets("01.01").Range("C8") ' 3. Закрывает книгу открытую вначале: Workbooks("test.xlsx").Close
[/vba]
Цитата
Если в книге откуда запускается макрос то и указывайте ее как ThisWorkbook
Цитата
(ThisWorkbook.Sheets("01.01").Range("С3").value)
- Я НЕ МОГУ УКАЗАТЬ В ЯВНОМ ВИДЕ ИМЯ ЛИСТА, может так виднее будет.
Я лишь пытаюсь понять как уйти от явного описания имени листа книги-приемника ("01.01"). Может перестать нервничать и внимательно перечитать, может вы не так меня поняли, но задавать мне идиотские вопросы, извольте!
KuklP, премного благодарен за вашу помощь, но хамить идите на улицу! Читать я умею. Вы читаете, что вам пишут?
Цитата
Если так, то снова возвращаемся к имени листа...
Цитата
Я не могу использовать имя листа в явном виде в макросе.
Цитата
- значит имя книги все-таки стационарно?
ЛИСТА! Имя книги вообще не причем! И я нигде не говорил, что имя книги не стационарно!
Ваш же макрос и использую, и он именно так и работает. [vba]
Код
' 1. Открывает книгу-источник Workbooks.Open Filename:=ThisWorkbook.Path & "\test.xlsx" ' 2. Копирует диапазон в книге-источнике и переносит в книгу-приемник в ячейку C8 Workbooks("test.xlsx").Sheets("Статистика").Range("B2:B122").Copy ThisWorkbook.Sheets("01.01").Range("C8") ' 3. Закрывает книгу открытую вначале: Workbooks("test.xlsx").Close
[/vba]
Цитата
Если в книге откуда запускается макрос то и указывайте ее как ThisWorkbook
Цитата
(ThisWorkbook.Sheets("01.01").Range("С3").value)
- Я НЕ МОГУ УКАЗАТЬ В ЯВНОМ ВИДЕ ИМЯ ЛИСТА, может так виднее будет.
Я лишь пытаюсь понять как уйти от явного описания имени листа книги-приемника ("01.01"). Может перестать нервничать и внимательно перечитать, может вы не так меня поняли, но задавать мне идиотские вопросы, извольте!vlad_stv
' 2. Копирует диапазон в книге-источнике и переносит в книгу-приемник в ячейку C8 Workbooks("test.xlsx").Sheets("Статистика").Range("B2:B122").Copy ThisWorkbook.Sheets(name).Range("C8")
' 3. Закрывает книгу открытую вначале: Workbooks("test.xlsx").Close
End Sub
[/vba]
Решил. Спасибо Manyasha, за наводку. Спасибо за помощь и нервы KuklP.
KuklP, [vba]
Код
Sub копировать() Dim name As String name = ActiveSheet.name
' 2. Копирует диапазон в книге-источнике и переносит в книгу-приемник в ячейку C8 Workbooks("test.xlsx").Sheets("Статистика").Range("B2:B122").Copy ThisWorkbook.Sheets(name).Range("C8")
' 3. Закрывает книгу открытую вначале: Workbooks("test.xlsx").Close
End Sub
[/vba]
Решил. Спасибо Manyasha, за наводку. Спасибо за помощь и нервы KuklP.vlad_stv
Вы, простите, крикнули на людной улице "Ваня!!!одинодинодин" и удивляетесь тому, что отозвался ближайший Вано Череззаборногузадерян, а не находящийся в соседнем посёлке Ваня Иванов, о котором Вы думали
Вы, простите, крикнули на людной улице "Ваня!!!одинодинодин" и удивляетесь тому, что отозвался ближайший Вано Череззаборногузадерян, а не находящийся в соседнем посёлке Ваня Иванов, о котором Вы думали StoTisteg
Интуитивно понятный код - это когда интуитивно понятно, что это код.