使用Excel动态数据,有没有一种编程方式来定义表格区域?

4
我有一个包含表格的表格,它是从jasper报告查询生成的。这个表格将成为我的数据透视表的来源。透视表使用外部连接(来自Microsoft Query)创建。由于源表必须在Micrososft Query中定义后才能使用,有人能展示一下如何以编程方式完成吗?
INFO:
1. 这里有两个文档,第一个是受保护的源数据,第二个是透视文档。
2. 数据是动态的,表格包含标题。
是否有任何方法可以使用动态数据以编程方式定义表格区域?
4个回答

4

为了回答您之前两个答案中的评论(我认为这些答案符合您的需求)。

下面是使用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创建表格的方法(请记住,这仅适用于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

来源


1

如果您不知道范围大小应该如何处理:首先获取最后一行/列的索引引用。然后使用这些索引来创建“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

1
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

1
如果您使用表格(已定义),则可以调用表格对象示例。
Sub DefineTable()

Dim tbl As ListObject

Set tbl = Sheets("Plan1").ListObjects(1)

tbl.Range.Select

End Sub

否则,可以使用名称创建一个动态范围,例如:
=OFFSET(Plan1!A1;0;0;counta(Plan1!A:A);counta(Plan1!1:1))
为此范围选择一个名称,在您的数据透视表中定义一个范围为=NameOfInterval。
[]'s

我需要为表/区域定义一个名称,如何实现? - indrap

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接