Вопрос может глупый, но только начал свои попытки работы с макросами, подскажите пожалуйста. Если повторяюсь - извините, много форумов сегодня облазил, нашел близкие вопросы и ответы, но на свой пример не могу применить эти ответы. Проблема вот в чем: макрос, который я сделал будет применятся для эксель файлов с различными наименованиями, но код ниже строго привязан к копированию в определенный файл ("Книга 2.xlsx"), а файлы будут называться по другому. Если меняю Windows("Книга 2.xlsx").Activate на ActiveSheet.Activate, то копирование происходит в "Книга 1.xlsx", так как ее считает активной. Можно ли как-то активировать книгу без привязки к названию? Например, активировать книгу, в которой установлен курсор? Или по какому-то иному признаку. Подскажите пожалуйста.
[vba]
Код
Sub Тест() ' ' Тест макрос '
' Windows("Книга 1.xlsx").Activate Rows("9:9").Select Selection.Copy Windows("Книга 2.xlsx").Activate Rows("9:9").Select ActiveSheet.Paste Range("J5").Select End Sub
[/vba] [moder]Оформляйте коды тегами (кнопка #)[/moder]
Добрый день!
Вопрос может глупый, но только начал свои попытки работы с макросами, подскажите пожалуйста. Если повторяюсь - извините, много форумов сегодня облазил, нашел близкие вопросы и ответы, но на свой пример не могу применить эти ответы. Проблема вот в чем: макрос, который я сделал будет применятся для эксель файлов с различными наименованиями, но код ниже строго привязан к копированию в определенный файл ("Книга 2.xlsx"), а файлы будут называться по другому. Если меняю Windows("Книга 2.xlsx").Activate на ActiveSheet.Activate, то копирование происходит в "Книга 1.xlsx", так как ее считает активной. Можно ли как-то активировать книгу без привязки к названию? Например, активировать книгу, в которой установлен курсор? Или по какому-то иному признаку. Подскажите пожалуйста.
[vba]
Код
Sub Тест() ' ' Тест макрос '
' Windows("Книга 1.xlsx").Activate Rows("9:9").Select Selection.Copy Windows("Книга 2.xlsx").Activate Rows("9:9").Select ActiveSheet.Paste Range("J5").Select End Sub
[/vba] [moder]Оформляйте коды тегами (кнопка #)[/moder]Dendibar
Сообщение отредактировал Pelena - Пятница, 11.03.2016, 19:41
Обратиться к рабочей книге можно по имени или по индексу. В чем проблема, лично мне, не понятно. Код Ваш должен выглядеть примерно так (макрорекордер пишет правильно, но кривовато) [vba]
Код
Sub tt() Application.ScreenUpdating = False Workbooks("Книга1").Sheets("Лист1").Range("9:9").Copy Destination:=Workbooks("Книга2").Sheets("Лист1").Range("A9") Application.ScreenUpdating = True End Sub
[/vba]
Обратиться к рабочей книге можно по имени или по индексу. В чем проблема, лично мне, не понятно. Код Ваш должен выглядеть примерно так (макрорекордер пишет правильно, но кривовато) [vba]
Код
Sub tt() Application.ScreenUpdating = False Workbooks("Книга1").Sheets("Лист1").Range("9:9").Copy Destination:=Workbooks("Книга2").Sheets("Лист1").Range("A9") Application.ScreenUpdating = True End Sub
Спасибо за ответы! Наверное непонятно сформулировал вопрос: В том месте где мне макрорекордер написал: Windows("Книга 2.xlsx").Activate , при пользовании макросом, файл всегда будет называться по-разному, поэтому не подходит, чтобы название было "Книга 2.xlsx", надо, чтобы название сюда менялось в зависимости от названия файла. Находил на форумах решения, но почему-то не получается, ниже пытаюсь вытащить название файла в ячейку А1 Книги 2, дальше пытаюсь добавить содержимое этой ячейки туда куда надо, но все равно берет не нужную ячейку, а ячейку из книги 1.
[vba]
Код
Sub Тест() ' ' Тест макрос '
' Range (A1) = ActiveWorkbook.Name Windows("Книга 1.xlsx").Activate Rows("9:9").Select Selection.Copy Windows("Range (A1).Value").Activate Rows("9:9").Select ActiveSheet.Paste Range("J5").Select End Sub
[/vba]
Спасибо за ответы! Наверное непонятно сформулировал вопрос: В том месте где мне макрорекордер написал: Windows("Книга 2.xlsx").Activate , при пользовании макросом, файл всегда будет называться по-разному, поэтому не подходит, чтобы название было "Книга 2.xlsx", надо, чтобы название сюда менялось в зависимости от названия файла. Находил на форумах решения, но почему-то не получается, ниже пытаюсь вытащить название файла в ячейку А1 Книги 2, дальше пытаюсь добавить содержимое этой ячейки туда куда надо, но все равно берет не нужную ячейку, а ячейку из книги 1.
[vba]
Код
Sub Тест() ' ' Тест макрос '
' Range (A1) = ActiveWorkbook.Name Windows("Книга 1.xlsx").Activate Rows("9:9").Select Selection.Copy Windows("Range (A1).Value").Activate Rows("9:9").Select ActiveSheet.Paste Range("J5").Select End Sub
при пользовании макросом, файл всегда будет называться по-разному
Как он будет называться у Вас, ведомо только Вам. Если Вы знаете имя книги, то так и пишите — Workbooks(<Имя_книги>). Ещё один способ — завести переменную, скажем, ИмяКниги и в момент, когда Вы точно знаете, что нужная книга активна, прописать [vba]
Код
ИмяКниги=Activeworkbook.Name
[/vba]. По индексу, как советовал Udik, тоже можно. Только за индексами придётся очень тщательно следить.
при пользовании макросом, файл всегда будет называться по-разному
Как он будет называться у Вас, ведомо только Вам. Если Вы знаете имя книги, то так и пишите — Workbooks(<Имя_книги>). Ещё один способ — завести переменную, скажем, ИмяКниги и в момент, когда Вы точно знаете, что нужная книга активна, прописать [vba]
Код
ИмяКниги=Activeworkbook.Name
[/vba]. По индексу, как советовал Udik, тоже можно. Только за индексами придётся очень тщательно следить.StoTisteg
Интуитивно понятный код - это когда интуитивно понятно, что это код.
Если Вы АБСОЛЮТНО уверены, что у Вас будет открыто ровно 2 книги причем, название одной из них Вы знаете, то можно так [vba]
Код
Sub tt() Dim wb1, wb2 As Workbook Dim Rng As Range Set wb1 = ThisWorkbook With wb1.Sheets("Лист1") Set Rng = Intersect(.UsedRange, .Range("9:9")) End With Rng.Select For Each wb2 In Workbooks If wb2.Name <> wb1.Name Then Exit For Next Application.ScreenUpdating = False Rng.Copy Destination:=wb2.Sheets("Лист1").Range("A9") Application.ScreenUpdating = True End Sub
[/vba] В противном случае соблаговолите ВНЯТНО объяснить, что именно Вы делаете и что ожидаете получить в результате
Если Вы АБСОЛЮТНО уверены, что у Вас будет открыто ровно 2 книги причем, название одной из них Вы знаете, то можно так [vba]
Код
Sub tt() Dim wb1, wb2 As Workbook Dim Rng As Range Set wb1 = ThisWorkbook With wb1.Sheets("Лист1") Set Rng = Intersect(.UsedRange, .Range("9:9")) End With Rng.Select For Each wb2 In Workbooks If wb2.Name <> wb1.Name Then Exit For Next Application.ScreenUpdating = False Rng.Copy Destination:=wb2.Sheets("Лист1").Range("A9") Application.ScreenUpdating = True End Sub
[/vba] В противном случае соблаговолите ВНЯТНО объяснить, что именно Вы делаете и что ожидаете получить в результатеМВТ