Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Не удается скопировать данные из одной книги в другую - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Не удается скопировать данные из одной книги в другую (Макросы/Sub)
Не удается скопировать данные из одной книги в другую
vlad_stv Дата: Вторник, 15.03.2016, 15:34 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
День добрый! Есть две книги, одна сформирована экспортом из проги Wialon (транспортный мониторинг, Webморда, статистику позволяет экспортировать сразу в .xlsx), вторая чистый лист.
Во второй книге, для переноса части значений из выгрузки, для дальнейшей работы с ними, использую стандартный макрос:

[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").Select
ActiveSheet.Paste

Workbooks("3.xlsx").Close

End Sub
[/vba]

При выполнении в первый раз или два, всё прошло удачно, данные скопировались. На третий и далее повторения, выдает ошибку:
Цитата
Run-time error '1004':

Цитата
данные не могу быть вставлены из-за несоответствия формы и размеров области копирования и области вставки. Выполните одно из следующих действий:
1. выберите и вставьте одну ячейку;
2. выберите и вставьте прямоугольник соответ. размера и формы;


В первые два раза ячейку-приемник никак не изменял, абсолютно стоковая ячейка, принимала значения столбцов на ура.
Следом вторая ячейка приняла значение второго диапазона значений из исходной выгрузки. А вот на третий раз, появилась ошибка. После этого, первые два варианта макроса(изменялись только значения источника-диапазон и приемника данных-ячейка) - также перестали выполнятся и выдают ту же ошибку.

Я попробовал:

  • 1. Сменить предварительно размер ячейки, перед выполнением макроса(бредовая идея, но всё же попробовал) - не помогло;
  • 2. Создал отдельно две книги, в первую положил кнопку, к ней прикрутил свой макрос. Во второй создал простой набор данных, в первой колонке цифры, во второй дни недели по именам. Всё копируется в первую книгу, выполняется - работает. Подкидываю в макрос файл с выгрузкой - не копируется ни одна колонка, всё время ошибка указанная выше;
  • 3. Менял формат "чистой" ячейки на формат, как в исходнике - не помогло;


По нажатию кнопки "Debug", отправляет на вот эту строку:
[vba]
Код
ActiveSheet.Paste
[/vba]

Если в ручную выделить диапазон(любой) значений в исходном файле, через копипаст вставить в книгу-приёмник, в любую ячейку, всё скопируется.

В чем может быть ошибка? В выгрузке? Но как тогда первые два раза отработало? Нет ли какого-нибудь переполнения или чего-то подобного?

Заранее благодарю за помощь!
К сообщению приложен файл: send.rar (31.5 Kb) · 5574279.jpg (33.2 Kb)


white [Ra]
 
Ответить
СообщениеДень добрый! Есть две книги, одна сформирована экспортом из проги Wialon (транспортный мониторинг, Webморда, статистику позволяет экспортировать сразу в .xlsx), вторая чистый лист.
Во второй книге, для переноса части значений из выгрузки, для дальнейшей работы с ними, использую стандартный макрос:

[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").Select
ActiveSheet.Paste

Workbooks("3.xlsx").Close

End Sub
[/vba]

При выполнении в первый раз или два, всё прошло удачно, данные скопировались. На третий и далее повторения, выдает ошибку:
Цитата
Run-time error '1004':

Цитата
данные не могу быть вставлены из-за несоответствия формы и размеров области копирования и области вставки. Выполните одно из следующих действий:
1. выберите и вставьте одну ячейку;
2. выберите и вставьте прямоугольник соответ. размера и формы;


В первые два раза ячейку-приемник никак не изменял, абсолютно стоковая ячейка, принимала значения столбцов на ура.
Следом вторая ячейка приняла значение второго диапазона значений из исходной выгрузки. А вот на третий раз, появилась ошибка. После этого, первые два варианта макроса(изменялись только значения источника-диапазон и приемника данных-ячейка) - также перестали выполнятся и выдают ту же ошибку.

Я попробовал:

  • 1. Сменить предварительно размер ячейки, перед выполнением макроса(бредовая идея, но всё же попробовал) - не помогло;
  • 2. Создал отдельно две книги, в первую положил кнопку, к ней прикрутил свой макрос. Во второй создал простой набор данных, в первой колонке цифры, во второй дни недели по именам. Всё копируется в первую книгу, выполняется - работает. Подкидываю в макрос файл с выгрузкой - не копируется ни одна колонка, всё время ошибка указанная выше;
  • 3. Менял формат "чистой" ячейки на формат, как в исходнике - не помогло;


По нажатию кнопки "Debug", отправляет на вот эту строку:
[vba]
Код
ActiveSheet.Paste
[/vba]

Если в ручную выделить диапазон(любой) значений в исходном файле, через копипаст вставить в книгу-приёмник, в любую ячейку, всё скопируется.

В чем может быть ошибка? В выгрузке? Но как тогда первые два раза отработало? Нет ли какого-нибудь переполнения или чего-то подобного?

Заранее благодарю за помощь!

Автор - vlad_stv
Дата добавления - 15.03.2016 в 15:34
KuklP Дата: Вторник, 15.03.2016, 16:03 | Сообщение № 2
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
[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]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
Сообщение[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]

Автор - KuklP
Дата добавления - 15.03.2016 в 16:03
vlad_stv Дата: Вторник, 15.03.2016, 16:44 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
KuklP, благодарю! Заработало!

Если есть у вас время, не могли бы пояснить хотя бы немного, что я сделал не так. В моём(взял на другом сайте посвященному excel) макросе, нет обработки типа данных, или я совсем не в ту сторону думаю?


white [Ra]
 
Ответить
СообщениеKuklP, благодарю! Заработало!

Если есть у вас время, не могли бы пояснить хотя бы немного, что я сделал не так. В моём(взял на другом сайте посвященному excel) макросе, нет обработки типа данных, или я совсем не в ту сторону думаю?

Автор - vlad_stv
Дата добавления - 15.03.2016 в 16:44
akobir Дата: Вторник, 15.03.2016, 17:32 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 201
Репутация: 9 ±
Замечаний: 0% ±

Excel 2010
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]

Код не проверял. Работоспособность не гарантирую. :)


