创建日期列表并避免未设置变量(VBA 错误 91)



我在五张纸上有关于某些股票的财务数据,并试图创建一个函数来计算给定范围的指数移动平均线。

[列 (1( = 日期;列 (2( = 收盘价]

此函数的参数是计算 EMA 所考虑的天数,以及一个整数kol,用于并排计算几列上的多个 EMA(暂时没有用(。这是我到目前为止的代码:

Public Function MME(Lmme As Double, kol As Long)
Dim Cmme As Range
Dim Todate, rcell As Range
Dim alpha, period, Udate, i, j, k As Long
Dim Ustock As String
Dim wsDest As Worksheet
Udate = ThisWorkbook.Worksheets("UserForm").Range("B2").Value
period = ThisWorkbook.Worksheets("UserForm").Range("B3").Value
Ustock = ThisWorkbook.Worksheets("UserForm").Range("B4").Value
' MsgBox (Udate)
Set wsDest = ThisWorkbook.Sheets(Ustock)
wsDest.Activate
With wsDest.Range("A2:A392")
  Set Todate = Cells.Find(What:=Udate, _
                     LookIn:=xlValues, _
                     LookAt:=xlWhole, _
                     SearchOrder:=xlByRows, _
                     SearchDirection:=xlNext, _
                     MatchCase:=False)
  If Todate Is Nothing Then
    MsgBox ("todate wasn't found")
  Else
  End If
End With
i = Todate.Row
j = i + period
k = i - Lmme
Set Cmme = Range(Cells(i, 9 + kol), Cells(j, 9 + kol))
alpha = (2 / (Lmme + 1))
With Cmme
  For Each rcell In Cmme
    If rcell.Row <> i Then
          rcell.Formula = "=B" & rcell.Row & "*" & alpha & "+I" & rcell.Row - 1 & "*" & 1 - alpha & ""
    Else: rcell.Formula = "=AVERAGE(B" & k & ":B" & i & " )   "
    End If
  Next rcell
End With
End Function

我在单独的工作表上创建了一个列表,允许用户选择2008年的日期,另一个列表允许他选择股票。所以我确实设置了新变量来解决问题,但它不起作用。

UsactionUSdateUperiod是存储用户选择的值的名称范围。但是我在set = period上收到"错误 91 或需要对象"。

我真的希望 EMA 仅针对特定期间计算,从所选日期开始。编辑:我用我拥有的最新版本更新了代码。我仍然有一个错误 91 在日期编辑2:代码已更新。我不明白为什么找不到日期。在工作表用户窗体上,用户选择的日期在"B2"(USdate (中。它是通用格式,但是在查找功能中使用CDate,它应该被视为日期,对吗?我尝试使用日期格式,它没有改变任何东西......

编辑3:多亏了布拉尼斯拉夫,我设法通过将每个日期切换到常规格式来使查找工作。既然查找正在工作,无论如何让它使用日期格式工作?以便用户可以看到实际日期,而不是关联的整数。

另一个问题:如何绕过 Cells.Formula 直接在 vba 中操作,并使公式在代码运行后显示在 excel 的编辑栏中,除了 SMA 和 EMA 在范围内操作的结果?

ToDate已经是一个范围

Set Endate = Todate.Row + period

此外,在达到该点之前,您可以使用 .Find() 来设置ToDate。由于完全有可能有人输入无效日期或您没有数据的日期,因此我强烈建议添加:

if ToDate is Nothing then
  'do some date not found stuff here
else
  'do your date found stuff here
End If

您可能还需要考虑将LookIn:=xlFormulas更改为LookIn:=xlValues因为我相信您正在寻找单元格值,而不是单元格公式。

最新更新