背景
当我试图在大量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