如何使用 vba 创建 table?

How to create a table using vba?

我正在编写一个简单的代码来从数据库中获取一些关键数据 import/export。我想让它对用户友好,基本上是“单击一下按钮”就可以得到结果。

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

这是哪里(第一行):

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

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

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

我收到错误消息:

"Run-time Error 1004:

The worksheet range for the table data must be on the same sheet as the table beeing created."

有人知道吗?

我的代码的一个改进是,拥有 table 长度变量:一组中的行可能更多,而另一组数据中的行更少。

A​​ctiveX 命令按钮是 Sheet 中的控件,因此您在代码中使用它不会有任何引用问题,但您必须指定它们才能在其他地方使用相同的代码。

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

Dim Ws As Worksheet
Set Ws = ThisWorkbook.Sheets("Sheet_Name")

Ws.ListObjects.Add(xlSrcRange, Ws.Range("A:$BE00"), , xlYes).Name = "New_Table_Name"
Ws.ListObjects("New_Table_Name").TableStyle = "TableStyleLight1"

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

您还必须为源范围指定 sheet,因为在工作sheet 代码模块中,任何对 RangeCells 的非限定引用都等同于Me.RangeMe.Cells 并指代 sheet 上包含代码的范围(即在本例中带有按钮的 sheet):

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