从单独的工作簿VBA计算数据

时间:2014-08-12 20:46:10

标签: excel vba excel-vba statistics

我正在尝试整理一个主要的电子表格,该表格来自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&组成的工作簿变量。文件名,但这也没有用。

1 个答案:

答案 0 :(得分:0)

这些是 尽力而为 的建议,因为我无法测试所有内容(我没有您的数据)。

对于您的即时错误,我认为您希望dispersionRangeString,而不是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