【问题标题】:excel vba - adding columns in table based on listexcel vba - 根据列表在表中添加列
【发布时间】:2016-12-05 09:53:20
【问题描述】:

我正在尝试根据从 B3 开始并向下的位置列表将列插入表(“TableTotal”)。该列表的大小将根据位置的数量而有所不同。

我创建工作表、插入表格并使用

重命名表格
Sub RunAllMacros()
CreateSheetsFromAList
CopyTable
CreateSheetsFromAList2
End Sub
 Sub CreateSheetsFromAList()
    Dim MyCell As Range, MyRange As Range

    Set MyRange = Sheets("Summary").Range("B3")
    Set MyRange = Range(MyRange, MyRange.End(xlDown))

    For Each MyCell In MyRange
        Sheets.Add After:=Sheets(Sheets.Count) 'creates a new worksheet
        Sheets(Sheets.Count).Name = MyCell.Value ' renames the new worksheet
    Next MyCell

End Sub

Sub CopyTable()

Dim WS_Count As Integer
Dim i As Integer
WS_Count = ActiveWorkbook.Worksheets.Count

Dim Source As Range

Set Source = ThisWorkbook.Worksheets(2).Range("TableTemp[#All]")

' Begin the loop.
For i = 3 To WS_Count

    ThisWorkbook.Worksheets(i).Select ' just select the sheet
    Source.Copy
    ActiveSheet.Paste
    ActiveSheet.ListObjects(1).Name = "Table" & ActiveSheet.Name

Next i

End Sub
Sub CreateSheetsFromAList2()
    Dim MyCell As Range, MyRange As Range

    Set MyRange = Sheets("Summary").Range("M1")
    Set MyRange = Range(MyRange, MyRange.End(xlDown))

    For Each MyCell In MyRange
        Sheets.Add After:=Sheets(Sheets.Count) 'creates a new worksheet
        Sheets(Sheets.Count).Name = MyCell.Value ' renames the new worksheet
    Next MyCell
End Sub

使用“CreateSheetsFromAList2”创建的最后 2 张工作表需要有表格,用于根据创建的每个初始表格进行“TOTAL”计算。

我有一个模板表,我想将其复制并粘贴到这些工作表中,但我需要插入第一列,这些列依赖于“B3”范围中使用的第一个列表。

我已经通过一个 CountA 来获取要插入的列数,并使用下面的方法将它们放在我的“TableTotal”中的正确位置

Sub Insert_Columns()
    On Error Resume Next
    Columns("M").Resize(, Range("C3").Value).Insert
    On Error GoTo 0
End Sub

这会正确插入正确数量的列,但根据我有多少位置,它们的标题为第 1 列到第 X 列

我正在寻找一种方法,可以直接根据 B3 列表插入具有特定标题名称的列。

此外,这些表列中的每一个都将包含一个公式,该公式将使用相同的 TableName 引用引用在 CreateSheetsFromAList 中创建的表。

【问题讨论】:

    标签: excel vba multiple-columns


    【解决方案1】:

    试试这个子:

    Sub insertColumnsWithHeaders(headers As Range)
    
        Dim i As Integer
        For i = headers.End(xlDown).row To headers.End(xlUp).row Step -1
            columns("M").Insert
            Range("N1") = Cells(i, headers.Cells(1, 1).Column)
        Next
    
    End Sub
    

    标题最多需要 1 列宽。在作为参数传递的范围内指定标题的列 M 之后插入列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多