Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 添加位于两个不同图纸上的两个区域中的单元格_Vba_Excel_Excel 2003 - Fatal编程技术网

Vba 添加位于两个不同图纸上的两个区域中的单元格

Vba 添加位于两个不同图纸上的两个区域中的单元格,vba,excel,excel-2003,Vba,Excel,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

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

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行中设置了两个范围(inputng和outputng)。输入来自工作表(“输入”),输出来自工作表(“输出”)。当我运行代码时,“Evaluate”函数(第7行)对范围求和,但问题是:

这两个范围都是从同一个表中导出的,因为在计算过程中我在表中(“输入”),所以inputng和outputng的值都是从表中导出的(“输入”)。当我重写第7行时,如下所示:

sheets("output").outputRng.value = Evaluate(sheets("output").outputRng.Address _
                                  & "+" & sheets("input").inputRng.Address)
我收到一条错误消息“对象不支持此属性或方法”。是否有其他方法强制代码从我的工作表中读取输出(“输出”)

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

任何想法都将不胜感激。谢谢你的调查

MPD


解决方案

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

谢谢大家的意见。事实上,Excelll的最后一句话触动了我的心!下面是我如何让它工作的:

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

因此,我没有将总和写入另一张表中的某个范围,而是将其存储到一个数组中,然后将该数组传输到输出范围中,这样我就可以不用循环了。

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

 outputRng = outputRng.Value + inputRng.Value
编辑:

为了调试起见,您可以声明几个工作表对象和几个范围对象

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")

然后在代码中使用这些范围,而不是重复的
工作表(“…”)。范围(“…”
结构。

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

 outputRng = outputRng.Value + inputRng.Value
编辑:

为了调试起见,您可以声明几个工作表对象和几个范围对象

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")

然后在代码中使用这些范围,而不是重复的
表(“…”)。范围(“…”
构造。

我仍在查看它,但我能告诉您的第一件事是,错误消息来自(例如)
outputng
是一个局部变量,它不是“输出”表的属性<代码>工作表(“输出”)。outputRng不存在,因此
对象不支持此属性或方法。
我同意!在电子表格本身(不使用vba)中,我们可以使用命名范围,也可以使用其他图纸中的范围属性。应该有一种方法可以使用VBA并从位于另一张图纸的范围中读取值。只是不知道如何…+1跟进并提供解决方案=我还在看它,但我能告诉你的第一件事是错误消息来自这样一个事实:例如,
outputng
是一个局部变量,它不是“输出”表的属性<代码>工作表(“输出”)。outputRng不存在,因此
对象不支持此属性或方法。
我同意!在电子表格本身(不使用vba)中,我们可以使用命名范围,也可以使用其他图纸中的范围属性。应该有一种方法可以使用VBA并从位于另一张图纸的范围中读取值。只是不知道如何…+1跟进并提供解决方案=德克塞尔,谢谢你的回复。事实上,在发布这个问题之前,我已经试过了。我收到一条错误消息“类型不匹配”。同意!!这是一个好主意,我将在代码中使用它。问题仍然没有解决。我仍然认为您应该完全取消Evaluate()。无论如何,第7行的问题是。Address将只返回单元格引用,例如“$A$1”,而不返回工作表引用(您需要它才能工作),例如“'Input'!$A$1”。谢谢Excell!!!你给了我一个主意。它现在开始工作了!!伟大的我已经编辑了我原来的帖子。谢谢回复。事实上,在发布这个问题之前,我已经试过了。我收到一条错误消息“类型不匹配”。同意!!这是一个好主意,我将在代码中使用它。问题仍然没有解决。我仍然认为您应该完全取消Evaluate()。无论如何,第7行的问题是。Address将只返回单元格引用,例如“$A$1”,而不返回工作表引用(您需要它才能工作),例如“'Input'!$A$1”。谢谢Excell!!!你给了我一个主意。它现在开始工作了!!伟大的我已经编辑了我原来的帖子。