e-mail: akobir.ismailov@gmail.com
 
Ответить
Сообщение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
Дата добавления - 15.03.2016 в 17:32
vlad_stv Дата: Среда, 16.03.2016, 11:11 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
А как правильно поправить в макрос KuklP, чтобы имя листа бралось из ячейки?
Или еще проще, чтобы имя листа для выполнения копирования, бралось из имени листа)? Есть какой-нибудь параметр/переменная который можно использовать?
Например:
Первоначальный вариант:
[vba]
Код
Sheets("Сводка")
[/vba]
Второй:
[vba]
Код
Sheets(A3)
[/vba]
Третий:
[vba]
Код
Sheets(Sheetname)
[/vba]


white [Ra]
 
Ответить
СообщениеА как правильно поправить в макрос KuklP, чтобы имя листа бралось из ячейки?
Или еще проще, чтобы имя листа для выполнения копирования, бралось из имени листа)? Есть какой-нибудь параметр/переменная который можно использовать?
Например:
Первоначальный вариант:
[vba]
Код
Sheets("Сводка")
[/vba]
Второй:
[vba]
Код
Sheets(A3)
[/vba]
Третий:
[vba]
Код
Sheets(Sheetname)
[/vba]

Автор - vlad_stv
Дата добавления - 16.03.2016 в 11:11
KuklP Дата: Среда, 16.03.2016, 11:16 | Сообщение № 6
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Ну и берите:
[vba]
Код
Sheets(Range("B2").value)
[/vba]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеНу и берите:
[vba]
Код
Sheets(Range("B2").value)
[/vba]

Автор - KuklP
Дата добавления - 16.03.2016 в 11:16
vlad_stv Дата: Среда, 16.03.2016, 11:32 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
KuklP, не, не получается. Он берет ячейку из файла исходника. А надо чтобы брал из файла приёмника.
То есть при копировании макрос понимал в какой лист книги ему копировать. Возможно первый раз неверно выразился, извиняюсь!

[vba]
Код
Workbooks("test.xlsx").Sheets("Ñâîäêà").Range("A2:A122").Copy ThisWorkbook.Sheets(Range("C3").Value).Range("B8")
[/vba]

