我正在尝试整理一个主要的电子表格,该表格来自100多个包含各种数据的工作簿。我还没有能够弄清楚如何访问已关闭的工作簿以计算其中一行的标准偏差。
Sub RefreshSourceData()
Dim sourceFile, fileName As String, path As String
Dim dispersionRange As Range
path = "U:\SPACE Info\Meeting Materials\Strategy Files\"
fileName = "[" & ActiveCell.EntireRow.Cells(1, 1).Value & ".xls]"
sourceFile = "=" & path & fileName
dispersionRange = "=" & path & fileName & "Account'!R:R"
Range("B" & ActiveCell.Row).Formula = sourceFile & "Summary'!$F$2"
Range("C" & ActiveCell.Row).Formula = sourceFile & "Summary'!$F$3"
Range("D" & ActiveCell.Row).Formula = sourceFile & "Summary'!$B$10"
Range("E" & ActiveCell.Row).Formula = sourceFile & "Summary'!$D$10"
Range("F" & ActiveCell.Row).Formula = WorksheetFunction.StDev(dispersionRange)
End Sub
我收到了各种错误,现在它是"对象变量或没有设置对象变量。"
我还尝试创建一个由path&组成的工作簿变量。文件名,但这也没有用。
答案 0 :(得分:0)
这些是 尽力而为 的建议,因为我无法测试所有内容(我没有您的数据)。
对于您的即时错误,我认为您希望dispersionRange
为String
,而不是Range
。
此外,在添加公式引用时,请确保在sourceFile
周围添加单引号,例如:
Range("B" & ActiveCell.Row).Formula = "'" & sourceFile & "Summary'!$F$2"
Range("C" & ActiveCell.Row).Formula = "'" & sourceFile & "Summary'!$F$3"
Range("D" & ActiveCell.Row).Formula = "'" & sourceFile & "Summary'!$B$10"
Range("E" & ActiveCell.Row).Formula = "'" & sourceFile & "Summary'!$D$10"
^^^^^
同样适用于dispersionRange
(请注意缺少的=
):
dispersionRange = "'" & path & fileName & "Account'!R:R"
最后,最后.Formula
(对于“F”列)应为.Value
,因为StDev
会返回Double。另外,函数StDev
不会将范围作为String而是一个适当的Range对象,所以请尝试这样做:
Range("F" & ActiveCell.Row).Value = WorksheetFunction.StDev(Range(dispersionRange))
<强>更新强>
为避免混淆,我修改了您的代码,我将其列在下面。请注意,这是未经测试的,因为我无法访问您的工作簿,但它应该可以正常工作。
Sub RefreshSourceData()
Dim sourceFile, fileName As String, path As String
Dim dispersionRange As String
path = "U:\SPACE Info\Meeting Materials\Strategy Files\"
fileName = "[" & ActiveCell.EntireRow.Cells(1, 1).Value & ".xls]"
sourceFile = path & fileName
dispersionRange = "'" & path & fileName & "Account'!R:R"
Range("B" & ActiveCell.Row).Formula = "='" & sourceFile & "Summary'!$F$2"
Range("C" & ActiveCell.Row).Formula = "='" & sourceFile & "Summary'!$F$3"
Range("D" & ActiveCell.Row).Formula = "='" & sourceFile & "Summary'!$B$10"
Range("E" & ActiveCell.Row).Formula = "='" & sourceFile & "Summary'!$D$10"
Range("F" & ActiveCell.Row).Value = WorksheetFunction.StDev(Range(dispersionRange))
End Sub