无法使用变量输入

时间:2014-11-29 11:11:53

标签: excel vba variables

背景

当我试图在大量csv数据文件上运行一组技术指标时,我修补了一个3宏,这些宏旨在

  • 宏1:RunAnalysis>打开特定的每个excel文件 文件夹
  • 宏2:DoWork>运行宏宏3:指示符数据>至 使用技术填充宏1打开的各个csv文件 指标公式。

代码见下文。

问题/问题

  • 问题在于宏3 [指标数据]

在填充列H时,vba会有选择地使用从同一工作簿中找到的名为ControlPanel的工作表中捕获值的变量EMAWindow1的值。

在前两行公式中

ActiveSheet.Range("h1") = EMAWindow1 & " Day EMA"
ActiveSheet.Range("h" & EMAWindow1 + 1) = "=average(R[-" & EMAWindow1 - 1 & "]C[-3]:RC[-3])"

你会发现宏工作正在完善。然而

当你到达第三行时

ActiveSheet.Range("h" & EMAWindow1 + 2 & ":h" & LastRowCheck).FormulaR1C1 = "=R[0]C[-3]*(2/(EMAWindow1 + 1)) + R[-1]C[0] * (1-(2/(EMAWindow1 + 1)))"

出于某种原因,未使用EMAWindow1的值,并将其视为导致错误的文本并导致#NAME?因为公式无法用里面的文字来计算。

后续代码遇到同样的问题。以前有人遇到过同样的问题吗?我已经解决了这个问题一段时间了,我希望得到一些启示。


Sub RunAnalysis()

    Dim Filename, Pathname As String
    Dim wb As Workbook

    Pathname = "C:\Users\gabri_000\Desktop\Trading Data\Stocks - 1 - 100\"
    Filename = Dir(Pathname & "*.csv")
    Do While Filename <> ""
        Set wb = Workbooks.Open(Pathname & Filename)
        DoWork wb
        wb.Close SaveChanges:=True
        Filename = Dir()
    Loop
End Sub

Sub DoWork(wb As Workbook)
    With wb

        Call IndicatorData

    End With
End Sub

Sub IndicatorData()

Dim LastRowCheck As Long

Dim EMAWindow1, EMAWindow2, EMAWindow3 As Long

Dim Pathname, Filename, FileNameIndex, FinalFileName As String

    'Converting file path into a string
    Pathname = "C:\Users\gabri_000\Desktop\Trading Data\Stocks - 1 - 100\"

    'Full file name
    Filename = Dir(Pathname)

    'Removing the .csv portion of the file name
    FileNameIndex = InStr(1, Filename, ".csv")
    FinalFileName = Left(Filename, FileNameIndex - 1)

    'Selecting Recently Opened File
    Sheets(FinalFileName).Select

    'Counting Number of Rows in the worksheet
    With Worksheets(FinalFileName)
        LastRowCheck = .Range("A" & .Rows.Count).End(xlUp).Row
    End With

    'EMA Inputs
    'Obtaining data from masterfile
    With ThisWorkbook.Sheets("ControlPanel")

    EMAWindow1 = .Range("EMAWindow1")
    EMAWindow2 = .Range("EMAWindow2")
    EMAWindow3 = .Range("EMAWindow3")

    End With

    'EMA Calcuations
    ActiveSheet.Range("h1") = EMAWindow1 & " Day EMA"
    ActiveSheet.Range("h" & EMAWindow1 + 1) = "=average(R[-" & EMAWindow1 - 1 & "]C[-3]:RC[-3])"
    ActiveSheet.Range("h" & EMAWindow1 + 2 & ":h" & LastRowCheck).FormulaR1C1 = "=R[0]C[-3]*(2/(EMAWindow1 + 1)) + R[-1]C[0] * (1-(2/(EMAWindow1 + 1)))"

    ActiveSheet.Range("i1") = EMAWindow2 & " Day EMA"
    ActiveSheet.Range("i" & EMAWindow2 + 1) = "=average(R[-" & EMAWindow2 - 1 & "]C[-4]:RC[-4])"
    ActiveSheet.Range("i" & EMAWindow2 + 2 & ":i" & LastRowCheck).FormulaR1C1 = "=R[0]C[-4]*(2/(EMAWindow2 + 1)) + R[-1]C[0] * (1-(2/(EMAWindow2 + 1)))"

    ActiveSheet.Range("j1") = EMAWindow3 & " Day EMA"
    ActiveSheet.Range("j" & EMAWindow3 + 1) = "=average(R[-" & EMAWindow3 - 1 & "]C[-5]:RC[-5])"
    ActiveSheet.Range("j" & EMAWindow3 + 2 & ":i" & LastRowCheck).FormulaR1C1 = "=R[0]C[-5]*(2/(EMAWindow3 + 1)) + R[-1]C[0] * (1-(2/(EMAWindow3 + 1)))"

End Sub 

0 个答案:

没有答案