首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >根据工作表名称添加行

根据工作表名称添加行
EN

Stack Overflow用户
提问于 2020-05-01 13:47:37
回答 2查看 150关注 0票数 1

我现在有点卡在这个问题上了--我有一个变通的办法,但是它的效率非常低,而且编码也非常耗时。

我选择了一组工作表,并希望根据工作表名称为每个工作表添加不同的标题行。

我想有一个包含标题行选择的工作表-请参阅Selection of Header Rows

然后,例如,如果工作表= A00 -在选择工作表的相应标题行中应用副本。

这就是我目前的解决方案--正如您所看到的,它非常低效且耗时

代码语言:javascript
运行
AI代码解释
复制
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

这方面的任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2020-05-01 14:26:24

创建一个名为Index的工作表,并像在图像中所做的那样填充它。

然后,下面的代码将遍历每个选项卡,如果在A列中找到选项卡名,它会将该单元格下面的整行复制到选项卡的第一行。

代码语言:javascript
运行
AI代码解释
复制
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
票数 1
EN

Stack Overflow用户

发布于 2020-05-01 15:31:05

我认为我会通过执行下面列出的步骤来实现这一点,并对您的工作表进行以下假设。

  • 图像中的工作表被命名为“标题行选择”。
  • 图像中的工作表在标题列表之间将有空行,如图所示。
  • 图像中的第一列是A列。
  • 您希望标题从各个工作表的单元格A1中开始。

步骤

  1. 定义图示工作表的范围,我们将在其中搜索每个工作表的名称。
  2. 遍历集合中的每个工作表,在我们的搜索范围中查找其名称。
  3. 如果找到名称,请使用找到名称的范围的CurrentRegion属性定义一个范围。(The current region is a range bounded by any combination of blank rows and blank columns.)
  4. Count该range.
  5. Offset中向下一行的列(以排除工作表名称itself).
  6. Resize该范围为一行“高”且列数相同的列“宽”。
  7. 将目标工作表上的题头范围设置为单元格A1,并调整其大小以使其具有正确的列数。
  8. 将该题头范围的值设置为我们在“选择题头行”工作表上构建的范围的值。

代码语言:javascript
运行
AI代码解释
复制
    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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61543726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档