Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
29.03.2024, 10:41:22

Войти
Добавляйтесь в нашу группу ВКонтакте - будьте в курсе всех новых событий сайта, узнавайте первым обо всех акциях и новых статьях!
33 233 Сообщений в 5 454 Тем от 6 750 Пользователей
Последний пользователь: Alex1210
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  как отвязать макрос от имени файла?
Страниц: [1]   Вниз
Печать
Автор Тема: как отвязать макрос от имени файла?  (Прочитано 4103 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Kolobok27
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 18


Просмотр профиля
« : 22.08.2019, 15:51:03 »

есть макрос, который создает таблицу отчета. Но при изменении имени файла, макрос не работает, постоянно приходится менять имя файла в самом коде. Как отвязать макрос от имени файла, но чтобы работа макроса выполнялась?
Код: (vb)
Sub ImportReport()

 Range("A1") = Application.GetOpenFilename
 FilePath = Workbooks("Master Report_2.xlsm").Sheets("Отчет").Cells(1, 1)
 Name = Cells(1, 2)
 Application.DisplayAlerts = 0
 Workbooks.Open Filename:=FilePath
 Worksheets("Планирование").Range("A1:XA1000").Copy
  Windows("Master Report_2.xlsm").Activate
    Sheets("Планирование").Select
    Range("A1").Select
 ActiveSheet.Paste
 Sheets("Отчет").Select
Workbooks(Name).Close SaveChanges:=False
« Последнее редактирование: 22.08.2019, 19:08:52 от vikttur » Записан
nutslyc
Новичок
*

Репутация: +1/-0
Офлайн Офлайн

Сообщений: 12



Просмотр профиля E-mail
« Ответ #1 : 22.08.2019, 16:07:53 »

Код: (vb)
Workbooks("Master Report_2.xlsm") => ActiveWorkbook
« Последнее редактирование: 22.08.2019, 19:09:17 от vikttur » Записан

Yandex-деньги для "Спасибо": 410013410290959
Kolobok27
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 18


Просмотр профиля
« Ответ #2 : 22.08.2019, 16:13:37 »


 а как изменить эту строчку
Код: (vb)
Windows("Master Report_2.xlsm").Activate
« Последнее редактирование: 22.08.2019, 19:09:41 от vikttur » Записан
Kolobok27
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 18


Просмотр профиля
« Ответ #3 : 22.08.2019, 16:15:31 »

Если привести код к такому виду:
Код: (vb)
Range("A1") = Application.GetOpenFilename
 FilePath = ActiveWorkbook.Sheets("Отчет").Cells(1, 1)
 Name = Cells(1, 2)
 Application.DisplayAlerts = 0
 Workbooks.Open Filename:=FilePath
 Worksheets("Планирование").Range("A1:XA1000").Copy
  ActiveWorkbook.Activate
    Sheets("Планирование").Select
    Range("A1").Select
 ActiveSheet.Paste
 Sheets("Отчет").Select
Workbooks(Name).Close SaveChanges:=False

то возникает ошибка в этой строке:
Sheets("Отчет").Select
« Последнее редактирование: 22.08.2019, 19:09:59 от vikttur » Записан
nutslyc
Новичок
*

Репутация: +1/-0
Офлайн Офлайн

Сообщений: 12



Просмотр профиля E-mail
« Ответ #4 : 22.08.2019, 16:36:55 »

Код: (vb)
Range("A1") = Application.GetOpenFilename
firstWorkbookName = ActiveWorkBook.Name
 FilePath = ActiveWorkbook.Sheets("Отчет").Cells(1, 1)
 Name = Cells(1, 2)
 Application.DisplayAlerts = 0
 Workbooks.Open Filename:=FilePath
 Worksheets("Планирование").Range("A1:XA1000").Copy
  Windows(firstWorkbookName).Activate
    Sheets("Планирование").Select
    Range("A1").Select
 ActiveSheet.Paste
 Sheets("Отчет").Select
Workbooks(Name).Close SaveChanges:=False

должно сработать
« Последнее редактирование: 22.08.2019, 19:10:44 от vikttur » Записан

Yandex-деньги для "Спасибо": 410013410290959
Kolobok27
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 18


Просмотр профиля
« Ответ #5 : 22.08.2019, 16:54:49 »


Спасибо Вам огромное!!!
« Последнее редактирование: 22.08.2019, 20:27:20 от vikttur » Записан
boa
Старожил
****

Репутация: +22/-0
Офлайн Офлайн

Сообщений: 252


Доброта спасет мир...


Просмотр профиля WWW
« Ответ #6 : 23.08.2019, 10:19:30 »

Здравствуйте,
Вместо отключения DisplayAlerts, я бы использовал отключение EnableEvents, что бы не обрабатывать события листа при копировании и отключил бы калькулирование на это время.
Использование Activate и Select допустимо только если вы хотите посмотреть глазками на какие-то данные, а при копировании они просто не нужны и занимают лишний объем памяти.
например, строки
Код: (vb)
 Worksheets("Планирование").Range("A1:XA1000").Copy
  Windows(firstWorkbookName).Activate
    Sheets("Планирование").Select
    Range("A1").Select
 ActiveSheet.Paste

можно заменить одной строкой(если я правильно понял что и куда вы копируете)
Код: (vb)
 Workbooks(Name).Worksheets("Планирование").Range("A1:XA1000").Copy Workbooks(firstWorkbookName).Sheets("Планирование").Range("A1")
Записан

Ничто не обходится нам так дешево и не ценится так дорого, как вежливость...  Мигель Сервантес де Сааведра

RAN
Эксперты
Старожил
*

Репутация: +43/-0
Офлайн Офлайн

Сообщений: 440



Просмотр профиля E-mail
« Ответ #7 : 23.08.2019, 10:53:04 »

Мне почему-то кажется, что весь макрос должен выглядеть так
Код: (vb)
Sub ImportReport()
    Workbooks.Open Filename:=Application.GetOpenFilename
    ActiveWorkbook.Worksheets("Планирование").Range("A1:XA1000").Copy ThisWorkbook.Worksheets("Планирование").Range("A1")
    ActiveWorkbook.Close False
End Sub

Записан

А что ты умеешь?
Учиться...
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru