【问题标题】:Create new sheet and create table within创建新工作表并在其中创建表格
【发布时间】:2015-01-31 04:58:25
【问题描述】:

我想创建新工作表、命名新工作表、向工作表添加列,然后在每个新电子表格中制​​作一个表格,所有这些都在一个以一张工作表开头的工作簿中。我的代码不起作用,但要看看到目前为止我在哪里:

Sub Create_Sheets()

Sheets.Add.Name = "VA_NAME"
Sheets.Add.Name = "VA_VALUE"
Sheets.Add.Name = "CE_NAME"
Sheets.Add.Name = "CE_VALUE"

Dim Table As ListObject
Set Table = Sheet1.ListObjects("VA_NAME")

Table.ListColumns.Add 1
Table.HeaderRowRange(1) = "SOURCE_SEQ_NBR"
Table.ListColumns.Add 2
Table.HeaderRowRange(2) = "L1_PARCEL_NBR"
Table.ListColumns.Add 3
Table.HeaderRowRange(3) = "L1_ATTR_TEMP_NAME"
Table.ListColumns.Add 4
Table.HeaderRowRange(4) = "L1_ATTR_NAME"
Table.ListColumns.Add 5
Table.HeaderRowRange(5) = "L1_ATTR_VALUE"

Set Table = Sheet1.ListObjects("VA_VALUE")
Table.ListColumns.Add 1
Table.HeaderRowRange(1) = "SOURCE_SEQ_NBR"
Table.ListColumns.Add 2
Table.HeaderRowRange(2) = "L1_PARCEL_NBR"
Table.ListColumns.Add 3
Table.HeaderRowRange(3) = "L1_ATTR_TEMP_NAME"
Table.ListColumns.Add 4
Table.HeaderRowRange(4) = "L1_ATTR_NAME"
Table.ListColumns.Add 5
Table.HeaderRowRange(5) = "L1_ATTR_VALUE"

Set Table = Sheet1.ListObjects("CE_NAME")
Table.ListColumns.Add 1
Table.HeaderRowRange(1) = "SOURCE_SEQ_NBR"
Table.ListColumns.Add 2
Table.HeaderRowRange(2) = "L1_PARCEL_NBR"
Table.ListColumns.Add 3
Table.HeaderRowRange(3) = "L1_ATTR_TEMP_NAME"
Table.ListColumns.Add 4
Table.HeaderRowRange(4) = "L1_ATTR_NAME"
Table.ListColumns.Add 5
Table.HeaderRowRange(5) = "L1_ATTR_VALUE"

Set Table = Sheet1.ListObjects("CE_VALUE")
Table.ListColumns.Add 1
Table.HeaderRowRange(1) = "SOURCE_SEQ_NBR"
Table.ListColumns.Add 2
Table.HeaderRowRange(2) = "L1_PARCEL_NBR"
Table.ListColumns.Add 3
Table.HeaderRowRange(3) = "L1_ATTR_TEMP_NAME"
Table.ListColumns.Add 4
Table.HeaderRowRange(4) = "L1_ATTR_NAME"
Table.ListColumns.Add 5
Table.HeaderRowRange(5) = "L1_ATTR_VALUE"

Columns.AutoFit

我希望代码识别工作表名称(即“VA_NAME”)而不是“Sheet2,Sheet3”等。我知道 "Set Table = Sheet1.ListObjects("VA_NAME")" 很可能是我的问题,因为这依赖于 "Sheet(X)" 约定,但是执行 Sheets("VA_NAME").ListObjects 不起作用。是否有快速解决此问题的方法,还是我要求违反 VBA 的规则?

谢谢大家!

更新:我发现我发布的代码假定表已经存在,但事实并非如此。我添加了新代码来创建实际表,但没有命名列:

Sheet2.ListObjects.Add(xlSrcRange, Range("$A$1"), , xlNo).Name = "VA_NAME"
Sheet3.ListObjects.Add(xlSrcRange, Range("$A$1"), , xlNo).Name = "VA_VALUE"
Sheet4.ListObjects.Add(xlSrcRange, Range("$A$1"), , xlNo).Name = "CE_NAME"
Sheet5.ListObjects.Add(xlSrcRange, Range("$A$1"), , xlNo).Name = "CE_VALUE"

