Страницы: 1
RSS
VBA: не конкретное, а динамическое имя файла
 
Здравствуйте.

Вот макро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 - 01.04.2018 21:18:26
 
Код
Sub Makros1()
Workbooks("Vtoraya-Kniga.xlsm").ActiveSheet.Columns("U:IZ").Copy _
    ThisWorkbook.Worksheets("Vkladka").Columns("U:U")
End Sub
Изменено: Sanja - 01.04.2018 17:16:50
Согласие есть продукт при полном непротивлении сторон
 
Sanja, пишет sub or function not defined выделяя Workbook.
Изменено: mr667 - 01.04.2018 16:32:13
 
mr667,
В начале кода объявить первичную книгуdim wb as Workbook
set wb = Workbook(ThisWorkbook.Name)
В седьмой строке Вашего кода вместо Windows("Pervaya-Kniga.xlsx").Activate
написать wb.Activate
 
govorun, снова пишет sub or function not defined выделяя Workbook.
 
Так у Вас книга с именем Vtoraya-Kniga.xlsm открыта?
Согласие есть продукт при полном непротивлении сторон
 
Sanja, да, точно открыта, и в имени книги ошибки нет то же.
Изменено: mr667 - 01.04.2018 16:48:47
 
Опечатка. Замените на Workbooks
Согласие есть продукт при полном непротивлении сторон
 
И что? Не помогло?
Согласие есть продукт при полном непротивлении сторон
 
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
Изменено: mr667 - 01.04.2018 17:49:02
 
Sanja, всё, полностью корректно сработало, в т.ч. в рамках пакетной обработки, после замены ThisWorkbook.Worksheets(, на Sheets(.

govorun, в вашем варианте тоже если книга расположения макроса и та в которую нужно вставлять разные - то не срабатывает.
Изменено: mr667 - 01.04.2018 18:38:18
 
govorun, ваш способ полностью корректно работает, если заменить ThisWorkbook.Name (где макрос) на ActiveWorkbook.Name (который открыли, переходим на вкладку).
Изменено: mr667 - 01.04.2018 18:54:47
 
Цитата
mr667 написал:
если книга расположения макроса и та в которую нужно вставлять разные - то не срабатывает.
А где же оно видно в какую книгу Вы макрос прикрутили...
По первому посту лично я понял следующее:
Из ПЕРВОЙ книги активируем ВТОРУЮ, берем из нее данные, активируем ПЕРВУЮ книгу, вставляем данные.
Но это не главное.

А главное в следующем.
Если Вы взялись за макрос, значит у Вас появилось желание минимизировать телодвижения.
И в этом случае я бы посоветовал Вам идти до конца.
А именно - работать с одной ОТКРЫТОЙ книгой (опять же опираясь на первый пост).

Удачи
Страницы: 1
Наверх