【发布时间】:2016-02-19 21:29:28
【问题描述】:
我将以下 XML 代码添加到加载项文件中。选项卡和按钮在功能区上显示得很好,但是当我单击预算按钮时,它会给我错误消息“参数数量错误或属性分配无效”。我读过我需要在我正在调用的子的参数中添加“控制作为 iribboncontrol”,我已经完成了,但我仍然得到同样的错误。但是,当我打开 VBE 并手动运行 sub 时,它工作得很好。有谁知道问题出在哪里?
这里是 XML。同样,我只是想点击第一个按钮,“预算”。
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="customTab" label="CFA Reporting">
<group id="customGroup" label="Query">
<button id="customButton1" label="Budget" imageMso="FrameCreateAbove" size="large" onAction="GetBudgetTable" />
<button id="customButton2" label="Actuals" imageMso="FrameCreateBelow" size="large" onAction="GetActualsTable" />
<button id="customButton3" label="Budget + Actuals" imageMso="FrameCreateRight" size="large" onAction="GetBudgetandActualsTable" />
<button id="customButton4" label="Actual Drilldown" imageMso="ZoomPrintPreviewExcel" size="large" onAction="ActualDrilldown" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
这是我要呼叫的潜艇。
Sub GetBudgetTable(control As IRibbonControl)
Dim dbFilePath As String
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim cell As Range
Dim Year As String
Dim SQL As String
'For Each cell In Range("A1:A100")
'If InStr(1, cell.Name, "SQL", vbTextCompare) > 0 Then
Year = ActiveWorkbook.Sheets("Report").Range("Year").Value
SQL = ActiveWorkbook.Sheets("Report").Range("BudgetSQL").Value
'pulls budget
dbFilePath = "H:\CORP\CFR-2011_to_Current\Budget\2015\Budget Variance\Budget Variance - Pivot\Test\More Tests\Administrative\Database\" & Year & " Budget.accdb"
Set db = Access.DBEngine.OpenDatabase(dbFilePath, False, True)
Set rs = db.OpenRecordset(SQL)
ActiveWorkbook.Sheets("Budget Table").Range("A2:AJ80000").ClearContents
ActiveWorkbook.Sheets("Budget Table").Range("A2").CopyFromRecordset rs
db.Close
'updates pivot table data source and refreshes pivot table
DataSource = "Budget Table!R1C1:R" & ActiveWorkbook.Sheets("Budget Table").Range("A1").CurrentRegion.Rows.Count & "C" & _
ActiveWorkbook.Sheets("Budget Table").Range("A1").CurrentRegion.Columns.Count
ActiveWorkbook.Sheets("Report").PivotTables("Pivot").ChangePivotCache ActiveWorkbook.PivotCaches.Create(xlDatabase, _
DataSource)
ActiveWorkbook.Sheets("Report").PivotTables("Pivot").RefreshTable
End Sub
我还在下面的链接中看到我需要参考 Microsoft Office 12.0 对象库。我有 Excel 2010 并引用了 Microsoft Office 14.0 对象库,所以我认为这不会是问题,不是吗?
提前感谢您的帮助!
【问题讨论】:
-
您的 XML 看起来不错。我相信错误在你的
GetBudgetTablesub 中,在 VBE 中逐步检查它,看看它发生在哪里。 -
同意帕特里克:哪一行导致错误?这听起来像是方法调用的问题。看看结尾附近的 ChangePivotCache:DataSource 后面有一个右括号,但没有左括号。尝试删除右括号。
-
@CindyMeister 我将查看 sub 并查看导致错误的原因。左括号在 xlDatabase 之前的行上。
-
在 Sub 的开头放置一个断点(单击该行并按 F9),然后当 Ribbon 控件调用它时,焦点将跳转到您的代码。然后按 F8 单步执行。然后你应该看到哪一行“打嗝”。