【问题标题】:Wrong number of arguments or invalid property assignment VBA Custom UI Call错误数量的参数或无效的属性分配 VBA 自定义 UI 调用
【发布时间】: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 对象库,所以我认为这不会是问题,不是吗?

http://answers.microsoft.com/en-us/office/forum/office_2007-customize/wrong-number-of-arguments-or-invalid-property/6cb6cf17-f1ab-49b2-8a82-2d67521e3bf5?auth=1

提前感谢您的帮助!

【问题讨论】:

  • 您的 XML 看起来不错。我相信错误在你的GetBudgetTable sub 中,在 VBE 中逐步检查它,看看它发生在哪里。
  • 同意帕特里克:哪一行导致错误?这听起来像是方法调用的问题。看看结尾附近的 ChangePivotCache:DataSource 后面有一个右括号,但没有左括号。尝试删除右括号。
  • @CindyMeister 我将查看 sub 并查看导致错误的原因。左括号在 xlDatabase 之前的行上。
  • 在 Sub 的开头放置一个断点(单击该行并按 F9),然后当 Ribbon 控件调用它时,焦点将跳转到您的代码。然后按 F8 单步执行。然后你应该看到哪一行“打嗝”。

标签: excel vba


【解决方案1】:

我想通了。因此,我打开的工作簿是我用来测试宏的工作簿,然后再将它们添加到加载项。其中一个测试宏是 GetBudgetTable 宏的旧版本,它是当我单击加载项按钮“预算”时调用的宏的名称。测试宏没有“Control as IRibbonControl”参数,所以我认为当我单击加载项按钮时会发生什么是 Excel 首先在工作簿的 VBA 模块中查找宏,如果在那里找不到它它进入加载项。

这是有道理的,因为在 XML 代码中,我只引用“GetBudgetTable”。它没有说明该宏的文件路径或任何其他将其与同名的测试宏区分开来的信息。

我发现这一点是因为我打开了一个空白工作簿,创建了必要的对象以使宏运行,单击预算按钮,它工作正常 - 因为空白工作簿中没有其他 GetBudgetTable 宏。

希望没有过多浪费大家的时间,不过还是很感谢大家的建议!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-27
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多