Может перед началом всего скрипта ввести переменную, которая содержит имя листа, и потом по всему макросу её использовать? И получить на выходе третий вариант.
Кривой код, но мысль ясна, я думаю:
[vba]
Код

Dim x Sheetname
Sheets(Sheetname)
[/vba]


white [Ra]
 
Ответить
СообщениеKuklP, не, не получается. Он берет ячейку из файла исходника. А надо чтобы брал из файла приёмника.
То есть при копировании макрос понимал в какой лист книги ему копировать. Возможно первый раз неверно выразился, извиняюсь!

[vba]
Код
Workbooks("test.xlsx").Sheets("Ñâîäêà").Range("A2:A122").Copy ThisWorkbook.Sheets(Range("C3").Value).Range("B8")
[/vba]

Может перед началом всего скрипта ввести переменную, которая содержит имя листа, и потом по всему макросу её использовать? И получить на выходе третий вариант.
Кривой код, но мысль ясна, я думаю:
[vba]
Код

Dim x Sheetname
Sheets(Sheetname)
[/vba]

Автор - vlad_stv
Дата добавления - 16.03.2016 в 11:32
KuklP Дата: Среда, 16.03.2016, 11:33 | Сообщение № 8
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Так укажите полный путь к ячейке.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеТак укажите полный путь к ячейке.

Автор - KuklP
Дата добавления - 16.03.2016 в 11:33
vlad_stv Дата: Среда, 16.03.2016, 12:22 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
KuklP, полный путь?
[1.xlsm]Сводка'!С3 - ?
[vba]
Код
ThisWorkbook.Sheets(Range("[1.xlsm]01.01'!С3").value).Range("B8")
[/vba]
Если так, то снова возвращаемся к имени листа, оно статично прописано будет, как здесь, только в первом случае мы используем ячейку.
[vba]
Код
Workbooks("test.xlsx").Sheets("Сводка").Range("D2:D122").Copy ThisWorkbook.Sheets("01.01").Range("K8")
[/vba]


white [Ra]
 
Ответить
СообщениеKuklP, полный путь?
[1.xlsm]Сводка'!С3 - ?
[vba]
Код
ThisWorkbook.Sheets(Range("[1.xlsm]01.01'!С3").value).Range("B8")
[/vba]
Если так, то снова возвращаемся к имени листа, оно статично прописано будет, как здесь, только в первом случае мы используем ячейку.
[vba]
Код
Workbooks("test.xlsx").Sheets("Сводка").Range("D2:D122").Copy ThisWorkbook.Sheets("01.01").Range("K8")
[/vba]

Автор - vlad_stv
Дата добавления - 16.03.2016 в 12:22
KuklP Дата: Среда, 16.03.2016, 12:41 | Сообщение № 10
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Да откуда же мне знать, где Ваша ячейка находится? Я показал Вам как использовать данные ячейки в качестве переменной. Если в книге откуда запускается макрос то и указывайте ее как ThisWorkbook. Т.е.:
ThisWorkbook.Sheets(ThisWorkbook.Sheets("01.01").Range("С3").value).Range("B8")


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеДа откуда же мне знать, где Ваша ячейка находится? Я показал Вам как использовать данные ячейки в качестве переменной. Если в книге откуда запускается макрос то и указывайте ее как ThisWorkbook. Т.е.:
ThisWorkbook.Sheets(ThisWorkbook.Sheets("01.01").Range("С3").value).Range("B8")

Автор - KuklP
Дата добавления - 16.03.2016 в 12:41
vlad_stv Дата: Среда, 16.03.2016, 13:00 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
KuklP, вы не улавливаете суть. Я не могу использовать имя листа в явном виде в макросе.
Цитата
ThisWorkbook.Sheets("01.01")

Сегодня лист именуется как "01.01", а завтра как "02.01". Я сдернул имя листа в ячейку, и при копировании листов, и последующим их переименованием, в ячейку нормально попадают данные, то есть имя соответствующего листа. Ячейка копируется с каждым новым листом. То есть на каждом листе книги есть ячейка, которая содержит имя листа на котором она расположена. Как теперь использовать эту ячейку в макросе? И возможно ли это вообще?


