Вот макроc записанный средствами Excel. Как сделать что бы копирование происходило не именно в Pervaya-Kniga.xlsx, а в ту книга, которая изначально была активна, в которой мы первым действием переходили на вкладку? Это должны по итогу получатся разные книги в разных ситуациях, а макрос один.
Код
Sub Makros1()
Sheets("Vkladka").Select
Windows("Vtoraya-Kniga.xlsm").Activate
Columns("U:IZ").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Pervaya-Kniga.xlsx").Activate
Columns("U:U").Select
ActiveSheet.Paste
End Sub
mr667, В начале кода объявить первичную книгуdim wb as Workbook set wb = Workbook(ThisWorkbook.Name) В седьмой строке Вашего кода вместо Windows("Pervaya-Kniga.xlsx").Activate написать wb.Activate
Sanja, помогло, но: 1. Только если макрос находится в Pervaya-Kniga.xlsx. Этот пункт не ключевой, а важен следующий. 2. Я хотел использовать в рамках пакетной обработки (её код верный, много раз пользовался). Но появляется debug и выделяет жёлтым полностью ваш код:
Код
Sub ПОбработка()
Dim sFolder As String, sFiles As String
'диалог запроса выбора папки с файлами
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = False Then Exit Sub
sFolder = .SelectedItems(1)
End With
sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)
'отключаем обновление экрана, чтобы наши действия не мелькали
Application.ScreenUpdating = False
sFiles = Dir(sFolder & "*.xls*")
Do While sFiles <> ""
'открываем книгу
Workbooks.Open sFolder & sFiles
'действия с файлом
Workbooks("Vtoraya-Kniga.xlsm").ActiveSheet.Columns("U:IZ").Copy _
ThisWorkbook.Worksheets("Vkladka").Columns("U:U")
'Закрываем книгу с сохранением изменений
ActiveWorkbook.Close True 'если поставить False - книга будет закрыта без сохранения
sFiles = Dir
Loop
'возвращаем ранее отключенное обновление экрана
Application.ScreenUpdating = True
PushButton = MsgBox("Проверить по датам изменения на пропуски.", vbInformation) = vbYes
End Sub
Sanja, всё, полностью корректно сработало, в т.ч. в рамках пакетной обработки, после замены ThisWorkbook.Worksheets(, на Sheets(. govorun, в вашем варианте тоже если книга расположения макроса и та в которую нужно вставлять разные - то не срабатывает.
govorun, ваш способ полностью корректно работает, если заменить ThisWorkbook.Name (где макрос) на ActiveWorkbook.Name (который открыли, переходим на вкладку).
mr667 написал: если книга расположения макроса и та в которую нужно вставлять разные - то не срабатывает.
А где же оно видно в какую книгу Вы макрос прикрутили... По первому посту лично я понял следующее: Из ПЕРВОЙ книги активируем ВТОРУЮ, берем из нее данные, активируем ПЕРВУЮ книгу, вставляем данные. Но это не главное.
А главное в следующем. Если Вы взялись за макрос, значит у Вас появилось желание минимизировать телодвижения. И в этом случае я бы посоветовал Вам идти до конца. А именно - работать с одной ОТКРЫТОЙ книгой (опять же опираясь на первый пост).