我的操作顺序应该是 Create Named Sheets --> Create Named Columns --> Create Tables from Columns。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    虽然我怀疑这是使用命名表和列创建命名表的最直观方法,但我就是这样做的(我仍然非常愿意接受建议):

    Sub Create_Sheets()
    
    Sheets.Add.Name = "VA_NAME"
    Sheets.Add.Name = "VA_VALUE"
    Sheets.Add.Name = "CE_NAME"
    Sheets.Add.Name = "CE_VALUE"
    

    结束子

    子 Create_PARCEL_ATTR_Tables()

    Sheets("VA_NAME").Select
    Sheet2.ListObjects.Add(xlSrcRange, Range("$A$1:$E$1"), , xlNo).Name = "VA_NAME"
    Sheets("VA_VALUE").Select
    Sheet3.ListObjects.Add(xlSrcRange, Range("$A$1:$E$1"), , xlNo).Name = "VA_VALUE"
    Sheets("CE_NAME").Select
    Sheet4.ListObjects.Add(xlSrcRange, Range("$A$1:$E$1"), , xlNo).Name = "CE_NAME"
    Sheets("CE_VALUE").Select
    Sheet5.ListObjects.Add(xlSrcRange, Range("$A$1:$E$1"), , xlNo).Name = "CE_VALUE"
    

    结束子

    子 Create_PARCEL_ATTR_COLUMNS()

    Sheets("VA_NAME").Range("A1").Value = "SOURCE_SEQ_NBR"
    Sheets("VA_NAME").Range("B1").Value = "L1_PARCEL_NBR"
    Sheets("VA_NAME").Range("C1").Value = "L1_ATTRIB_TEMP_NAME"
    Sheets("VA_NAME").Range("D1").Value = "L1_ATTRIB_NAME"
    Sheets("VA_NAME").Range("E1").Value = "L1_ATTRIB_VALUE"
    Sheets("VA_NAME").Columns.AutoFit
    
    Sheets("VA_VALUE").Range("A1").Value = "SOURCE_SEQ_NBR"
    Sheets("VA_VALUE").Range("B1").Value = "L1_PARCEL_NBR"
    Sheets("VA_VALUE").Range("C1").Value = "L1_ATTRIB_TEMP_NAME"
    Sheets("VA_VALUE").Range("D1").Value = "L1_ATTRIB_NAME"
    Sheets("VA_VALUE").Range("E1").Value = "L1_ATTRIB_VALUE"
    Sheets("VA_VALUE").Columns.AutoFit
    
    Sheets("CE_NAME").Range("A1").Value = "SOURCE_SEQ_NBR"
    Sheets("CE_NAME").Range("B1").Value = "L1_PARCEL_NBR"
    Sheets("CE_NAME").Range("C1").Value = "L1_ATTRIB_TEMP_NAME"
    Sheets("CE_NAME").Range("D1").Value = "L1_ATTRIB_NAME"
    Sheets("CE_NAME").Range("E1").Value = "L1_ATTRIB_VALUE"
    Sheets("CE_NAME").Columns.AutoFit
    
    Sheets("CE_VALUE").Range("A1").Value = "SOURCE_SEQ_NBR"
    Sheets("CE_VALUE").Range("B1").Value = "L1_PARCEL_NBR"
    Sheets("CE_VALUE").Range("C1").Value = "L1_ATTRIB_TEMP_NAME"
    Sheets("CE_VALUE").Range("D1").Value = "L1_ATTRIB_NAME"
    Sheets("CE_VALUE").Range("E1").Value = "L1_ATTRIB_VALUE"
    Sheets("CE_VALUE").Columns.AutoFit
    

    谢谢大家!

    【讨论】:

      【解决方案2】:

      如果上面的代码有效,这将缩短它并使其不那么繁琐。

      Sub Create_PARCEL_Stuff()
      
      Sheets.Add.Name = "VA_NAME"
      Sheets.Add.Name = "VA_VALUE"
      Sheets.Add.Name = "CE_NAME"
      Sheets.Add.Name = "CE_VALUE"
          Dim ws As Worksheet
          For Each ws In ActiveWorkbook.Worksheets
              If ws.Name = "NAME OF YOUR SHEET WITH DATA" Then
                  'Do Nothing
              Else
                  ws.ListObjects.Add(xlSrcRange, Sheets("Name of source sheet").Range("$A$1:$E$1"), , xlNo).Name = ws.Name
                  ws.Range("A1").Value = "SOURCE_SEQ_NBR"
                  ws.Range("B1").Value = "L1_PARCEL_NBR"
                  ws.Range("C1").Value = "L1_ATTRIB_TEMP_NAME"
                  ws.Range("D1").Value = "L1_ATTRIB_NAME"
                  ws.Range("E1").Value = "L1_ATTRIB_VALUE"
                  ws.Columns.AutoFit
              End If
          Next ws
      End Sub
      

      【讨论】:

      • 感谢您的建议!您给定的代码为“CE_VALUE”创建列和表,但不会更进一步,引用“表数据的工作表范围必须与正在创建的表在同一张表上”。这是因为代码中没有更改活动工作表吗?
      • 现在的效果比上次修复之前要少。当我在一张空白纸上尝试此操作并替换“您的表格名称与数据”和“源表格名称”时,它仍然在“CE_VALUE”之后停止。我应该早先指出,现有工作表的内容与此无关,工作表的唯一意义是它使用了名称 Sheet1。
      • 您要添加的表格的来源是什么? ListObjects.Add 的第二部分供您参考。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-08
      • 1970-01-01
      • 1970-01-01
      • 2016-08-20
      • 1970-01-01
      相关资源
      最近更新 更多