Я пытаюсь написать немного кода, который создает лист с именем, заданным переменной, а затем форматирует этот новый лист, копируя/вставляя все ячейки из мастера в этот новый лист. Проблема, с которой я сталкиваюсь, связана с этим новым листом после его создания, поскольку заголовок хранится в переменной.
В настоящее время мой код такой, как показано ниже, все работает, кроме последней строки, где я пытаюсь выбрать вновь созданный рабочий лист, ссылаясь на него по имени переменной.
Sub Create_New_Sheet()
Dim title As String
title = Sheets("config").range("A3 ").Value & "_" & Sheets("config").range("B3 ").Value & "_" & "Calculations"
Sheets.Add(Before:=Sheets("Results")).Name = title
Sheets("Calc_master").UsedRange.Copy
Sheets("title").range("A1").Paste
End Sub
Есть ли способ выбрать лист с помощью переменной? Я не смог найти ничего, что могло бы предположить, что это возможно.
После добавления или копирования рабочего листа новый рабочий лист будет активным.
Но рассмотрите возможность копирования таблицы calc_master - нет необходимости копировать/вставлять используемый диапазон:
Function get_New_Sheet() as Worksheet
Dim title As String
Dim wsConfig As Worksheet, wsMaster as Worksheet
With ThisWorkbook
Set wsConfig = .Worksheets("Config")
With wsConfig
title = .Range("A3") & "_" & .Range("B3") & "_Calculations"
End With
Set wsMaster = .Worksheets("Calc_master")
wsMaster.Copy before:=.Worksheets("Results")
End With
ActiveSheet.Name = title
Set get_New_Sheet = ActiveSheet
End Function
В рамках вашего более широкого охвата:
Public Sub doSomething
Dim wsNew as worksheet
Set wsNew = get_New_Sheet
wsNew.Range("A1") = "xxx"
End Sub
Спасибо! Да, я не подумал скопировать лист, а затем переименовать его. Этот код является частью более крупного проекта. Теперь, когда лист создан, как лучше всего сослаться на него в коде?
Я изменил подпрограмму на функцию - функция возвращает новый лист - см. последнюю часть кода - она показывает, как ее использовать. Вы даже можете улучшить его, например. передав строку в get_New_sheet
Sheets(title).range("A1").Paste