Копировать лист из другой книги, где имя листа может меняться в зависимости от ввода - PullRequest
1 голос
/ 17 января 2020

Для работы у нас есть 1 книга Excel с множеством различных листов, моя роль состоит в том, чтобы одновременно брать информацию с одной из этих таблиц и помещать ее в другую рабочую книгу. Довольно просто, я сейчас изучаю VBA и пытаюсь автоматизировать этот процесс, чтобы начать.

Это то, что у меня есть до сих пор. Он начинается с нажатия кнопки на рабочей книге "Macro Test Blank Sheet For new Data.xlsm".

Workbooks.Open "C:\Macro Test\2019-2020 Reflecto Record.xlsm"

 Workbooks("2019-2020 Reflecto Record.xlsm").Worksheets(1).Range("A1:BA10000").Copy _
    Workbooks("Macro Test Blank Sheet For new Data.xlsm").Worksheets("Data").Range("A1")

ActiveWorkbook.Close

После завершения данные были скопированы, а рабочая книга "2019-2020 Reflecto Record.xlsm" закрыта.

В настоящее время используется .Worksheet(1) для использования первой страницы рабочей книги для скопировать из. Можно ли для этого выбрать лист по имени, имя которого введено в ячейку рядом с кнопкой для запуска макроса?

Ответы [ 2 ]

0 голосов
/ 17 января 2020

Это должно помочь вам начать, два предложенных способа генерации имени:

Sub sheetopener()
Dim MySh As String 'Dim MySh as a variable to hold the name of your sheet.

MySh = InputBox("Which sheet?", "Sheet picker") 'Set the name of your sheet with a popup box.
'Mysh = Thisworkbook.Sheet1.Range("A2").value 'Alternative set the name of your sheet in reference to a cell.

Workbooks("Name here").Sheets(MySh).Activate 'Activate the sheet with the just generated name.

End Sub
0 голосов
/ 17 января 2020

Если вы укажете имя в ячейке A1 листа с именем «Лист1» (просто измените имя на лист, на котором вы работаете)

Используйте этот код:

Dim sourceSheetName as String

sourceSheetName = Thisworkbook.Worksheets("Sheet1").Range("A1").Value

Workbooks.Open "C:\Macro Test\2019-2020 Reflecto Record.xlsm"

Workbooks("2019-2020 Reflecto Record.xlsm").Worksheets(sourceSheetName).Range("A1:BA10000").Copy _
        Workbooks("Macro Test Blank Sheet For new Data.xlsm").Worksheets("Data").Range("A1")

ActiveWorkbook.Close

Я также предлагаю вам посмотреть Power Query , чтобы автоматизировать этот тип процесса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...