Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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
使用excel宏将订单添加到主库存_Excel_Vba - Fatal编程技术网

使用excel宏将订单添加到主库存

使用excel宏将订单添加到主库存,excel,vba,Excel,Vba,我有两本单独的excel工作簿。一个是订单,另一个是主库存文件 我有一个列,在其中输入每个项目的订单金额(假设它跨越单元格C2:C130,每一行都是不同的项目)。我的最佳解决方案是开发一个宏,接受该订单并将其添加到现有主库存中,以跟踪总订单 我写了一些我认为可行的代码: Private Sub CommandButton1_Click() Dim wsCopy As Worksheet Dim wsDest As Worksheet Dim lCopyLastRow As Variant Dim

我有两本单独的excel工作簿。一个是订单,另一个是主库存文件

我有一个列,在其中输入每个项目的订单金额(假设它跨越单元格C2:C130,每一行都是不同的项目)。我的最佳解决方案是开发一个宏,接受该订单并将其添加到现有主库存中,以跟踪总订单

我写了一些我认为可行的代码:

Private Sub CommandButton1_Click()
Dim wsCopy As Worksheet
Dim wsDest As Worksheet
Dim lCopyLastRow As Variant
Dim lDestLastRow As Variant
Workbooks.Open "C:\Users\Dave\Desktop\Designs Work\Master_Inventory.xlsm"
Set wsCopy = Workbooks("Production file_Dave Edits").Worksheets("Order")
Set wsDest = Workbooks("Master_Inventory").Worksheets("Sheet1")
Set lCopyLastRow = wsCopy.Range("E2:E130")
Set lDestLastRow = wsDest.Range("E2:E130")
lDestLastRow.Value = lDestLastRow.Value + lCopyLastRow.Value
End Sub
当我运行这段代码时,我得到一个不匹配的错误(类型13?)

因此,我进入watch窗口查看每个表达式的类型,等式的组合右侧是“variant/integer”类型,而每个单独的表达式是“variant/variant”类型。此外,当我运行代码并只调用一个单元格而不是一个矩阵时,代码工作正常;当调用多个单元格时,它不会运行

有人能帮忙吗?还是有一个更优雅的代码?多谢各位

Set lCopyLastRow = wsCopy.Range("E2:E130")
Set lDestLastRow = wsDest.Range("E2:E130")
这使得两个变量
Variant/Range
,因为
Set
关键字表示赋值运算符的右侧正在生成一个对象引用:这两个变量也可以声明为
范围

现在,引用多个单元格的
范围
对象的
是一个2D
变量
数组

lDestLastRow.Value = lDestLastRow.Value + lCopyLastRow.Value
这就是得到类型不匹配错误的原因,因为不能对数组操作数使用
+
运算符

当我运行代码并只调用一个单元格而不是一个矩阵时,代码就工作了

这是因为单个单元格
Range.Value
返回该数值,并且
+
将使用该数值-尽管如此,如果单元格包含错误值(例如
#REF!
#Value!
),您仍然会得到类型不匹配错误,因为
变量/错误
不能是操作数

我希望我能提供更多的帮助,但我不知道这个
+
打算做什么

至于更优雅的解决方案,我建议缩进过程主体,将声明移到更接近其赋值的位置,并保留对目标“inventory”工作簿的引用:

Private Sub CommandButton1_Click()

    Dim sourceSheet As Worksheet
    Set sourceSheet = Workbooks("Production file_Dave Edits").Worksheets("Order")

    Dim inventoryBook As Workbook
    Set inventoryBook = Workbooks.Open("C:\Users\Dave\Desktop\Designs Work\Master_Inventory.xlsm")

    Dim destSheet As Worksheet
    Set destSheet = inventoryBook.Worksheets("Sheet1")

    Dim sourceRange As Range
    Set sourceRange = sourceSheet.Range("E2:E130")

    Dim destRange As Range    
    Set destRange = destSheet.Range("E2:E130")

    'todo: figure out intent
    'lDestLastRow.Value = lDestLastRow.Value + lCopyLastRow.Value

