Excel VBA: создание нового листа с именем переменной, а затем его форматирование из основной копии

Я пытаюсь написать немного кода, который создает лист с именем, заданным переменной, а затем форматирует этот новый лист, копируя/вставляя все ячейки из мастера в этот новый лист. Проблема, с которой я сталкиваюсь, связана с этим новым листом после его создания, поскольку заголовок хранится в переменной.

В настоящее время мой код такой, как показано ниже, все работает, кроме последней строки, где я пытаюсь выбрать вновь созданный рабочий лист, ссылаясь на него по имени переменной.

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

Есть ли способ выбрать лист с помощью переменной? Я не смог найти ничего, что могло бы предположить, что это возможно.

Sheets(title).range("A1").Paste
FunThomas 24.11.2022 12:46
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
1
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После добавления или копирования рабочего листа новый рабочий лист будет активным.

Но рассмотрите возможность копирования таблицы 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

Спасибо! Да, я не подумал скопировать лист, а затем переименовать его. Этот код является частью более крупного проекта. Теперь, когда лист создан, как лучше всего сослаться на него в коде?

Alex Band 24.11.2022 12:57

Я изменил подпрограмму на функцию - функция возвращает новый лист - см. последнюю часть кода - она ​​показывает, как ее использовать. Вы даже можете улучшить его, например. передав строку в get_New_sheet

Ike 24.11.2022 13:03

Другие вопросы по теме