当字段名称是动态的时,vba 制作表格
Posted
技术标签:
【中文标题】当字段名称是动态的时,vba 制作表格【英文标题】:vba to make table when field names are dynamic 【发布时间】:2008-11-19 18:59:16 【问题描述】:我有一个交叉表查询,它使用动态日期函数来生成列标题,从而生成字段名称。例如: ForecastPeriod:DateAdd("m",[Period],[StartDate]) 这意味着每次我运行交叉表查询时,我都会得到不同的字段名称。 我需要获取此交叉表的结果并将其与其他 3 个类似交叉表的结果结合起来制作一个新表。现在我使用生成表查询和 3 个追加查询。我这样做的原因是在预测期间的范围内为每个材料项目包含 4 种不同类别的数据。
结果如下所示:
材料类别 Per1 值 ...Per2 值 ...... Per24 值
MatA 需求 0 ... 10 ....... 0
MatA 需求美元 $0 ... $10 ....... $0
MatA 预测 10 ... 20 ....... 50
MatA 预测美元 $10 ... $20 ....... $50
问题是生成表查询已经针对当前交叉表查询的结果构建。当我下个月运行交叉表时,结果将具有不同的字段名称。所以我被困在手动更改生成表查询设计中的句点,将不再出现在结果中的句点删除并添加新句点。
在交叉表运行之前,有没有一种方法可以在不知道字段名称的情况下使用 VBA 创建新表?
或者有没有办法在运行后对字段名称进行编码或从交叉表中提取它们?
如果我使用如下代码: strSQL = "选择 tblForecast.Material,tblForecast.Category,tblForecast.X" & _ “进入 tblTemp” & _ "来自 tblForecast;"
我真的不知道 tblForecast.X 实际会被调用什么。可能是 11/1/08 或 12/1/08 等。
如果我声明一个变量来保存字段名称并使用日期代码来更改它,我如何将它添加到表中?我会使用 Alter Table 吗?
我确信这是可以做到的,我只是不知道该怎么做,所以任何帮助都将不胜感激!谢谢!
【问题讨论】:
您的问题没有多大意义(至少对我而言),因为您没有提供足够的上下文(改进您的标签)。我猜您正在撰写有关 Windows 上的 Access 的文章。指定(也许更多)可能会带来更多知识渊博的人...... 【参考方案1】:VBA 创建一个查询列的镜像:
Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim qdf As DAO.QueryDef
Dim fld As DAO.Field
Dim SourceField As DAO.Field
Set db = CurrentDb
'Create a new tabledef
Set tdf = New DAO.TableDef
'Reference existing, saved querydef
Set qdf = db.QueryDefs("Query1")
tdf.Name = "Table2"
'iterate fields in the query and create fields in the new tabledef
For Each SourceField In qdf.Fields
Set fld = tdf.CreateField(SourceField.Name, SourceField.Type, SourceField.Size)
tdf.Fields.Append fld
Next
'Table is created and saved when the tabledef is appended to the current db
db.TableDefs.Append tdf
【讨论】:
【参考方案2】:可以为交叉表使用您自己的标题,例如:
ColHead:"Month" & DateDiff("m",[SaleDate],Forms!frmForm!txtSomeDate)
这将导致名为“月份”的列标题和 txtSomeDate 的偏移量。
也可以使用 vba 来构建您的新查询。
【讨论】:
以上是关于当字段名称是动态的时,vba 制作表格的主要内容,如果未能解决你的问题,请参考以下文章