Добавить строку на основе имени листа - PullRequest
1 голос
/ 01 мая 2020

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

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

Я хотел бы иметь рабочий лист, содержащий выбор строк заголовка - см. Выбор строк заголовка

Тогда, например, если рабочие листы = A00 - примените копию в соответствующей строке заголовка из рабочего листа Selection.

Это мое текущее решение - как вы можете видеть, оно очень неэффективно и отнимает много времени.

For Each myWorksheet In Worksheets
    If myWorksheet.Name = "A00" Then
        Sheets("A00").Cells(1).Resize(1, 5).Value = Array("ORGANISATION_ID", "FILE_TYPE", "CREATION_DATE", "CREATION_TIME", "GENERATION_NUMBER")
    End If
    If myWorksheet.Name = "Z99" Then
        Sheets("Z99").Cells(1).Resize(1, 1).Value = Array("RECORD_COUNT")
    End If
    If myWorksheet.Name = "I56" Then
        Sheets("I56").Cells(1).Resize(1, 26).Value = Array("ORGANISATION_SHORT_CODE", "INVOICE_NUMBER", "INVOICE_TYPE_CODE", "BILLING_YEAR", "BILLING_MONTH", "INVOICE_AMOUNT", "INVOICE_VAT_AMOUNT", "INVOICE_GROSS_TOTAL", "PAYMENT_DUE_DATE", "VAT_CHARGED_TO_NWO", "VAT_CHARGED_TO_SHIPPER", "INVOICE_TAX_POINT_DATE", "NWO_VAT_ REGISTRATION_NUMBER", "NWO_BANK_SORT_CODE", "NWO_BANK_ACCOUNT_NUMBER", "NWO_BANK_ACCOUNT_NAME", "ISH_VAT_REGISTRATION_NUMBER", "ISH_BANK_ACCOUNT_NUMBER", "ISH_BANK_SORT_CODE", "NWO_SHORT_CODE", "NWO_VAT_REGISTRATION_NAME", "NWO_ADDRESS_LINE_1", "NWO_ADDRESS_LINE_2", "NWO_ADDRESS_LINE_3", "NWO_ADDRESS_LINE_4", "FILE_NAME")
    End If
    If myWorksheet.Name = "I05" Then
        Sheets("I05").Cells(1).Resize(1, 2).Value = Array("ISC_LINE_1_TEXT", "ISC_LINE_2_TEXT")
    End If
    If myWorksheet.Name = "I57" Then
        Sheets("I57").Cells(1).Resize(1, 8).Value = Array("INVOICE_ITEM_REFERENCE_NUMBER", "INCURRED_DATE", "CHARGE TYPE CODE", "QUANTITY", "UNIT_TYPE", "RATE", "INVOICE_ITEM_AMOUNT", "ANCILLARY_INVOICE_COMMENTS")
    End If
    If myWorksheet.Name = "K12" Then
        Sheets("K12").Cells(1).Resize(1, 4).Value = Array("GAS_ACT_OWNER", "CURRENT_METER_ASSET_MANAGER", "PROSPECTIVE_METER_ASSET_MANAGER", "PROSPECTIVE_MAM_EFFECTIVE_DATE")
    End If
Next myWorksheet

Любая помощь с этим будет высоко ценится.

Ответы [ 2 ]

1 голос
/ 01 мая 2020

Создайте лист с именем Index и заполните его, как вы сделали на изображении.

Затем следующий код будет работать через каждую вкладку, и если имя вкладки будет найдено в столбце A, он скопирует всю строка под этой ячейкой в ​​первой строке вкладки.

For Each myworksheet In Worksheets
    rowfound = Application.Match(myworksheet.Name, Worksheets("Index").Range("A:A"), 0)
    If Not (IsError(rowfound)) Then myworksheet.Range("1:1").Value = Worksheets("index").Cells(rowfound + 1, 1).EntireRow.Value
Next
0 голосов
/ 01 мая 2020

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

  • Рабочий лист в вашем изображении называется «Выбор строк заголовка».
  • Рабочий лист на вашем изображении будет иметь пустые строки между списками заголовков, как показано на рисунке.
  • Первый столбец на вашем изображении - это столбец A.
  • Вы хотите, чтобы заголовки начинались в ячейке A1 отдельных листов.

Шаги

  1. Определите диапазон отображаемого рабочего листа, в котором мы будем искать имя каждого рабочего листа.
  2. L oop по каждому листу в коллекции, находя его имя в нашем диапазоне поиска.
  3. Если имя найдено, определите диапазон с помощью свойства CurrentRegion диапазона, в котором было найдено имя. ( Текущий регион - это диапазон, ограниченный любой комбинацией пустых строк и пустых столбцов. )
  4. Подсчет столбцов в этом диапазоне.
  5. Смещение этого диапазона вниз на одну строку (чтобы исключить само имя листа).
  6. Измените размер этого диапазона так, чтобы он был на одну строку «высоким» и такое же количество столбцов «широким».
  7. Установите диапазон заголовков на целевом листе на быть ячейкой A1 и изменить ее размер, чтобы иметь правильное количество столбцов.
  8. Установите значение этого диапазона заголовка равным значению диапазона, который мы построили на листе «Выбор строк заголовка».

    Dim myWorksheet As Worksheet

    Dim searchRange As Range
    Set searchRange = Worksheets("Selection of Header Rows").Range("A:A")

    Dim foundRange As Range
    Dim headerRange As Range
    For Each myWorksheet In Worksheets

        Set foundRange = searchRange.Find(What:=myWorksheet.Name, LookAt:=xlWhole)

        If Not foundRange Is Nothing Then

            Set headerRange = foundRange.CurrentRegion.Offset(1, 0)

            Dim headerColumnCount As Long
            headerColumnCount = headerRange.Columns.Count

            Set headerRange = headerRange.Resize(1, headerColumnCount)

            myWorksheet.Range("A1").Resize(1, headerColumnCount).value = headerRange.value

        End If

    Next myWorksheet
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...