【问题标题】:How to create a table using vba?如何使用 vba 创建表?
【发布时间】:2017-02-16 21:33:42
【问题描述】:

我正在编写一个简单的代码来从数据库导入/导出中获取一些关键数据。我想让它用户友好,基本上“一键点击”给出结果。

当我编写代码时,我使用 Alt+F11 和“播放”=> 它可以工作。但是当我插入 Active X-Control“CommandButton1_Click”时,宏停止了。

这里是(第一行):

         ActiveSheet.ListObjects.Add(xlSrcRange, Range("A$1:$Be$1500"), , xlYes).Name = _
    "Table1"

Range("Table1[#All]").Select
ActiveSheet.ListObjects("Table1").TableStyle = "TableStyleLight1"

这是与播放按钮完全相同的代码

我收到错误消息:

“运行时错误1004:

表格数据的工作表范围必须与创建的表格位于同一工作表上。"

有人有想法吗?

对我的代码的改进是,让表长度可变:一个集合中的行数可能更多,而另一个数据集中的行数可能更少。

【问题讨论】:

    标签: vba excel named-ranges


    【解决方案1】:

    ActiveX 命令按钮是工作表中的控件,因此在代码中使用它不会有任何参考问题,但您必须指定它们以在其他地方使用相同的代码。

    根据您的需要进行调整,如果还不够,请告诉我:

    Dim Ws As Worksheet
    Set Ws = ThisWorkbook.Sheets("Sheet_Name")
    
    Ws.ListObjects.Add(xlSrcRange, Ws.Range("A$1:$BE$1500"), , xlYes).Name = "New_Table_Name"
    Ws.ListObjects("New_Table_Name").TableStyle = "TableStyleLight1"
    

    只需根据您的需要调整 Sheet_NameNew_Table_Name 即可!

    【讨论】:

    • 谢谢,我认为这与此有关,但不确定语法是否正确。
    【解决方案2】:

    您也必须为源范围指定工作表,因为在工作表代码模块中,对RangeCells 的任何非限定引用都等效于Me.RangeMe.Cells,并引用工作表上的范围包含代码(即在这种情况下打开按钮的工作表):

    With ActiveSheet.ListObjects.Add(xlSrcRange, ActiveSheet.Range("A$1:$Be$1500"), , xlYes)
       .Name = "Table1"
       .TableStyle = "TableStyleLight1"
    End With
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-24
      • 1970-01-01
      • 2021-08-31
      • 2019-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-10
      相关资源
      最近更新 更多