添加位于两个不同纸张的两个范围中的单元格

时间:2011-07-27 15:53:30

标签: excel vba excel-vba excel-2003

我试图在两个范围内对相应的单元格值求和,并用一个和替换其中一个范围中的值。请参阅下面的代码段:

For i = 1 To daterow.Rows.count - 1
    If (outinter - diff) > 0.5 Then
         diff = diff + DateDiff("n", Indt(i - 1), Indt(i))
         Y = Sheets("output").Cells(Rows.count, 1).End(xlUp).row + 1
         Set inputRng = Sheets("Input").Range(Sheets("Input").Cells(i, 7), _
                        Sheets("input").Cells(i, ngag + 6))
         Set outputRng = Sheets("Output").Range(Sheets("Output").Cells(Y, 6), _
                        Sheets("Output").Cells(Y, ngag + 5))
         outputRng.value = Evaluate(outputRng.Address & "+" & inputRng.Address)
    Else
         'Some Code here
    End If
Next

因此,我在第5行和第6行设置了两个范围(inputRng和outputRng).inputRng来自工作表(“输入”),outputRng来自工作表(“输出”)。当我运行代码时,“评估”功能(第7行)对范围求和,但这是问题所在:

这两个范围都来自同一张纸,因为在计算过程中我处于纸张(“输入”)中,所以inputRng和outputRng的值都是从纸张(“输入”)派生的。当我按如下方式重写第7行时:

sheets("output").outputRng.value = Evaluate(sheets("output").outputRng.Address _
                                  & "+" & sheets("input").inputRng.Address)

我收到错误消息“对象不支持此属性或方法”。有没有其他方法可以强制代码从我的表格(“输出”)读取outputRng?

我可以遍历每个单元格并对值进行求和,但是运行代码需要很长时间,因为这个宏必须处理大量数据。

任何想法都将不胜感激。感谢您对此进行调查。

MPD


解决方案

糟糕,服务器没有让我回答这个问题,所以,我在这里发布解决方案:

感谢大家的意见。实际上Excellll的最后评论点击了我的想法!所以,这就是我如何运作:

Dim value() As Variant
Dim shtIn As Worksheet, shtOut As Worksheet
Set shtIn = Sheets("Input")
Set shtOut = Sheets("Output")
Redim Value(daterow.Rows.count - 1)

For i = 1 To daterow.Rows.count - 1
    If (outinter - diff) > 0.5 Then
      diff = diff + DateDiff("n", Indt(i - 1), Indt(i))
      Y = shtOut.Cells(Rows.count, 1).End(xlUp).row + 1
      Set inputrng = shtIn.Range(shtIn.Cells(i, 7), shtIn.Cells(i, ngag + 6))
      Set outputRng = shtOut.Range(shtOut.Cells(Y, 6), shtOut.Cells(Y, ngag + 5))
      value = Evaluate("Output!" & outputRng.Address & "+" _
                  & "Input!" & inputrng.Address)
      shtOut.Range(shtOut.Cells(Y, 6), shtOut.Cells(Y, ngag + 5)) = value
    Else
      'Some Code here
    End If
Next

因此,我没有将总和写入另一个工作表的范围,而是将其存储到一个数组中,然后将数组传输到输出范围中,我可以不进行循环操作。

1 个答案:

答案 0 :(得分:1)

为什么不在第7行使用它呢?

 outputRng = outputRng.Value + inputRng.Value

编辑:

通过声明一些Worksheet对象和几个Range对象,你可以帮自己调试一下。

Dim shtIn As Worksheet, shtOut As Worksheet
Dim rngIn As Range, rngOut As Range
Set shtIn = Sheets("Input")
Set shtOut = Sheets("Output")
Set rngIn = shtIn.Range("Input")
Set rngOut = shtOut.Range("Output")

然后在代码中使用这些范围,而不是重复的Sheets("...").Range("...")结构。