Страницы: 1
RSS
Макрос с Alt+TAb
 
Постоянно приходится выполнять следующую последовательность действий:
Книга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) Пробовал выполнить отдельно вторую часть макроса:
Код
    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
Выдаёт ошибку 1004 "Метод select из класса Range завершен неверно". При этом, если проделывать всё самому, то никаких проблем не возникает.

Помогите, пожалуйста, скорректировать код.  
Изменено: Dobbisvoboden - 05.02.2025 06:37:17
 
Меняем концепцию. Книги выбираем с помощью пользовательской формы.
 
Цитата
написал:
Меняем концепцию. Книги выбираем с помощью пользовательской формы.
Спасибо за помощь, но, к сожалению, не вариант. Таких мест, которые нужно скопировать в документе несколько на разных листах. Идея была в том, чтобы один раз запустить макрос и он бы дальше уже сам  копировал всю нужную информацию.
 
Как вариант, считать имена открытых файлов и уж потом в цикле проводить ваши действия без ALt+Tab.
 
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
Страницы: 1
Наверх