我想从用户定义函数返回值,但返回的值都是0。我觉得我分配给变量wk1和wk2的值没有在函数中使用。子程序返回全0 0
该子程序的目标是计算股票的每周回报,给定工作表“价格”中提供的价格。
我不是很精明与VBA所以任何帮助表示赞赏
感谢您的帮助!
Public Sub wklyrtn()
Dim wk1, wk2 As Long
Dim row As Long, column As Long
Dim matrix1(2 To 261, 2 To 11) As Integer
Sheets("Prices").Select
Selection.Activate
For row = 2 To 261
For column = 2 To 11
wk2 = Cells(row, column).Value
wk1 = Cells(row + 1, column).Value
matrix1(row, column) = Rtrn(wk1, wk2)
Next column
Next row
Sheets("Returns").Select
Selection.Activate
For row = 2 To 261
For column = 2 To 11
Cells(row, column) = matrix1(row, column)
Next column
Next row
End Sub
Public Function Rtrn(wk1, wk2)
Dim delt As Long
Application.Volatile True
delt = wk2 - wk1
Rtrn = delt/wk1
End Function
也许你值都被截断为0,因为你宣布'matrix'到是'Integer'。用'Variant'和s替换'Integer' ee会发生什么。 –
这里有几个错误。首先,你不能声明'Dim wk1,wk2 As Long',它只会声明wk2很长,你必须做'Dim wk1 long,wk2 as long'。但这不是它会失败的原因。同时避免使用'select'。您可能需要使用'set'来引用对象引用(您的工作表) – Niclas
抱歉,错误地指出它。我删除了评论,并在此处发布了正确的信息: John的建议将使您的代码正常工作。如果一个数组被声明为某种类型(例如整型),所有到这个数组的值都必须具有相同的类型。通过将其声明为Variant,所有类型的值都可以正确传输到该数组中。永远不要将任何东西声明为Integer,如果需要的话使用Long。在32位和64位系统上,整数转换为长整型,所以没有性能增益。 –