VBA Создание листов, обработка ошибок. Создать лист vba excel
VBA Создание листов, обработка ошибок
Я использую приведенный ниже код, чтобы скопировать скрытый рабочий лист и скопировать его, переименовать и заполнить определенные поля на двух листах.
Я сделал это так, так как мне нужно скопировать макет и форматирование скрытого листа.
Проблема, с которой я столкнулся, заключается в том, что когда я нажимаю кнопку «Создать», если лист уже выходит, он полностью сбой Excel, я попытался добавить обработку ошибок, но все, что я пытался проверить, существует ли лист, t работает и по-прежнему выдает Excel.
Отделили код, который не скрывает лист шаблона, копирует его, переименовывает новый лист и затем скрывает шаблон.
Что бы я хотел сделать, это проверить введенное имя листа из TextBox5, и проверить, существует ли лист, если он отображает окно с сообщением, если лист уже существует, если лист не существует, они несут с кодом как обычно.
Если вы действительно цените всю помощь и поддержку, которые я уже получил, и благодарим всех вас за помощь, которую вы можете предоставить.
vba - создать макрос, который преобразует строки excel из одного листа в новые листы
Мне нужно создать макрос, который преобразует строки excel из одного листа в новые листы.
У меня есть 3 строки заголовков, за которыми следуют множество строк данных.
Я хотел бы поместить каждую строку на этом листе "Dept" в новые листы (за исключением строк заголовка). На каждом новом созданном листе я хотел бы, чтобы верхние 3 строки (заголовки) повторялись и форматировали скопированные (если возможно), а затем одну соответствующую строку из листа "Департамент". Мне также хотелось бы, чтобы новые листы назывались значением, введенным в колонке А (например, потолочные огни или настенные светильники из приведенного ниже примера).
У меня нет опыта работы с макросами, поэтому у меня возникают проблемы с получением кода из предыдущих ответов и попыткой применить его к моей причине. Спасибо за помощь!
A B C D-
шаблон шаблона//promos//quicklinks//главный баннер
-
где найдено //content slot//category//attributes
-
blank//контент-ресурс//html//изображение героя
-
Потолочные светильники//значение//значение//значение
-
Настенные светильники//значение//значение//значение
-
Floor Lights//value//value//value
Преобразован на новые листы в одной книге, которые имеют одну строку после трех строк заголовка:
новый лист с именем: потолочные светильники
A B C D-
шаблон шаблона//promos//quicklinks//главный баннер
-
где найдено //content slot//category//attributes
-
blank//контент-ресурс//html//изображение героя
-
Потолочные светильники//значение//значение//значение
новый лист с именем: Wall Lights
A B C D-
шаблон шаблона//promos//quicklinks//главный баннер
-
где найдено //content slot//category//attributes
-
blank//контент-ресурс//html//изображение героя
-
Настенные светильники//значение//значение//значение
Вот код, который у меня есть до сих пор...
Sub Addsheets() Dim cell As Range Dim b As String Dim e As String Dim s As Integer Sheets("Dept").Select a = "a4" e = Range(a).End(xlDown).Address 'get address of the last used cell 'loops through cells,creating new sheets and renaming them based on the cell value For Each cell In Range(a, e) s = Sheets.Count Sheets.Add After:=Sheets(s) Sheets(s + 1).Name = cell.Value Next cell Application.CutCopyMode = True Dim Counter As Long, i As Long Counter = Sheets.Count For i = 1 To Counter Sheets("Dept").Cells(1, 3).EntireRow.Copy Sheets(i).Cells(1, 3).PasteSpecial Next i Application.CutCopyMode = False End SubНе знаете, как исправить? Кроме того, существует ли способ сохранить форматирование заголовка (ширины столбцов)?
qaru.site
vba - Excel Macro для создания листов
Вместо этого я рекомендовал бы использовать сводную таблицу, в зависимости от того, чего вы пытаетесь достичь. Если вам нужно сделать вышеописанное, я попытаюсь выполнить следующие шаги, я оставлю вам код, Я привел несколько функций ниже, чтобы помочь.
- Выберите все использованные ячейки в в качестве диапазона.
- Прокрутите диапазон и для каждой ячейки проверьте, существует ли лист с именем, соответствующим значению ячейки.
- Если лист не существует, вы можете его создать, а затем использовать ссылочный стиль R1C1, чтобы получить значение из столбца B и вставить это во вновь созданный лист. Готовьте, что вновь созданный лист становится активным листом.
- Если лист существует, вы можете выбрать рабочий лист и сделать то же, что и в 3, убедившись, что вы вставляете его в следующую доступную ячейку ниже любого уже сделанного.
Я рекомендую использовать макросъемку для разработки способа копирования и вставки и т.д.
Вот пример добавления и удаления рабочей страницы:
Dim sheetname 'not tested this, something similar to get the value, obviously you will need to loop through checking this sheet name sheetname = Range("A:A").Cells(1,1).Value If SheetExists(sheetname, ThisWorkbook.Name) Then 'turn off alert to user before auto deleting a sheet so the function is not interrupted Application.DisplayAlerts = False ThisWorkbook.Worksheets(sheetname).Delete Application.DisplayAlerts = True End If 'Activating ThisWorkbook in case it is not ThisWorkbook.Activate Application.Sheets.Add 'added sheet becomes the active sheet, give the new sheet a name ActiveSheet.Name = sheetnameВот функция sheetexists, которая также использует функцию WorkbookIsOpen, показанную ниже. Это можно использовать, чтобы помочь вам увидеть, существует ли лист, который вы хотите создать, или нет.
Я бы рекомендовал присвоить значения в диапазоне A имя так, чтобы вы могли более легко перебирать их, чтобы вы могли делать такие вещи:
For Each Cell In Range("ListOfNames") ... NextЕсли вы не можете этого сделать, вам понадобится функция для проверки столбца A для используемого диапазона. как этот:
Function GetUsedRange(wbName As String, Optional wsName As Variant, Optional argFirstRow As Variant, Optional argLastCol As Variant) As Range 'this function uses the find method rather than the usedrange property because it is more reliable 'I have also added optional params for getting a more specific range Dim lastRow As Long Dim firstRow As Long Dim lastCol As Integer Dim firstCol As Integer Dim ws As Worksheet If Not IsMissing(wsName) Then If SheetExists(wsName, wbName) Then Set ws = Workbooks(wbName).Worksheets(wsName) Else Set ws = Workbooks(wbName).ActiveSheet End If Else Set ws = Workbooks(wbName).ActiveSheet End If If IsMissing(argFirstRow) Then ' Find the FIRST real row firstRow = ws.Cells.Find(What:="*", SearchDirection:=xlNext, SearchOrder:=xlByRows).Row Else firstRow = argFirstRow End If ' Find the FIRST real column firstCol = ws.Cells.Find(What:="*", SearchDirection:=xlNext, SearchOrder:=xlByColumns).Column ' Find the LAST real row lastRow = ws.Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row If IsMissing(argLastCol) Then ' Find the LAST real column lastCol = ws.Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByColumns).Column Else lastCol = argLastCol End If 'return the ACTUAL Used Range as identified by the variables above Set GetUsedRange = ws.Range(ws.Cells(firstRow, firstCol), ws.Cells(lastRow, lastCol)) End Function