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

Вход

Регистрация

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

 

= Мир MS Excel/Активировать нужную книгу без привязки к наименованию книги - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Активировать нужную книгу без привязки к наименованию книги (Макросы/Sub)
Активировать нужную книгу без привязки к наименованию книги
Dendibar Дата: Пятница, 11.03.2016, 19:36 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Добрый день!

Вопрос может глупый, но только начал свои попытки работы с макросами, подскажите пожалуйста. Если повторяюсь - извините, много форумов сегодня облазил, нашел близкие вопросы и ответы, но на свой пример не могу применить эти ответы.
Проблема вот в чем: макрос, который я сделал будет применятся для эксель файлов с различными наименованиями, но код ниже строго привязан к копированию в определенный файл ("Книга 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]


Сообщение отредактировал Pelena - Пятница, 11.03.2016, 19:41
 
Ответить
СообщениеДобрый день!

Вопрос может глупый, но только начал свои попытки работы с макросами, подскажите пожалуйста. Если повторяюсь - извините, много форумов сегодня облазил, нашел близкие вопросы и ответы, но на свой пример не могу применить эти ответы.
Проблема вот в чем: макрос, который я сделал будет применятся для эксель файлов с различными наименованиями, но код ниже строго привязан к копированию в определенный файл ("Книга 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
Дата добавления - 11.03.2016 в 19:36
Udik Дата: Пятница, 11.03.2016, 20:09 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1214
Репутация: 153 ±
Замечаний: 0% ±

Excel 2013
Можно ли как-то активировать книгу без привязки к названию?

по номеру типа такого
[vba]
Код

Public Sub test()
Debug.Print Application.Workbooks(1).Name

End Sub
[/vba]
только в номерах не запутайтесь B) .


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com


Сообщение отредактировал Udik - Пятница, 11.03.2016, 20:10
 
Ответить
Сообщение
Можно ли как-то активировать книгу без привязки к названию?

по номеру типа такого
[vba]
Код

Public Sub test()
Debug.Print Application.Workbooks(1).Name

End Sub
[/vba]
только в номерах не запутайтесь B) .

Автор - Udik
Дата добавления - 11.03.2016 в 20:09
МВТ Дата: Пятница, 11.03.2016, 20:12 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 475
Репутация: 135 ±
Замечаний: 0% ±

Excel 2007
Обратиться к рабочей книге можно по имени или по индексу. В чем проблема, лично мне, не понятно. Код Ваш должен выглядеть примерно так (макрорекордер пишет правильно, но кривовато)
[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
[/vba]

Автор - МВТ
Дата добавления - 11.03.2016 в 20:12
Dendibar Дата: Суббота, 12.03.2016, 00:33 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Спасибо за ответы!
Наверное непонятно сформулировал вопрос:
В том месте где мне макрорекордер написал: 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]


Сообщение отредактировал Dendibar - Суббота, 12.03.2016, 00:34
 
Ответить
СообщениеСпасибо за ответы!
Наверное непонятно сформулировал вопрос:
В том месте где мне макрорекордер написал: 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]

Автор - Dendibar
Дата добавления - 12.03.2016 в 00:33
StoTisteg Дата: Суббота, 12.03.2016, 01:25 | Сообщение № 5
Группа: Авторы
Ранг: Ветеран
Сообщений: 541
Репутация: 45 ±
Замечаний: 0% ±

Excel 2010
при пользовании макросом, файл всегда будет называться по-разному

Как он будет называться у Вас, ведомо только Вам. Если Вы знаете имя книги, то так и пишите — Workbooks(<Имя_книги>). Ещё один способ — завести переменную, скажем, ИмяКниги и в момент, когда Вы точно знаете, что нужная книга активна, прописать [vba]
Код
ИмяКниги=Activeworkbook.Name
[/vba]. По индексу, как советовал Udik, тоже можно. Только за индексами придётся очень тщательно следить.


Проверь всё. ThisWorkbook.Save. On Error Resume Next.
 
Ответить
Сообщение
при пользовании макросом, файл всегда будет называться по-разному

Как он будет называться у Вас, ведомо только Вам. Если Вы знаете имя книги, то так и пишите — Workbooks(<Имя_книги>). Ещё один способ — завести переменную, скажем, ИмяКниги и в момент, когда Вы точно знаете, что нужная книга активна, прописать [vba]
Код
ИмяКниги=Activeworkbook.Name
[/vba]. По индексу, как советовал Udik, тоже можно. Только за индексами придётся очень тщательно следить.

Автор - StoTisteg
Дата добавления - 12.03.2016 в 01:25
МВТ Дата: Суббота, 12.03.2016, 12:37 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 475
Репутация: 135 ±
Замечаний: 0% ±

Excel 2007
Если Вы АБСОЛЮТНО уверены, что у Вас будет открыто ровно 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]
В противном случае соблаговолите ВНЯТНО объяснить, что именно Вы делаете и что ожидаете получить в результате

Автор - МВТ
Дата добавления - 12.03.2016 в 12:37
Dendibar Дата: Суббота, 12.03.2016, 18:42 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
StoTisteg, большое спасибо! Вашим способом все получилось.
Всем остальным тоже большое спасибо за помощь!
 
Ответить
СообщениеStoTisteg, большое спасибо! Вашим способом все получилось.
Всем остальным тоже большое спасибо за помощь!

Автор - Dendibar
Дата добавления - 12.03.2016 в 18:42
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Активировать нужную книгу без привязки к наименованию книги (Макросы/Sub)
Страница 1 из 11
Поиск:

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