无法获取WorksheetFunction的MMult属性。

4

大家好,我遇到了一个奇怪的问题,请帮忙。

错误信息如下:

运行时错误 '1004'

无法获取 WorksheetFunction 类的 MMult 属性

1、我使用一个名为 "schedule" 的程序每天自动运行我的 VBA 程序,但是每天 VBA 程序都会失败,但是当我控制我的 "schedule" 程序再次尝试自动运行它以重现这个错误时,我却无法得到这个错误,它会顺利运行。

2、当出现此错误时,Excel 将显示[end] [debug] 窗口,我点击[debug]并按[F5]键,然后它就可以正常运行;如果 MMult 的参数不正确,则它应该再次显示错误。

3、我编写了一个子程序来转储我在 mmult 中使用的数据,无论是在出现错误还是没有出现错误时,它们都是相同的。

因此,我可以假设 mmult 的两个参数是正确的,但为什么我每天都会收到错误消息呢?

最困难的是很难重现这个错误。

代码:

Public Function Regression(ByVal X As Variant, ByVal y As Variant)
    writelog ("Regression")
    writelog ("dump x")
    Call dumpRange(X, 2)
    writelog ("dump y")
    Call dumpRange(y, 1)
    
    Dim xtrans, temp, temp2, b
    xtrans = Application.WorksheetFunction.Transpose(X)
    temp = Application.WorksheetFunction.MMult(xtrans, X)     ' occour error on this line
    temp = Application.WorksheetFunction.MInverse(temp)
    temp2 = Application.WorksheetFunction.MMult(xtrans, y)
    b = Application.WorksheetFunction.MMult(temp, temp2)
    Regression = b
End Function

X 是一个类似于这样的范围。
1  0.34343323
1  1.32323323
1  1.21111221
1  0.33444232
.  ...... 

Windows 7 Home Premium 64位操作系统

Office 2010专业版64位/32位SP1


1
你能粘贴调试器突出显示的代码行吗? - Russell Saari
我不确定你在说什么。请问具体的错误是什么(包括错误编号和提示信息)? - Fionnuala
在你点击调试后,它应该用黄色突出显示问题所在的行。 - Russell Saari
调试器突出显示了这一行:temp = Application.WorkSheetFunction.MMult(xtrans, X)。 - user1102715
这是一个好建议,我会尝试看看它是否有效。 - user1102715
显示剩余3条评论
3个回答

0

我已重新安装了操作系统和办公软件,现在它可以正常工作。


0

试试这个。我认为这就是你出错的地方。

temp = Application.WorksheetFunction.MMult(xtrans,
Application.Transpose(X))

我在进行MMult之前进行了Transpose()操作。正如我所说,这个错误并不是每次都会发生,当我再次使用相同的数据运行它时,就没有问题了。 - user1102715
我会删除那行或注释掉那些行,并用这个替换它们,应该可以正常工作。 - Russell Saari
正如我所说,该错误并非每次都会发生,当我尝试使用完全相同的数据再次运行它时,那里就没有问题。 - user1102715
他们遇到了与你一样的错误,并且也使用了这种方法。http://www.excelforum.com/excel-programming/537441-solved-mmult-and-minv.html 很抱歉我无法提供更多帮助。 - Russell Saari
非常感谢,我在谷歌上搜索了这个问题,并且在发布之前已经看到了这个网址。 - user1102715
我已经重新安装了操作系统和办公软件,现在一切都正常了。谢谢。 - user1102715

0

我曾经遇到过同样的问题。但是后来发现是因为我的尺寸设置有问题。

我做了以下操作:

Redim Y(obs)
Redim X(obs,3)
Xtransposed = Application.worksheetfunction.transpose(X)
MMult = Application.worksheetfunction.mmult(Xtransposed, Y) 

我本应该执行Redim Y(obs,1)来使代码正常工作。

所以:

Redim Y(obs,1)
Redim X(obs,3)
Xtransposed = Application.worksheetfunction.transpose(X)
MMult = Application.worksheetfunction.mmult(Xtransposed, Y)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接