我想從用戶定義函數返回值,但返回的值都是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位系統上,整數轉換爲長整型,所以沒有性能增益。 –