Создание, копирование, перемещение и удаление рабочих листов Excel с помощью кода VBA. Методы Sheets.Add, Worksheet.Copy, Worksheet.Move и Worksheet.Delete.
Создание новых листов
Создание новых рабочих листов осуществляется с помощью метода Sheets.Add.
Синтаксис метода Sheets.Add
expression.Add [Before, After, Count, Type]
где expression — переменная, представляющая собой объект Sheet.
Компоненты метода Sheets.Add
- Before* — необязательный параметр типа данных Variant, указывающий на лист, перед которым будет добавлен новый.
- After* — необязательный параметр типа данных Variant, указывающий на лист, после которого будет добавлен новый.
- Count — необязательный параметр типа данных Variant, указывающий, сколько листов будет добавлено (по умолчанию — 1).
- Type — необязательный параметр типа данных Variant, указывающий тип листа: xlWorksheet** (рабочий лист) или xlChart (диаграмма), по умолчанию — xlWorksheet.
*Если Before и After не указаны, новый лист, по умолчанию, будет добавлен перед активным листом.
**Для создания рабочего листа (xlWorksheet) можно использовать метод Worksheets.Add, который для создания диаграмм уже не подойдет.
Примеры создания листов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
‘Создание рабочего листа: Sheets.Add Worksheets.Add ThisWorkbook.Sheets.Add After:=ActiveSheet, Count:=2 Workbooks(«Книга1.xlsm»).Sheets.Add After:=Лист1 Workbooks(«Книга1.xlsm»).Sheets.Add After:=Worksheets(1) Workbooks(«Книга1.xlsm»).Sheets.Add After:=Worksheets(«Лист1») ‘Создание нового листа с заданным именем: Workbooks(«Книга1.xlsm»).Sheets.Add.Name = «Мой новый лист» ‘Создание диаграммы: Sheets.Add Type:=xlChart ‘Добавление нового листа перед ‘последним листом рабочей книги Sheets.Add Before:=Sheets(Sheets.Count) ‘Добавление нового листа в конец Sheets.Add After:=Sheets(Sheets.Count) |
- Лист1 в After:=Лист1 — это уникальное имя листа, указанное в проводнике редактора VBA без скобок.
- Лист1 в After:=Worksheets(«Лист1») — это имя на ярлыке листа, указанное в проводнике редактора VBA в скобках.
Создаваемый лист можно присвоить объектной переменной:
Dim myList As Object ‘В активной книге Set myList = Worksheets.Add ‘В книге «Книга1.xlsm» Set myList = Workbooks(«Книга1.xlsm»).Worksheets.Add ‘Работаем с переменной myList.Name = «Listok1» myList.Cells(1, 1) = myList.Name ‘Очищаем переменную Set myList = Nothing |
Если создаваемый лист присваивается объектной переменной, он будет помещен перед активным листом. Указать дополнительные параметры невозможно.
Копирование листов
Копирование рабочих листов осуществляется с помощью метода Worksheet.Copy.
Синтаксис метода Worksheet.Copy
expression.Copy [Before, After]
где expression — переменная, представляющая собой объект Worksheet.
Компоненты метода Worksheet.Copy
- Before* — необязательный параметр типа данных Variant, указывающий на лист, перед которым будет добавлена копия.
- After* — необязательный параметр типа данных Variant, указывающий на лист, после которого будет добавлена копия.
*Если Before и After не указаны, Excel создаст новую книгу и поместит копию листа в нее. Если скопированный лист содержит код в проекте VBA (в модуле листа), он тоже будет перенесен в новую книгу.
Примеры копирования листов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
‘В пределах активной книги ‘(уникальные имена листов) Лист1.Copy After:=Лист2 ‘В пределах активной книги ‘(имена листов на ярлычках) Worksheets(«Лист1»).Copy Before:=Worksheets(«Лист2») ‘Вставить копию в конец Лист1.Copy After:=Sheets(Sheets.Count) ‘Из одной книги в другую Workbooks(«Книга1.xlsm»).Worksheets(«Лист1»).Copy _ After:=Workbooks(«Книга2.xlsm»).Worksheets(«Лист1») ‘Один лист активной книги в новую книгу Лист1.Copy ‘Несколько листов активной книги в новую книгу* Sheets(Array(«Лист1», «Лист2», «Лист3»)).Copy ‘Все листы книги с кодом в новую книгу ThisWorkbook.Worksheets.Copy |
* Если при копировании в новую книгу нескольких листов хотя бы один лист содержит умную таблицу — копирование невозможно. Один лист, содержащий умную таблицу, копируется в новую книгу без проблем.
Если рабочие книги указаны как элементы коллекции Workbooks, в том числе ActiveWorkbook и ThisWorkbook, листы нужно указывать как элементы коллекции Worksheets, использование уникальных имен вызовет ошибку.
Перемещение листов
Перемещение рабочих листов осуществляется с помощью метода Worksheet.Move.
Синтаксис метода Worksheet.Move
expression.Move [Before, After]
где expression — переменная, представляющая собой объект Worksheet.
Компоненты метода Worksheet.Move
- Before* — необязательный параметр типа данных Variant, указывающий на лист, перед которым будет размещен перемещаемый лист.
- After* — необязательный параметр типа данных Variant, указывающий на лист, после которого будет размещен перемещаемый лист.
*Если Before и After не указаны, Excel создаст новую книгу и переместит лист в нее.
Примеры перемещения листов
Простые примеры перемещения листов:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
‘В пределах активной книги ‘(уникальные имена листов) Лист1.Move After:=Лист2 ‘В пределах активной книги ‘(имена листов на ярлычках) Worksheets(«Лист1»).Move Before:=Worksheets(«Лист2») ‘Размещение после последнего листа: Лист1.Move After:=Sheets(Sheets.Count) ‘Из одной книги в другую Workbooks(«Книга1.xlsm»).Worksheets(«Лист1»).Move _ After:=Workbooks(«Книга2.xlsm»).Worksheets(«Лист1») ‘В новую книгу Лист1.Move |
Если рабочие книги указаны как элементы коллекции Workbooks, в том числе ActiveWorkbook и ThisWorkbook, листы нужно указывать как элементы коллекции Worksheets, использование уникальных имен вызовет ошибку.
Перемещение листа «Лист4» в позицию перед листом, указанным как по порядковому номеру, так и по имени ярлыка:
Sub Peremeshcheniye() Dim x x = InputBox(«Введите имя или номер листа», «Перемещение листа «Лист4»») If IsNumeric(x) Then x = CLng(x) Sheets(«Лист4»).Move Before:=Sheets(x) End Sub |
Удаление листов
Удаление рабочих листов осуществляется с помощью метода Worksheet.Delete
Синтаксис метода Worksheet.Delete
expression.Delete
где expression — переменная, представляющая собой объект Worksheet.
Примеры удаления листов
‘По уникальному имени Лист1.Delete ‘По имени на ярлычке Worksheets(«Лист1»).Delete ‘По индексу листа Worksheets(1).Delete ‘В другой книге Workbooks(«Книга1.xlsm»).Worksheets(«Лист1»).Delete |
Если рабочие книги указаны как элементы коллекции Workbooks, в том числе ActiveWorkbook и ThisWorkbook, листы нужно указывать как элементы коллекции Worksheets, использование уникальных имен вызовет ошибку.
Как обратиться к рабочему листу, переименовать, скрыть или отобразить его с помощью кода VBA Excel, смотрите в этой статье.
8 ответов
Попробуйте следующее:
Private Sub CreateSheet()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets.Add(After:= _
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
ws.Name = "Tempo"
End Sub
Или используйте предложение With
, чтобы избежать неоднократного вызова вашего объекта
Private Sub CreateSheet()
Dim ws As Worksheet
With ThisWorkbook
Set ws = .Sheets.Add(After:=.Sheets(.Sheets.Count))
ws.Name = "Tempo"
End With
End Sub
Выше может быть дополнительно упрощено, если вам не нужно вызывать на том же рабочем листе в остальной части кода.
Sub CreateSheet()
With ThisWorkbook
.Sheets.Add(After:=.Sheets(.Sheets.Count)).Name = "Temp"
End With
End Sub
L42
20 дек. 2013, в 07:01
Поделиться
Пожалуйста, используйте этот один вкладыш:
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "new_sheet_name"
Amar
03 янв. 2016, в 06:24
Поделиться
Попробуйте следующее:
Public Enum iSide
iBefore
iAfter
End Enum
Private Function addSheet(ByRef inWB As Workbook, ByVal inBeforeOrAfter As iSide, ByRef inNamePrefix As String, ByVal inName As String) As Worksheet
On Error GoTo the_dark
Dim wsSheet As Worksheet
Dim bFoundWS As Boolean
bFoundWS = False
If inNamePrefix <> "" Then
Set wsSheet = findWS(inWB, inNamePrefix, bFoundWS)
End If
If inBeforeOrAfter = iAfter Then
If wsSheet Is Nothing Or bFoundWS = False Then
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = inName
Else
Worksheets.Add(After:=wsSheet).Name = inName
End If
Else
If wsSheet Is Nothing Or bFoundWS = False Then
Worksheets.Add(Before:=Worksheets(1)).Name = inName
Else
Worksheets.Add(Before:=wsSheet).Name = inName
End If
End If
Set addSheet = findWS(inWB, inName, bFoundWS) ' just to confirm it exists and gets it handle
the_light:
Exit Function
the_dark:
MsgBox "addSheet: " & inName & ": " & Err.Description, vbOKOnly, "unexpected error"
Err.Clear
GoTo the_light
End Function
Mr F
07 окт. 2014, в 12:45
Поделиться
ThisWorkbook.Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "XYZ"
(при добавлении листа, в любом случае это будет активный лист)
Saptarshi
14 сен. 2015, в 09:11
Поделиться
Попробуйте использовать:
Worksheets.Add (After:=Worksheets(Worksheets.Count)).Name = "MySheet"
Если вы хотите проверить, существует ли листок с тем же именем, вы можете создать функцию:
Function funcCreateList(argCreateList)
For Each Worksheet In ThisWorkbook.Worksheets
If argCreateList = Worksheet.Name Then
Exit Function ' if found - exit function
End If
Next Worksheet
Worksheets.Add (After:=Worksheets(Worksheets.Count)).Name = argCreateList
End Function
Когда функция будет создана, вы можете вызвать ее из основного Sub, например:
Sub main
funcCreateList "MySheet"
Exit Sub
Ivan Tokarev
23 март 2016, в 10:24
Поделиться
Попробуйте переключить порядок кода. Сначала вы должны создать рабочий лист, чтобы назвать его.
Private Sub CreateSheet()
Dim ws As Worksheet
Set ws = Sheets.Add(After:=Sheets(Sheets.Count))
ws.Name = "Tempo"
End Sub
спасибо,
Developer
15 нояб. 2016, в 19:44
Поделиться
Это даст вам возможность:
- Перезаписать или сохранить вкладку с тем же именем.
- Поместите лист на конец всех вкладок или рядом с текущей вкладкой.
- Выберите свой новый лист или активный.
Call CreateWorksheet("New", False, False, False)
Sub CreateWorksheet(sheetName, preserveOldSheet, isLastSheet, selectActiveSheet)
activeSheetNumber = Sheets(ActiveSheet.Name).Index
If (Evaluate("ISREF('" & sheetName & "'!A1)")) Then 'Does sheet exist?
If (preserveOldSheet) Then
MsgBox ("Can not create sheet " + sheetName + ". This sheet exist.")
Exit Sub
End If
Application.DisplayAlerts = False
Worksheets(sheetName).Delete
End If
If (isLastSheet) Then
Sheets.Add(After:=Sheets(Sheets.Count)).Name = sheetName 'Place sheet at the end.
Else 'Place sheet after the active sheet.
Sheets.Add(After:=Sheets(activeSheetNumber)).Name = sheetName
End If
If (selectActiveSheet) Then
Sheets(activeSheetNumber).Activate
End If
End Sub
moberme
17 окт. 2017, в 22:40
Поделиться
Это быстрое и простое добавление именованной вкладки к текущему листу:
Sheets.Add.Name = "Tempo"
Jan
22 окт. 2015, в 20:37
Поделиться
Ещё вопросы
- 1Объединение списков объектов, содержащих списки объектов в c #
- 1Как читать историю Chrome в Android
- 1Каковы преимущества использования обратных вызовов над строками для инкапсуляции кода в javascript?
- 0Модифицировать динамически добавленные элементы при загрузке с помощью jQuery
- 1Android — Изменение ContentText уведомления по нажатию кнопки
- 0установить библиотеку так, чтобы компилятор c ++ мог получить к ней прямой доступ
- 1Как получить индекс столбца выбранного столбца списка, у которого нет элемента списка?
- 0Контент не помещается в bpopup
- 0Назначить один указатель интерфейса на другой указатель интерфейса в C ++
- 1Java: синглтон из базового класса
- 1Хороший подход к многоэтапной загрузке файлов в Android
- 1ошибка при попытке сделать среднее для фрейма данных PANDA
- 0Как исправить аккордеон в подменю jQuery, используя nextUntil (), а не ()?
- 1Vue.js — функция рандомизации данных (лучшая практика)
- 0Отправка данных $ http.post в PHP — Попытка получить свойство необъекта в
- 0Отправить конкретную строку таблицы в функцию
- 0MySql меньше количества с предложением Group By
- 1С чем связано com.firebase.client.ServerValue.TIMESTAMP?
- 0Как преобразовать элемент ввода ввода в элемент кнопки, используя JavaScript?
- 0Как уменьшить время цикла
- 0Блок прокрутки на космической печати — Chrome
- 0Отображение .jpg и .txt значения файла в модальном всплывающем окне не работает
- 1Получить IP-адрес принтера
- 0Решение UI Router генерирует неожиданный запрос Get в Angular
- 1Невозможно установить изображение и текст в центре по вертикали Android PagerTabStrip Android
- 1Пользовательская фильтрация для пользовательского ArrayAdapter в ListView
- 1Как перевести lucene36 в lucene 40
- 1Проверка MAC представления состояния не удалась с server.transfer
- 1невозможно создать экземпляр класса внутри метода?
- 1Удаление первого слова в строке, начинающейся с цифры, с помощью регулярного выражения
- 1Добавьте активный класс к элементу LI в уже существующем коде JavaScript с помощью onclick
- 0Форматирование данных JSON в PHP
- 1Скрыть линии муниципалитетов на карте, используя d3.js
- 0Сохраните FLOT-диаграмму в файл изображения, используя canvas2image
- 1Android XML DOM Разбор, когда у вас есть пространства имен?
- 0Как сделать разрыв между строками в FlowPanel в Css в Gwt?
- 0Странное поведение с signalR и IE10 и скрипачом
- 1Android динамическое рисование текста / обнаружение касания
- 1Обнаружение частоты на Android — AudioRecord
- 0PHP ассоциативный массив, как читать данные
- 0AssetsManager-поздний завтрак не работает
- 0Бритвенная переменная в селекторе jQuery
- 0вызов функции-члена bind_param () при ошибке, не связанной с объектом [duplicate]
- 0Устройство Ориентация и Кордова
- 0Как использовать SQL для сортировки столбца по первой группе цифр, которая появляется в каждой строке?
- 0Не удается заставить соединитель Python3 — MySQLdb работать в 16.04
- 1Список сортировки, в котором есть объект, содержащий два строковых элемента, которые содержат числа
- 0Как вызвать функцию?
- 1Как вернуть значение из функции, полученной от SP?
- 1Как получить доступ к метаданным подкаста?
I am trying to add an Excel sheet named «Temp» at the end of all existing sheets, but this code is not working:
Private Sub CreateSheet()
Dim ws As Worksheet
ws.Name = "Tempo"
Set ws = Sheets.Add(After:=Sheets(Sheets.Count))
End Sub
Can you please let me know why?
ZygD
21k39 gold badges77 silver badges98 bronze badges
asked Dec 20, 2013 at 6:33
1
Try this:
Private Sub CreateSheet()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets.Add(After:= _
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
ws.Name = "Tempo"
End Sub
Or use a With
clause to avoid repeatedly calling out your object
Private Sub CreateSheet()
Dim ws As Worksheet
With ThisWorkbook
Set ws = .Sheets.Add(After:=.Sheets(.Sheets.Count))
ws.Name = "Tempo"
End With
End Sub
Above can be further simplified if you don’t need to call out on the same worksheet in the rest of the code.
Sub CreateSheet()
With ThisWorkbook
.Sheets.Add(After:=.Sheets(.Sheets.Count)).Name = "Temp"
End With
End Sub
answered Dec 20, 2013 at 6:39
L42L42
19.3k11 gold badges43 silver badges68 bronze badges
5
Kindly use this one liner:
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "new_sheet_name"
answered Jan 3, 2016 at 5:27
AmarAmar
4294 silver badges6 bronze badges
2
ThisWorkbook.Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "XYZ"
(when you add a worksheet, anyway it’ll be the active sheet)
answered Sep 14, 2015 at 7:56
SaptarshiSaptarshi
1252 silver badges3 bronze badges
Try this:
Public Enum iSide
iBefore
iAfter
End Enum
Private Function addSheet(ByRef inWB As Workbook, ByVal inBeforeOrAfter As iSide, ByRef inNamePrefix As String, ByVal inName As String) As Worksheet
On Error GoTo the_dark
Dim wsSheet As Worksheet
Dim bFoundWS As Boolean
bFoundWS = False
If inNamePrefix <> "" Then
Set wsSheet = findWS(inWB, inNamePrefix, bFoundWS)
End If
If inBeforeOrAfter = iAfter Then
If wsSheet Is Nothing Or bFoundWS = False Then
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = inName
Else
Worksheets.Add(After:=wsSheet).Name = inName
End If
Else
If wsSheet Is Nothing Or bFoundWS = False Then
Worksheets.Add(Before:=Worksheets(1)).Name = inName
Else
Worksheets.Add(Before:=wsSheet).Name = inName
End If
End If
Set addSheet = findWS(inWB, inName, bFoundWS) ' just to confirm it exists and gets it handle
the_light:
Exit Function
the_dark:
MsgBox "addSheet: " & inName & ": " & Err.Description, vbOKOnly, "unexpected error"
Err.Clear
GoTo the_light
End Function
JF it
2,4033 gold badges20 silver badges30 bronze badges
answered Oct 7, 2014 at 12:44
Mr FMr F
511 silver badge1 bronze badge
Try to use:
Worksheets.Add (After:=Worksheets(Worksheets.Count)).Name = "MySheet"
If you want to check whether a sheet with the same name already exists, you can create a function:
Function funcCreateList(argCreateList)
For Each Worksheet In ThisWorkbook.Worksheets
If argCreateList = Worksheet.Name Then
Exit Function ' if found - exit function
End If
Next Worksheet
Worksheets.Add (After:=Worksheets(Worksheets.Count)).Name = argCreateList
End Function
When the function is created, you can call it from your main Sub, e.g.:
Sub main
funcCreateList "MySheet"
Exit Sub
answered Mar 23, 2016 at 10:14
Try switching the order of your code. You must create the worksheet first in order to name it.
Private Sub CreateSheet()
Dim ws As Worksheet
Set ws = Sheets.Add(After:=Sheets(Sheets.Count))
ws.Name = "Tempo"
End Sub
thanks,
answered Nov 15, 2016 at 19:04
DeveloperDeveloper
7417 silver badges12 bronze badges
This will give you the option to:
- Overwrite or Preserve a tab that has the same name.
- Place the sheet at End of all tabs or Next to the current tab.
- Select your New sheet or the Active one.
Call CreateWorksheet("New", False, False, False)
Sub CreateWorksheet(sheetName, preserveOldSheet, isLastSheet, selectActiveSheet)
activeSheetNumber = Sheets(ActiveSheet.Name).Index
If (Evaluate("ISREF('" & sheetName & "'!A1)")) Then 'Does sheet exist?
If (preserveOldSheet) Then
MsgBox ("Can not create sheet " + sheetName + ". This sheet exist.")
Exit Sub
End If
Application.DisplayAlerts = False
Worksheets(sheetName).Delete
End If
If (isLastSheet) Then
Sheets.Add(After:=Sheets(Sheets.Count)).Name = sheetName 'Place sheet at the end.
Else 'Place sheet after the active sheet.
Sheets.Add(After:=Sheets(activeSheetNumber)).Name = sheetName
End If
If (selectActiveSheet) Then
Sheets(activeSheetNumber).Activate
End If
End Sub
answered Oct 17, 2017 at 22:19
mobermemoberme
6597 silver badges13 bronze badges
This is a quick and simple add of a named tab to the current worksheet:
Sheets.Add.Name = "Tempo"
answered Oct 22, 2015 at 19:04
JanJan
4113 silver badges9 bronze badges
Содержание
- Добавить лист
- Добавить лист с именем
- Добавить лист до / после другого листа
- Добавить лист в переменную
- Дополнительные примеры добавления листов
В этом руководстве будет рассказано, как добавлять / вставлять листы с помощью VBA.
Добавить лист
Этот простой макрос добавит лист перед ActiveSheet:
123 | Дополнительное добавление ()Таблицы.ДобавитьКонец подписки |
После вставки листа новый лист становится ActiveSheet. Затем вы можете использовать объект ActiveSheet для работы с новым листом (внизу этой статьи мы покажем, как вставить новый лист непосредственно в переменную).
1 | ActiveSheet.Name = «NewSheet» |
Добавить лист с именем
Вы также можете определить имя листа при создании нового листа:
1 | Sheets.Add.Name = «NewSheet» |
Создать новый лист с именем из ячейки
Или используйте значение ячейки, чтобы назвать новый лист:
1 | Sheets.Add.Name = диапазон («a3»). Значение |
Добавить лист до / после другого листа
Вы также можете выбрать место, где будет вставлен новый лист. Вы можете использовать свойства «После» или «До», чтобы вставить лист в определенное место в книге.
Вставить лист после другого листа
Этот код вставит новый лист ПОСЛЕ другого листа:
1 | Sheets.Add After: = Sheets («Ввод») |
Это вставит новый лист ПОСЛЕ другого листа и укажет имя листа:
1 | Sheets.Add (After: = Sheets («Input»)). Name = «NewSheet» |
Обратите внимание на дополнительные круглые скобки, необходимые во втором примере (первый пример выдаст ошибку, если добавить вторую круглую скобку).
или до:
1 | Sheets.Add (Before: = Sheets («Input»)). Name = «NewSheet» |
В этих примерах мы явно назвали Лист, используемый для определения местоположения листа. Часто вместо этого вам нужно использовать индекс листа, чтобы можно было вставить лист в начало или конец книги:
Добавить лист в конец книги
Чтобы добавить лист в конец книги:
1 | Sheets.Add After: = Sheets (Sheets.Count) |
Добавить лист в начало книги:
Чтобы добавить лист в начало книги:
1 | Sheets.Add (Before: = Sheets (1)). Name = «FirstSheet» |
Добавить лист в переменную
Этот код назначает новый лист переменной при создании листа:
12 | Dim ws как рабочий листУстановить ws = Sheets.Add |
Отсюда вы можете ссылаться на новый лист с помощью переменной «ws»:
Дополнительные примеры добавления листов
Создать лист, если его еще нет
Вы можете создать лист, только если он еще не существует.
Создать рабочие листы из списка имен
Следующая процедура будет смотреть на содержимое одного столбца, настраивая рабочие листы Excel в текущей книге с этими именами. Он вызывает другую функцию, чтобы узнать, существует ли уже лист с таким именем, и если да, то лист не создается.
1234567891011121314151617181920212223242526 | Частная подпрограмма CommandButton1_Click ()Вызов CreateWorksheets (Sheets («Sheet2»). Range («A1: a10»))Конец подпискиSub CreateWorksheets (Names_Of_Sheets As Range)Dim No_Of_Sheets_to_be_Added As IntegerТусклое имя листа как строкаDim i как целое числоNo_Of_Sheets_to_be_Added = Names_Of_Sheets.Rows.CountДля i = 1 в No_Of_Sheets_to_be_AddedSheet_Name = Names_Of_Sheets.Cells (i, 1) .Value’Добавляйте лист только в том случае, если его еще нет и имя длиннее нуля символовЕсли (Sheet_Exists (Sheet_Name) = False) And (Sheet_Name «»), тоWorksheets.Add (). Name = Sheet_NameКонец, еслиДалее яКонец подписки |
1234567891011121314 | Функция Sheet_Exists (WorkSheet_Name As String) как логическое значениеТусклый рабочий лист как рабочий листSheet_Exists = ЛожьДля каждой рабочей_таблицы в ThisWorkbook.WorksheetsЕсли Work_sheet.Name = WorkSheet_Name, тоSheet_Exists = ИстинаКонец, еслиСледующийКонечная функция |
Итак, если у нас есть следующий текст в ячейках A1: A30 на листе 2:
Тогда будут созданы следующие листы:
Обратите внимание, что хотя «Собака» появляется дважды, создается только один лист.
Чтобы загрузить файл .XLS для этого руководства, щелкните здесь.
Вы поможете развитию сайта, поделившись страницей с друзьями
Иногда вам нужно создать новый лист и автоматически присвоить ему определенное имя в Excel. В этой статье мы покажем вам два метода добавления нового листа с определенным именем в текущую книгу, а также создание листа с определенным именем в новой книге в Excel.
Автоматическое добавление нового листа с определенным именем в текущую книгу с кодом VBA
Автоматическое добавление нового листа с определенным именем в новую книгу с помощью Kutools for Excel
Автоматическое добавление нового листа с определенным именем в текущую книгу с кодом VBA
Вы можете добавить новый лист с определенным именем в конец текущей книги со следующим кодом VBA.
1. Нажмите другой + F11 клавиши одновременно, чтобы открыть Microsoft Visual Basic для приложений окно.
2. в Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули.
3. Скопируйте и вставьте ниже код VBA в Модули окно.
Код VBA: добавить новый лист с определенным именем в конец текущей книги
Sub CreateSheet()
'Updated by ExtendOffice 20181009
Dim xName As String
Dim xSht As Object
On Error Resume Next
xName = InputBox("Please enter a name for this new sheet ", "Kutools for Excel")
If xName = "" Then Exit Sub
Set xSht = Sheets(xName)
If Not xSht Is Nothing Then
MsgBox "Sheet cannot be created as there is already a worksheet with the same name in this workbook"
Exit Sub
End If
Sheets.Add(, Sheets(Sheets.count)).Name = xName
End Sub
4. Нажмите F5 ключ для запуска кода. В всплывающем Kutools for Excel диалоговом окне введите имя для этого листа, а затем щелкните OK кнопка. Смотрите скриншот:
Затем создается новый рабочий лист с определенным именем, который располагается в конце текущей книги.
Автоматическое добавление нового листа с определенным именем в новую книгу с помощью Kutools for Excel
В этом разделе мы представим Создать рабочие листы последовательностей полезности Kutools for Excel. С помощью этой утилиты вы можете легко добавить новый лист с определенным именем в новую книгу.
1. Для добавления нового листа с определенным именем вам необходимо заранее ввести это имя в ячейку. А затем нажмите Кутулс Плюс > Рабочий лист > Создать рабочие листы последовательностей.
2. в Создать рабочие листы последовательностей диалоговое окно, выберите Пустой рабочий лист в Базовый рабочий лист выпадающий список, выберите Данныев диапазоне вариант и укажите ячейку, содержащую определенное имя рабочего листа, и, наконец, щелкните OK кнопка. Смотрите скриншот:
Затем в новой книге немедленно создается новый лист с этим конкретным именем из ячейки.
Заметки:
1. Если вы хотите создать несколько новых листов с определенными именами одновременно, введите эти имена в ячейки одну за другой, а затем выберите эти ячейки в Данные в диапазоне пунктом.
2. Вы также можете создавать рабочие листы последовательностей из номеров серий или настраиваемого списка с помощью этого Создать рабочие листы последовательностей утилита. Смотрите скриншот:
Если вы хотите получить бесплатную пробную версию (30-день) этой утилиты, пожалуйста, нажмите, чтобы загрузить это, а затем перейдите к применению операции в соответствии с указанными выше шагами.
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Комментарии (5)
Оценок пока нет. Оцените первым!
как в экселе добавить лист в конец книги? |
Я |
13.10.10 — 12:55
в VBA это Sheets.Add After:=ActiveSheet
а в 1С такая запись не прокатывает… только со скобками, типа РабочаяКнига.Sheets.Add()
но так добавляется лист в начало, а мне нужно в конец….
1 — 13.10.10 — 12:57
РабочаяКнига.Sheets.Add(,ActiveShhet)
2 — 13.10.10 — 13:02
ахха… только нету в 1С ActiveSheet
3 — 13.10.10 — 13:02
можно высказывать практические а не теоретические выкладки?
4 — 13.10.10 — 13:10
РабочаяКнига.Sheets.Add(,РабочаяКнига.ActiveShhet)
может быть так есть?
а вообще попробовать поискать инфу сложно:
http://citforum.ru/programming/windows/excel_faq/
http://www.firststeps.ru/vba/excel/vbaexcel1.html
когда заморачивался с загрузкой выгрузкой эксель мне этих ссылок хватило.
5 — 13.10.10 — 13:15
(4) в VBA все работает нужно из 1С выполнять… пока не соображу…
6 — 13.10.10 — 13:19
может у кого-то все же живой коТ есть?
7 — 13.10.10 — 13:22
есть три варианта, Вам какой ?
8 — 13.10.10 — 13:27
(7) рабочий
9 — 13.10.10 — 13:29
нагуглил кучу копипастеных Add ПЕРЕД текущим листом… и немного вопросов как вставить ПОСЛЕ, но без ответов
10 — 13.10.10 — 13:43
(7) ты где? или рабочих вариантов нет?
11 — 13.10.10 — 13:57
ку ку
где коллективный разум?
12 — 13.10.10 — 14:00
старый баян.
без изврата с выполнением скриптов вба — никак
надо добавлять перед последним листом и перемещать его в конец.
13 — 13.10.10 — 14:41
перемещать там тоже только ActiveSheet.Move After:=Sheets(6)
примерно такая схема, в 1Ц не прокатит
14 — 13.10.10 — 14:46
(13) ща пороюсь в старом коде
15 — 13.10.10 — 14:47
Дак сделай макрос в экселе который будет создавать новую страницу и помещать её в конец. И запускай этот макрос из 1С.
16 — 13.10.10 — 14:50
Можно на лету (из 1С) добавлять макросы в эксель.
17 — 13.10.10 — 14:54
(13) Е=СоздатьОбъект(«Excel.Application»);
Е.Workbooks.Open(«…»,0,0,5,Строка(«…»));
Е.Sheets(Е.Sheets.Count).Select();
Е.Sheets.Add();
Е.Sheets(Е.Sheets.Count).Move(Е.Sheets(Е.Sheets.Count-1));
18 — 13.10.10 — 14:55
+(17) то бишь перемещаем последний лист на предпоследнее место
19 — 13.10.10 — 14:55
(13) давно бы уже разобрался и сделал. держи добавление в конец:
обЭксел = Новый ComОбъект(«excel.application»);
НашФайл = обЭксел.Workbooks.Open(СокрЛП(Путь)); //Открываем файл
НашФайл.Sheets(3).Select(); //выбираем третий лист (у меня он был последним) как выбрать самый последний лист через каунт найдешь.
НовыйЛист = НашФайл.Sheets.Add(,НашФайл.ActiveSheet);
НашФайл.Save();
ОбЭксел.WorkBooks.close(); // закрываем файл- экселя
все, добавлен лист в конец. никаких проблем.
код восьмерочный, но думаю в седьмой перевести не проблема.
20 — 13.10.10 — 14:56
(19) проблема. Насколько я помню, проблема в том, что в 77 не работают пустые параметры
21 — 13.10.10 — 14:59
(20) ок.
строку
НовыйЛист = НашФайл.Sheets.Add(,НашФайл.ActiveSheet);
заменить на:
НовыйЛист = НашФайл.Sheets.Add();
один фиг в конц добавит.
22 — 13.10.10 — 15:00
(21) потесть теперь. эксель 2003 добавляет предпоследним
23 — 13.10.10 — 15:07
(21) читай 0
24 — 13.10.10 — 15:09
(17) спс, сейчас проверю
25 — 13.10.10 — 15:10
(23) а что там? тебе в начало чтоли нужно?
26 — 13.10.10 — 15:11
(25) прочитай
27 — 13.10.10 — 15:13
(26)
«но так добавляется лист в начало, а мне нужно в конец….»
что я не так прочитал?
28 — 13.10.10 — 15:14
(27) мне нужно, в конец… а предпоследний, это ПОЧТИ в конец, мне не нужно ПОЧТИ нужно апсолютно
29 — 13.10.10 — 15:17
(28) я что-то написал про почти не конец?
если ты внимательно читаешь ветку, то код что написал я добавляет его в конец, но в восьмерке, мувнуть лист не проблема, хотя если два часа ждать готового решения, то наверное это сложно. сейчас потестю под семеркой отпишу.
30 — 13.10.10 — 15:23
(29) у Add первый параметр — это лист, ПЕРЕД которым добавится лист, по умолчанию перед текущим. В семерку ты не можешь опустить этот параметр, точнее можешь, но вместе со всеми остальными. Поэтому либо ты указываешь лист, перед которым вставить, либо вставляешь перед текущим. Поэтому (21) не отработает как надо
31 — 13.10.10 — 15:32
(30) согласен, в семерке только двигать лист.
32 — 13.10.10 — 15:56
Ексель=СоздатьОбъект(«Excel.Application»);
Ексель.Visible=-1;
Книги=Ексель.WorkBooks;
Книга=Книги.Add();
Листы=Книга.WorkSheets;
Лист=Листы.Add(Листы.Item(Листы.Count));
Листы.Item(Листы.Count).Move(Лист);
Скрипт=СоздатьОбъект(«MSScriptControl.ScriptControl»);
Скрипт.language=»vbscript»;
Скрипт.AddObject(«Листы»,Листы);
Лист=Скрипт.Eval(«[Листы].Add(,[Листы].Item([Листы].Count))»);
есть еще пара вариантов
33 — 13.10.10 — 16:03
(32) без скриптов есть? просто из интереса спрашиваю
34 — 13.10.10 — 16:04
(33) есть, используется Excel4Macro
35 — 13.10.10 — 16:05
только сейчас на вскидку не скажу как, надо справку зырить, вней говорится, что только перед активным на сколько помню, но как то изворачивался
36 — 13.10.10 — 16:06
(29) я два часа немного другим занимался и сейчас занимаюсь, этот вопрос пока отложил… как освобожусь, попробую предпоследний в конец перекидывать
37 — 13.10.10 — 16:07
(34) а это что такое?
38 — 13.10.10 — 16:08
(37) это методы для объекта апликейшн (екселя) выполнения устаревших макрокоманд
39 — 13.10.10 — 16:53
(17) чото они не перемещаются…. команда выполняется, но ни чего не происходит
40 — 13.10.10 — 16:54
(39) а (32)?
41 — 13.10.10 — 17:01
(40) чото (32) пока религия не позволяет… (17) работает… тупанул немного куча файлов открытая… не то не туда снесло
42 — 13.10.10 — 17:36
(41) какая на религия, в (32) два способа добавления, один как в (17) но более правильный
(42) с первым согласен… а вот скрипты это уже религия