我有一个复杂的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
,这让我感到困惑。
可能出现什么问题?
答案 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]