End Sub
如果
+
打算在这两个范围内添加所有内容,您可以使用
Application.WorksheetFunction.Sum(sourceRange)+Application.WorksheetFunction.Sum(destRange)
,尽管我怀疑这是您真正想要的

这使得两个变量
Variant/Range
,因为
Set
关键字表示赋值运算符的右侧正在生成一个对象引用:这两个变量也可以声明为
范围

现在,引用多个单元格的
范围
对象的
是一个2D
变量
数组

lDestLastRow.Value = lDestLastRow.Value + lCopyLastRow.Value
这就是得到类型不匹配错误的原因,因为不能对数组操作数使用
+
运算符

当我运行代码并只调用一个单元格而不是一个矩阵时,代码就工作了

这是因为单个单元格
Range.Value
返回该数值,并且
+
将使用该数值-尽管如此,如果单元格包含错误值(例如
#REF!
#Value!
),您仍然会得到类型不匹配错误,因为
变量/错误
不能是操作数

我希望我能提供更多的帮助,但我不知道这个
+
打算做什么

至于更优雅的解决方案,我建议缩进过程主体,将声明移到更接近其赋值的位置,并保留对目标“inventory”工作簿的引用:

Private Sub CommandButton1_Click()

    Dim sourceSheet As Worksheet
    Set sourceSheet = Workbooks("Production file_Dave Edits").Worksheets("Order")

    Dim inventoryBook As Workbook
    Set inventoryBook = Workbooks.Open("C:\Users\Dave\Desktop\Designs Work\Master_Inventory.xlsm")

    Dim destSheet As Worksheet
    Set destSheet = inventoryBook.Worksheets("Sheet1")

    Dim sourceRange As Range
    Set sourceRange = sourceSheet.Range("E2:E130")

    Dim destRange As Range    
    Set destRange = destSheet.Range("E2:E130")

    'todo: figure out intent
    'lDestLastRow.Value = lDestLastRow.Value + lCopyLastRow.Value

End Sub

如果
+
想要在这两个范围内添加所有内容,您可以使用
Application.WorksheetFunction.Sum(sourceRange)+Application.WorksheetFunction.Sum(destRange)
,尽管我怀疑这是您真正想要的。

您想对lcopy最后一行和ldest最后一行做什么?您将它们设置为范围,然后将两个范围的值相加,而不是将两个范围的值相加,然后再将该值相加。错误发生在哪一行?@Cyril my money在涉及两个变量数组的
+
操作上。错误发生在最后一行代码上。方程的整个右侧会产生不匹配错误。我认为@MathieuGuindon是正确的。“+”正在创建错误。我对vba不够了解,无法理解如何修复它。您打算如何处理lcopy最后一行和ldest最后一行?您将它们设置为范围,然后将两个范围的值相加,而不是将两个范围的值相加,然后再将该值相加。错误发生在哪一行?@Cyril my money在涉及两个变量数组的
+
操作上。错误发生在最后一行代码上。方程的整个右侧会产生不匹配错误。我认为@MathieuGuindon是正确的。“+”正在创建错误。我对vba不够了解,无法理解如何修复它。您好!感谢您的快速回复!最终,目的是让订单表单工作簿将订单填充到一个库存工作簿中,该工作簿包含一段时间内的订单总数。因此,我使用“+”将新订单添加到现有库存中。这有意义吗?你失去了获得“新订单”和“现有库存”的逻辑;这不是任何看不到你的数据的人都能帮上忙的。你能再澄清一点吗?我有点困惑:(你是说你试图将“新订单”添加到“现有库存”,但这不是你所拥有的。“新订单”将是其中一个值,而不是整个范围;“现有库存”也是如此),这是其中一个值-如果不知道您的数据是什么样的,任何人都无法帮助您解决这个问题。可能您的源代码有一个
ID
ItemNu