如何用MS Access VBA将报表字段'dane-skladka'数据源改为skladka_2018
用VBA修改报表字段数据源的解决方案
嘿,这事儿用VBA搞定很简单,我分两种最常见的场景给你写代码,毕竟不同工具里的报表操作逻辑不一样~
针对Microsoft Access报表的情况
这应该是最常见的报表字段修改场景了,直接看代码:
Sub UpdateReportFieldDataSource() Dim rpt As Report Dim ctl As Control ' 先把报表打开到设计视图——只有在设计视图才能修改控件属性哦 DoCmd.OpenReport "你的报表名称", acViewDesign Set rpt = Reports("你的报表名称") ' 遍历报表里的所有控件,找到我们要改的那个 For Each ctl In rpt.Controls ' 确认是目标字段,而且是绑定型文本框(如果是组合框就换成acComboBox) If ctl.Name = "dane-skladka" And ctl.ControlType = acTextBox Then ' 直接修改数据源属性 ctl.ControlSource = "skladka_2018" Exit For ' 找到就撤,不用再循环啦 End If Next ctl ' 保存修改然后关掉设计视图 DoCmd.Close acReport, "你的报表名称", acSaveYes ' 清理对象变量 Set ctl = Nothing Set rpt = Nothing MsgBox "搞定!字段数据源已经换成skladka_2018啦", vbInformation End Sub
划重点:
- 把代码里的
"你的报表名称"换成你实际的报表名字哈。 - 如果你的
dane-skladka不是文本框,是组合框或者其他控件,把acTextBox改成对应的类型(比如组合框是acComboBox)。 - 一定要在设计视图操作,不然改不了属性哦!
如果你是在Excel里操作报表(比如结构化表格/透视表)
要是你的报表是Excel里的,那操作逻辑会有点不同,我也给你写两种常见情况:
情况1:Excel结构化表格里的字段
Sub UpdateExcelTableFieldSource() Dim tbl As ListObject Dim col As ListColumn ' 假设你的表格在Sheet1里,替换成实际的工作表和表格名称 Set tbl = ThisWorkbook.Sheets("Sheet1").ListObjects("你的表格名称") ' 找到目标列 Set col = tbl.ListColumns("dane-skladka") ' 把列的公式指向skladka_2018列(前提是这个列在同一张表里哦) col.DataBodyRange.Formula = "=skladka_2018" MsgBox "Excel表格字段数据源更新完成!", vbInformation End Sub
情况2:Excel透视表字段
如果是透视表的话,得先更新透视缓存,再刷新:
Sub UpdatePivotFieldSource() Dim pvt As PivotTable Dim pvtCache As PivotCache ' 替换成你的透视表所在工作表和透视表名称 Set pvt = ThisWorkbook.Sheets("Sheet1").PivotTables("你的透视表名称") ' 创建新的透视缓存,指向包含skladka_2018的数据源范围 Set pvtCache = ThisWorkbook.PivotCaches.Create( _ SourceType:=xlDatabase, _ SourceData:=Range("A1:Z100").Address(ReferenceStyle:=xlR1C1) ' 换成你的实际数据源范围 ) ' 给透视表换上新缓存,然后刷新 pvt.ChangePivotCache pvtCache pvt.RefreshTable MsgBox "透视表数据源更新完成!", vbInformation End Sub
注意:
- Excel里要确保
skladka_2018是存在的列或者在数据源范围内,不然会报错哦。 - 透视表修改后一定要刷新才能看到变化。
内容的提问来源于stack exchange,提问作者Kapka Ja
相关产品推荐
相关产品推荐

