Переименование листа в Excel со ссылкой на другой лист, VBA

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

Sheets("TABLAK").Select Sheets.Add Dim ujfulneve As String ujfulneve = Sheets("MENU").Range("B2").Value Sheets(ActiveSheet).Name = ufjulneve 

Он записывает ошибку несоответствия типа для последней строки. Вы можете помочь?

Другие ответы правильны и эффективны, но я хотел добавить небольшое объяснение, что не так с вашим кодом и почему их код – путь. Однострочники часто кажутся таинственными и устрашающими, как если бы они были слишком умны для собственного блага, поэтому понимание их достаточно хорошо, чтобы эффективно использовать их, важно для хорошего кодирования.

Ошибка несоответствия типа связана с тем, что функция Sheets() ожидает String (имя листа), но вы передаете ей ActiveSheet который является объектом Sheet . Поскольку это уже Sheet , вы можете просто использовать его и напрямую изменить его свойство Name :

 ActiveSheet.Name = ufjulneve 

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

 Sheets("TABLAK").Select 

потому что вы не используете этот лист после его выбора. Кроме того, после проскальзывания кода позже, если вы не увидите / не поймете, что Sheets.Add автоматически выбирает вновь созданный лист, вы можете получить неверное впечатление о том, что Sheets("TABLAK") является ActiveSheet поскольку он был просто выбран 4 строки раньше.

Наконец, если вам не нужно ссылаться на значение « Sheets("MENU").Range("B2").Value снова в другом месте, вы также можете удалить его, как это было предложено другими, сохранив дополнительные две строки, оставив

 Worksheets.Add ActiveSheet.Name = Worksheets("MENU").Range("B2").Value 

Поскольку это по-прежнему относится к ActiveSheet , что делает его неустойчивым перед более поздними изменениями (что произойдет позже, если вы ошибочно добавите еще одну строку между этими двумя, которая меняет выбор листа?), ActiveSheet , безусловно, лучший способ:

 Worksheets.Add.Name = Worksheets("MENU").Range("B2").Value 

принимая вызов Socii о максимальном использовании кода, кратчайший код:

 Worksheets.add.Name = Worksheets("MENU").Range("B2").value 

Код можно упростить, используя блок With :

 With Sheets.Add .Name = Sheets("MENU").Range("B2").Value End With 

См. Это сообщение для дальнейшего чтения и еще несколько методов добавления новой рабочей таблицы: как добавить именованный лист в конце всех листов Excel

Interesting Posts

PowerPivot – привязка данных по дате

Все функции в exportedUi работают, за исключением загрузки в Excel 2010

Значение ячейки VBA Excel «не» NULL

Копирование выбранных энтузиастов из листа 1 в два других листа, имеющих как значение, так и формат

Как программно отключить промежуточные итоги в сводной таблице – poi java

Свернуть UserForm, когда макрос в нем запущен

Удаление текста и автозаполнение в VBA

Решение для развертывания и обновления уровня документа VSTO Addin Включая документ

Возможность выбора файла или папки

Включение настраиваемой вкладки ленты в надстройку

Макросправка по электронной почте

на MS Excel VBA. Как использовать значение текущей (не активной) строки в формуле диапазона?

Создание папок и файлов с использованием макроса excel vba и отображения с древовидным представлением и гиперссылками

Заменяйте часть формулы ячейки динамически, используя значение другой ячейки

Excel для SQLite в android

Давайте будем гением компьютера.