Постоянно приходится выполнять следующую последовательность действий: Книга1 → Alt+Tab → Скопировать информацию из листа Full в Книге2 → Alt+Tab → Скопировать информацию в Книгу1. Книги всегда разные, поэтому как-то заранее прописать название книг не вариант, приходится использовать ALt+Tab. Получился следующий макрос:
Код
Sub КопироватьFull()
'Копирование нужной информации в Книге2
Sheets("Full").Select
ActiveSheet.Protect Password:="1111", UserInterfaceOnly:=True
Range("A4:P5000").Select
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
End Sub
Sub Hotkeys()
Application.OnKey "^+X", "КопироватьFull"
End Sub
Sub RunMacroAndPaste()
Application.SendKeys "%{TAB}", True
Application.Wait Now + TimeValue("00:00:01")
Application.SendKeys "^+X", True
Application.Wait Now + TimeValue("00:00:01")
Application.SendKeys "%{TAB}", True
Application.Wait Now + TimeValue("00:00:01")
Range("A35").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
End Sub
1) Код корректно работает до момента, когда в возвращаюсь в Книгу1 через ALt+Tab. Т.е. после добавления в макрос второго "Application.SendKeys "%{TAB}", True" почему-то перестаёт работать "КопироватьFull".
2) Пробовал выполнить отдельно вторую часть макроса:
написал: Меняем концепцию. Книги выбираем с помощью пользовательской формы.
Спасибо за помощь, но, к сожалению, не вариант. Таких мест, которые нужно скопировать в документе несколько на разных листах. Идея была в том, чтобы один раз запустить макрос и он бы дальше уже сам копировал всю нужную информацию.
Sub КопироватьFull() 'Копирование нужной информации в Книге2 Dim ws As Worksheet Set ws = ActiveSheet ' Запоминаем активный лист
ws.Protect Password:="1111", UserInterfaceOnly:=True 'Копируем видимые ячейки без использования Select ws.Range("A4:P5000").SpecialCells(xlCellTypeVisible).Copy End Sub
Sub RunMacroAndPaste() Dim Книга1 As Workbook, Книга2 As Workbook Dim wsКнига1 As Worksheet
' Определяем активные книги Set Книга2 = ActiveWorkbook
' Переключаемся на другую книгу (предполагается, что она была открыта ранее) ' Находим книгу по имени (если знаете имя) или перебираем все открытые книги For Each wb In Application.Workbooks If wb.Name <> Книга2.Name Then Set Книга1 = wb Exit For End If Next wb
If Книга1 Is Nothing Then MsgBox "Не найдена другая открытая книга!" Exit Sub End If
' Активируем Книгу1 Книга1.Activate Set wsКнига1 = Книга1.Sheets("ИмяЛиста") ' Замените "ИмяЛиста" на нужное имя листа
' Вставляем значения и форматы без использования Select With wsКнига1.Range("A35") .PasteSpecial Paste:=xlPasteValues .PasteSpecial Paste:=xlPasteFormats End With
Application.CutCopyMode = False ' Убираем выделение после копирования End Sub
Sub Hotkeys() Application.OnKey "^+X", "КопироватьFull" End Sub