white [Ra]
 
Ответить
СообщениеKuklP, вы не улавливаете суть. Я не могу использовать имя листа в явном виде в макросе.
Цитата
ThisWorkbook.Sheets("01.01")

Сегодня лист именуется как "01.01", а завтра как "02.01". Я сдернул имя листа в ячейку, и при копировании листов, и последующим их переименованием, в ячейку нормально попадают данные, то есть имя соответствующего листа. Ячейка копируется с каждым новым листом. То есть на каждом листе книги есть ячейка, которая содержит имя листа на котором она расположена. Как теперь использовать эту ячейку в макросе? И возможно ли это вообще?

Автор - vlad_stv
Дата добавления - 16.03.2016 в 13:00
Manyasha Дата: Среда, 16.03.2016, 13:29 | Сообщение № 12
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
vlad_stv, используйте вместо имени листа его кодовое имя (CodeName)


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеvlad_stv, используйте вместо имени листа его кодовое имя (CodeName)

Автор - Manyasha
Дата добавления - 16.03.2016 в 13:29
vlad_stv Дата: Среда, 16.03.2016, 13:44 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Manyasha, например?
[vba]
Код

n = ActiveSheet.CodeName
Workbooks("test.xlsx").Sheets("Сводка").Range("D2:D122").Copy ThisWorkbook.Sheets(n).Range("K8")
[/vba]
Вот так?


white [Ra]
 
Ответить
СообщениеManyasha, например?
[vba]
Код

n = ActiveSheet.CodeName
Workbooks("test.xlsx").Sheets("Сводка").Range("D2:D122").Copy ThisWorkbook.Sheets(n).Range("K8")
[/vba]
Вот так?

Автор - vlad_stv
Дата добавления - 16.03.2016 в 13:44
KuklP Дата: Среда, 16.03.2016, 13:47 | Сообщение № 14
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Ваще.. Если копируете в активный лист, то так и пишите:
[vba]
Код
...Range("D2:D122").Copy ActiveSheet.Range("K8")
[/vba]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеВаще.. Если копируете в активный лист, то так и пишите:
[vba]
Код
...Range("D2:D122").Copy ActiveSheet.Range("K8")
[/vba]

Автор - KuklP
Дата добавления - 16.03.2016 в 13:47
vlad_stv Дата: Среда, 16.03.2016, 14:24 | Сообщение № 15
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
KuklP, если так писать, то получается макрос копирует диапазон D2:D122 в ячейку K8
Всё верно делает, да вот только в другую книгу надо копировать, а он копирует в пределах книги источника.
Видимо, потому, что в самом начале макроса мы открываем книгу, то есть делаем её активной:
Цитата
Workbooks.Open Filename:=ThisWorkbook.Path & "\test.xlsx"


В этом месте: [vba]
Код
...Range("D2:D122").Copy ActiveSheet.Range("K8")
[/vba]
Активна книга-источник. Ваша правка/код сработает, если перекинуть "фокус" на книгу-приёмник.

Возможно вот так:
[vba]
Код
...Range("D2:D122").Copy Workbooks("1.xlsm").Activate ActiveSheet.Range("K8")
[/vba]
Или я ошибаюсь?

Ошибаюсь...


white [Ra]

Сообщение отредактировал vlad_stv - Среда, 16.03.2016, 14:37
 
Ответить
СообщениеKuklP, если так писать, то получается макрос копирует диапазон D2:D122 в ячейку K8
Всё верно делает, да вот только в другую книгу надо копировать, а он копирует в пределах книги источника.
Видимо, потому, что в самом начале макроса мы открываем книгу, то есть делаем её активной:
Цитата
Workbooks.Open Filename:=ThisWorkbook.Path & "\test.xlsx"


В этом месте: [vba]
Код
...Range("D2:D122").Copy ActiveSheet.Range("K8")
[/vba]
Активна книга-источник. Ваша правка/код сработает, если перекинуть "фокус" на книгу-приёмник.

Возможно вот так:
[vba]
Код
...Range("D2:D122").Copy Workbooks("1.xlsm").Activate ActiveSheet.Range("K8")
[/vba]
Или я ошибаюсь?

