【发布时间】:2022-10-15 03:14:41
【问题描述】:
(来自 Reddit 的交叉发布)我正在尝试使用 VBA 将数据链接自动化到访问查询。不幸的是,查询是查询的查询,所以我不能像往常一样用一个很好的描述性 SQL 语句代替源:/我记录了一个链接不同查询的宏,看看它会是什么样子,然后清理源代码并更改命令文本以引用我想要的查询,但我一直在隐喻地砸键盘试图了解如何添加参数。我需要的只是约会。我已经用谷歌搜索了 2 天,语法让我很困惑。
这就是我得到的,我最近的尝试被注释掉了,文件路径被括号替换了
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array( _
"OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Data Source=[]"), _
Destination:=Range("$A$1")).QueryTable
.CommandType = xlCmdTable
.CommandText = Array("PeramIndvCallScore")
'.Parameters(1).SetParam xlConstant, "8/1/2022"
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.SourceDataFile = []
.Refresh BackgroundQuery:=False
End With
我最终会在“查询未运行”、“应用程序/对象定义的错误”、“对象不支持此属性或方法”之间出现不同的运行时错误,(当我从参数)
理想情况下,我希望能够对参数使用单元格范围,以便建立动态数据链接。
有谁知道我是否可以像数据链接一样将 ADO 记录集设置为自动刷新?另外,这里的所有属性都是必需的,还是我可以省略其中的一些? (在那,如果我没有指定,他们是否有默认设置?)
这是SQL:
PeramIndvCallScore:
SELECT CallDetails.CallDate, IIf(([CallTypes].[ID]=1) Or ([calltypes].[ID]=4) Or ([calltypes].[ID]=6),'CSB/VES/Govt',[CallTypes].[Type]) AS CallType, CalculatedScores.TotalScore
FROM CallTypes INNER JOIN (CalculatedScores INNER JOIN CallDetails ON CalculatedScores.KeyID = CallDetails.KeyID) ON CallTypes.ID = CallDetails.CallType
WHERE (((CallDetails.CallDate)=[Date]) AND ((IIf(([CallTypes].[ID]=1) Or ([calltypes].[ID]=4) Or ([calltypes].[ID]=6),'CSB/VES/Govt',[CallTypes].[Type]))='CSB/VES/Govt') AND ((CallDetails.Spanish)=False) AND ((CallDetails.Omit)=False))
UNION ALL SELECT CallDetails.CallDate, IIf(([Calldetails].[Spanish]),'Spanish','') AS CallType, CalculatedScores.TotalScore
FROM CalculatedScores INNER JOIN CallDetails ON CalculatedScores.KeyID = CallDetails.KeyID
WHERE (((CallDetails.CallDate)=[Date]) AND ((IIf(([Calldetails].[Spanish]),'Spanish',''))="CSB/VES/Govt") AND ((CallDetails.Spanish)=True) AND ((CallDetails.Omit)=False));
而且我刚刚再看一眼,发现有一个地方我可以在 SQL 中输入日期作为变量。无论如何,我将需要知道如何为这个项目的其他部分添加参数到 QueryTable 中。任何帮助表示赞赏:)
【问题讨论】:
-
PeramIndvCallScore是什么?如果 Access 查询可以显示底层 SQL 以及如何使用在日期上听起来像WHERE子句的参数?这个日期是如何确定的? -
确保限定所有
Range对象,因为上下文可能会根据活动状态而变化。见How to avoid using Select in Excel VBA。 -
@Parfait 我编辑了帖子以包含来自 Access 的 SQL。在这种情况下,范围只是一个空单元格,用作目标
标签: excel vba ms-access listobject