点击按钮后VBA运行正常,但最后会抛出错误

时间:2017-06-24 03:03:42

标签: excel-vba vba excel

我有一个复杂的VBA函数,可以进行大量的计算,打开模板并插入数字和图表,所有这些都是完美的格式化。

该功能可表示为:

Function Simular()
    Dim wbout As Workbook
    Set wbout = Workbooks.Open(ThisWorkbook.Path & "\out.xltx")

    ' lots of processing and outputting

    Set Simular = wbout
End Function

电子表格有一个调用Simular()的按钮。

我很震惊,有时候,当所有处理完成后,我会得到着名的对话:

Object doesn't support this property or method

我尝试使用断点进行调试。错误永远不会出现 - 好吧,除非我在F8行上按End Function,这让我感到困惑。

可能出现什么问题?

1 个答案:

答案 0 :(得分:0)

问题是我使用的按钮直接调用Function。这似乎不合适,按钮应该只调用Sub s。

我做了一些测试,从按钮调用Function时的行为似乎有所不同(来自其他"地点")。这是我使用的代码:

Function AsVariantNoSet()
End Function

Function AsVariantSet() ' This represents my original case
    Set AsVariantSet = ThisWorkbook
End Function

Function AsChartNoSet() As Chart
End Function

Function AsChartSetWorkbook() As Chart
    Set AsChartSetWorkbook = ThisWorkbook
End Function

结果如下:

                    From Button     From Code
                    -----------     ---------
AsVariantNoSet()    no error        no error
AsVariantSet()      error A         no error
AsObjectNoSet()     error B         no error
AsObjectSet()       error A         no error
AsObjectSetWrong()  error C         error C

error key:
    A: Object doesn't support this property or method [OK/Help]
    B: System Error &H80070057 (-2147024809). The parameter is incorrect. [OK/Help]
    C: Run-time error '13': Type mismatch [End/Debug/Help]