Ошибаюсь...

Автор - vlad_stv
Дата добавления - 16.03.2016 в 14:24
KuklP Дата: Среда, 16.03.2016, 14:45 | Сообщение № 16
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Да я понятия не имею где у Вас что расположено и что куда Вы хотите копировать. Сами-то смекалку проявите.
Workbooks("1.xlsm").Activate ActiveSheet.Range("K8")
- значит имя книги все-таки стационарно? А нужный лист Вы как-то раньше активировали? Как-то к нему обращались, чтоб активировать? Или "на кого Бог пошлет"? Т.е. открывая книгу.. стоп, Workbooks("1.xlsm")? это та книга из которй запущен макрос? Вы читаете, что Вам пишут?
Если в книге откуда запускается макрос то и указывайте ее как ThisWorkbook
- и что, Вы не знаете на каком листе в Вашей книге находится ячейка с названием? Туда что как попало вставляются листы и как попало называются? Так поместите ячейку в лист, где кнопка и ссылайтесь на него.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеДа я понятия не имею где у Вас что расположено и что куда Вы хотите копировать. Сами-то смекалку проявите.
Workbooks("1.xlsm").Activate ActiveSheet.Range("K8")
- значит имя книги все-таки стационарно? А нужный лист Вы как-то раньше активировали? Как-то к нему обращались, чтоб активировать? Или "на кого Бог пошлет"? Т.е. открывая книгу.. стоп, Workbooks("1.xlsm")? это та книга из которй запущен макрос? Вы читаете, что Вам пишут?
Если в книге откуда запускается макрос то и указывайте ее как ThisWorkbook
- и что, Вы не знаете на каком листе в Вашей книге находится ячейка с названием? Туда что как попало вставляются листы и как попало называются? Так поместите ячейку в лист, где кнопка и ссылайтесь на него.

Автор - KuklP
Дата добавления - 16.03.2016 в 14:45
vlad_stv Дата: Среда, 16.03.2016, 15:05 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
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"). Может перестать нервничать и внимательно перечитать, может вы не так меня поняли, но задавать мне идиотские вопросы, извольте!


white [Ra]
 
Ответить
Сообщение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
Дата добавления - 16.03.2016 в 15:05
KuklP Дата: Среда, 16.03.2016, 15:10 | Сообщение № 18
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Ну что ж, извиняюсь, если не угодил. Удачи.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеНу что ж, извиняюсь, если не угодил. Удачи.

Автор - KuklP
Дата добавления - 16.03.2016 в 15:10
vlad_stv Дата: Среда, 16.03.2016, 15:46 | Сообщение № 19
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
KuklP,
[vba]
Код

Sub копировать()
    Dim name As String
    name = ActiveSheet.name

' 1. Открывает книгу-источник
Workbooks.Open Filename:=ThisWorkbook.Path & "\test.xlsx"

' 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.


white [Ra]
 
Ответить
СообщениеKuklP,
[vba]
Код

Sub копировать()
    Dim name As String
    name = ActiveSheet.name

' 1. Открывает книгу-источник
Workbooks.Open Filename:=ThisWorkbook.Path & "\test.xlsx"

' 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
Дата добавления - 16.03.2016 в 15:46
StoTisteg Дата: Среда, 16.03.2016, 20:54 | Сообщение № 20
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
ЛИСТА! Имя книги вообще не причем!

Вы, простите, крикнули на людной улице "Ваня!!!одинодинодин" и удивляетесь тому, что отозвался ближайший Вано Череззаборногузадерян, а не находящийся в соседнем посёлке Ваня Иванов, о котором Вы думали :p


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
Сообщение
ЛИСТА! Имя книги вообще не причем!

Вы, простите, крикнули на людной улице "Ваня!!!одинодинодин" и удивляетесь тому, что отозвался ближайший Вано Череззаборногузадерян, а не находящийся в соседнем посёлке Ваня Иванов, о котором Вы думали :p

Автор - StoTisteg
Дата добавления - 16.03.2016 в 20:54
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Не удается скопировать данные из одной книги в другую (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!