有没有办法用dynamic数据编程方式使用Excel定义表格区域?

我有一张包含表(由碧玉报告查询产生)的工作表。 这个表格将是我的数据透视表的来源。 透视是使用外部连接(来自Microsoft Query)创build的。 既然源表需要定义之前才能用在Micrososft Query中,任何人都可以告诉我如何以编程的方式做到这一点?

信息:

  1. 这里有两个文件,第一个是受保护的源数据,第二个是Pivot文件。
  2. 数据是dynamic的,表中包含标题。

有没有办法用dynamic数据编程方式使用Excel定义表格区域?

回答你之前回答的两个问题(在我看来,这些答案符合你的需求)。

这里是一个用vba定义命名范围的方法:

Dim Rng1 As Range 'Change the range of cells (A1:B15) to be the range of cells you want to define Set Rng1 = Sheets("Sheet1").Range("A1:B15") ActiveWorkbook.Names.Add Name:="MyRange", RefersTo:=Rng1 

资源

这是一个用vba创build表的方法(记住它只能在Excel 2007或更高版本上运行):

 Sub CreateTable() ActiveSheet.ListObjects.Add(xlSrcRange, Range("$B$1:$D$16"), , xlYes).Name = _ "Table1" 'No go in 2003 ActiveSheet.ListObjects("Table1").TableStyle = "TableStyleLight2" End Sub 

资源

您可以使用dynamic范围名称,该名称会自动扩展到您的数据大小 – 无需VBA

请参阅Debra撰写的http://www.contextures.com/xlpivot01.html#Dynamic

如果使用表(定义),则可以调用表对象示例

 Sub DefineTable() Dim tbl As ListObject Set tbl = Sheets("Plan1").ListObjects(1) tbl.Range.Select End Sub 

否则,使用名称创build一个dynamic范围

= OFFSET(!计划1 A1; 0; 0; COUNTA(计划1答:!A); COUNTA(计划1 1:1))

为此范围select一个名称,并在您的主键中定义一个范围= NameOfInterval

[]的

 Public Function CopyDist() As Variant On Error Resume Next CopyDist = 0 ' RemoveTableStyle Dim oSh As Worksheet Set oSh = ActiveSheet ' Set oSh = 'Sheets("Sheet1") Dim oNewRow As ListRow Dim myfirstrow As Integer Dim mylastrow As Integer Dim myfirstcolumn As Integer Dim myValue As Variant myfirstrow = ActiveCell.Row + 1 mylastrow = ActiveCell.Row + 1 myfirstcolumn = ActiveCell.Column Cells(myfirstrow, myfirstcolumn).Select Cells(myfirstrow, myfirstcolumn).Clear oSh.Range("$A$1:$D$16").Select oSh.ListObjects.Add(xlSrcRange, oSh.Range("$A$1:$D$16"), , xlYes).Name = "Table1" 'No go in 2003 oSh.ListObjects("Table1").TableStyle = "TableStyleLight2" ' CreateTable If oSh.ListObjects.Count > 0 Then myValue =oSh.ListObjects.Count End If RemoveTableStyle CopyDist = 1 End Function 

如果您不知道范围大小,请参考以下方法:首先获取最后一行/列的索引参考。 然后使用索引创build“Table1”

 Dim lngLastColumn as Long Dim lngLastRow as Long Set oxlSheet = oxlWB.Worksheets(1) '''or whichever sheet you need With oXlSheet lngLastColumn = .Cells(1, .Columns.Count).End(xlToLeft).Column lngLastRow = .Cells(.Rows.Count, "A").End(xlUp).Row .ListObjects.Add(xlSrcRange, .Range(.Cells(1, 1), .Cells(lngLastRow, lngLastColumn)), , xlYes).Name = "Table1" End With