Страницы: 1
RSS
Копирование в одной директории.
 
Добрый День!
Друзья) есть код копирования данных с лита одной книги в лист другой книги. Вопрос, который мучает меня и на, который ищу ответ: "Если эти обе книги лежат в одной папке, то как написать без указания пути?" Я про то что возьму я перенесу эту папку на другой компьютер на другой локал.диск и чтобы не прописывать снова путь к папке. Файлы (2 книги) всегда будут лежать в одной папке)
Спасибо!
Код
Sub Macro1()
     Range ("A:J").Select
     'Sheets("Лист1").Range("A:J").SpecialCells(2).Copy
     Selection.Copy
     ChDir "C:\User\Copy"
     Workbooks.Open FileName:="Top2.xlsb"
     Range "A1".Select
     ActiveSheet.Paste
     ActiveWorkbook.Save
     ActiveWorkbook.Clouse
End Sub
Изменено: Dotodot500 - 16.02.2017 14:41:45
 
Книга, в которой макрос, называется ThisWorkbook.
Для открытия другой книги в этой директории используйте путь ThisWorkbook.Path
 
Код
Workbooks.Open ThisWorkbook.Path & application.pathseparator & "Top2.xlsb" 
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Kuzmich, Ігор Гончаренко, - спасибо огромное! Получилось то что было нужно!) Ещё раз Спасибо!
Изменено: Dotodot500 - 16.02.2017 14:53:13
 
Возникла проблемы если нахожусь на листе ("Fact") куда нужно вставить данные все работает, если стою на другом листе книги и запускаю макрос выдает ошибку и ссылает на 5 строчку, В чем проблема не могу понять вроде все так((( Активирую книгу, указываю какой лист надо, а все равно косяк(
Код
Sub CopyFact
   Workbooks.Open ThisWorkbook.Path & Application.PathSeparator & "Value.xlsb"
   Workbooks("Value.xlsb").worksheets ("Fact").Range ("A:J").Copy
   Workbooks("Цели.xlsb").Activate
   ActiveWorkbook.WorkSheets("Fact").Range ("A1").Select
   ActiveSheet.Paste
   Workbooks ("Value.xlsb").Close
End Sub
Изменено: Dotodot500 - 17.02.2017 09:41:13
 
Нужно ещё и лист активировать, если решили там сделать select.
Вообще уходите от этих активаций и селектов, почти всё можно сделать без них:
Код
Workbooks("Value.xlsb").worksheets("Fact").Range("A:J").Copy Workbooks("Цели.xlsb").WorkSheets("Fact").Range("A1")

И ещё - если вдруг (а такое бывает!) код в персональной книге макросов, то использовать ThisWorkbook.Path практически никогда не нужно :)
Не потому что можно обойтись, а потому что с тем каталогом никто не работает.
Изменено: Hugo - 17.02.2017 09:52:57
 
Hugo, В одну строчку сделать всю операцию!) Я в восторге. Спасибо!)
Добавил только Workbooks .Close, что не оставаться на книге с которой стянул данные)
И спасибо за ответ по поводу активации листа, тоже проверил работает)
Еще раз спасибо)
Изменено: Dotodot500 - 17.02.2017 10:13:39
 
Интересное явление наблюдаю)
Если на запуск макроса пример, которого привел Hugo, использовать кнопку (Элемент ActiveX), то он все копирует но только при этом создается новая книга к примеру книга4 и.т.д при каждом запуске))))) :D
Если использую элемент управления формы обычную кнопочку, то все хорошо) а так же если без кнопок, то тоже все норм)
 
Вот поэтому по правилам форума всегда нужно прикладывать файл! :)
 
Да нет я же не в упрек, а просто интересный факт)  ;)
 
Вот загрузил, мне аж интересно с чем это связанно) Обе книги должны лежать в одной папке)
При копировании (нажать на кнопку) создастся новая книгу
 
Я пока пас, у меня админы-звери... :(
 
Переименуйте Copy допустим на Copy1
 
вот
 
what  8-0, это было из-за названия макроса))) ахахахахах
Stalevar, спасибо! за объяснение причины такого поведения макроса)
Страницы: 1
Наверх