【问题标题】:Defined Variable Returning Run-time 1004定义的变量返回运行时 1004
【发布时间】:2018-02-06 17:15:09
【问题描述】:

当我使用以下代码时,出现运行时 1004 错误“应用程序定义或对象定义错误”:

Sub GetPCData()

'Get PC response ratios

PCanalytes = Array("Furosemide", "Caffeine", "Ketoprofen", "Phenylbutazone", "Flunixin")
PCanalytePositions = Array("J20", "K20", "L20", "M20", "N20")

Set SQWorkbook = Application.ActiveWorkbook

Dim sourceSheet, targetSheet As Worksheet
Dim copyFromRange, copyToRange As Range
Dim Y As Range

Set targetSheet = ThisWorkbook.Sheets("QC data")

For i = 0 To SQWorkbook.Worksheets.Count
    Set sourceSheet = SQWorkbook.Worksheets(PCanalytes(i))
    Set Y = sourceSheet.Range("H8").End(xlDown)
    Set copyToRange = targetSheet.Range(PCanalytePositions(i))
    Set copyFromRange = sourceSheet.Range("H8", Y)
    copyToRange.Value = Application.WorksheetFunction.Average(copyFromRange)
    copyToRange.PasteSpecial xlPasteValues
Next i

End Sub

我需要使用两个单元格 H8 中的值和定义数组中定义为 Y 的变量来计算平均值。所以我需要两个独立单元格的平均值,其中一个是一个变量,将由使用此宏处理的数据集定义。抱歉,如果这是一个简单的解决方法,我还没有找到解决方法。

【问题讨论】:

  • 哪一行?试试Set copyFromRange = sourceSheet.Range("H8", sourceSheet.Range("H8").End(xlDown))
  • 是的! @SJR,这是抛出错误的那一行
  • 只要不包含工作表引用,就会假定活动工作表,如果它与 sourceSheet 不同,则会出现错误,因为范围不能跨越两张工作表。
  • 使用该代码线程并没有引发错误,但正在计算的值都是 H8 和 Y 之间的值。我只需要平均 H8 和 Y,并省略单元格落在他们之间。
  • 你没有在任何地方定义 Y。是单细胞吗?您目前正在平均从 H8 开始的所有单元格。

标签: excel variables range moving-average vba


【解决方案1】:

看看这是否可行,因为我对您要达到的目标做出了假设。

Sub GetPCData()

Dim PCanalytes, PCanalytePositions

'Get PC response ratios
PCanalytes = Array("Furosemide", "Caffeine", "Ketoprofen", "Phenylbutazone", "Flunixin")
PCanalytePositions = Array("J20", "K20", "L20", "M20", "N20")

Set SQWorkbook = Application.ActiveWorkbook

Dim sourceSheet As Worksheet, targetSheet As Worksheet 'note you need to add the type for each declaration
Dim copyFromRange As Range, copyToRange As Range       'ditto
Dim Y As Range

Set targetSheet = ThisWorkbook.Sheets("QC data")

For i = 0 To SQWorkbook.Worksheets.Count
    Set sourceSheet = SQWorkbook.Worksheets(PCanalytes(i))
    Set copyToRange = targetSheet.Range(PCanalytePositions(i))
    Set copyFromRange = sourceSheet.Range("H8", sourceSheet.Range("H8").End(xlDown))
    With copyFromRange
        copyToRange.Value = Application.WorksheetFunction.Average(.Cells(1), .Cells(.Cells.Count))
    End With
Next i

End Sub

【讨论】:

  • 这就像一个魅力!感谢您对我的耐心@SJR
猜你喜欢
  • 2020-08-21
  • 1970-01-01
  • 2017-10-19
  • 1970-01-01
  • 1970-01-01
  • 2017-11-29
  • 1970-01-01
  • 2019-05-03
  • 1970-01-01
相关资源
最近更新 更多