我正在尝试创建一个宏来获取位于工作表中的未知数量的客户(和产品)的销售数据"客户"并将其乘以位于单独工作表"产品"中的一组价格中断。例如,假设客户1订购了150个单位的产品1.如果价格中断少于500个单位是10.00美元,我需要找到150和10的产品并将其显示在客户工作表中。我构建了for循环来遍历销售数据并将其放在正确的位置,但是我遇到了一个问题,试图将销售数据乘以价格中断,因为它们位于不同的工作表中。使用此代码,我得到一个"下标超出范围"错误。我已经研究并尝试了我能想到的一切,但无法弄清楚什么是超出范围"。我做错了什么?
Dim anchor As Range, rngGadgets As Range, rngClients As Range, _
anchorABED As Range, anchorAAED As Range, _
Dim numGadgets As Integer, numClients As Integer, x As Integer, _
i as integer, j as integer
set anchor = range("A4")
numGadgets = (Cells(4, Columns.Count).End(xlToLeft).Column - 1)
MsgBox numGadgets
numClients = (Cells(Rows.Count, 1).End(xlUp).Row - 4)
MsgBox numClients
'Amount before extra discount label
Set anchorABED = anchor.Offset(0, numGadgets + 2)
For x = 0 To numGadgets - 1
anchorABED.Offset(0, x).Value = "Gadget " & x + 1
Next x
'multiplication loop
For j = 0 To numGadgets - 1
For i = 1 To numClients
If anchor.Offset(i, j + 1) < 100 Then
anchorABED.Offset(i, j).Value = anchor.Offset(i, j + 1) * _
Worksheets("sheet1").anchor.Offset(j + 1, 1)
ElseIf anchor.Offset(i, j + 1).Value < 500 Then
anchorABED.Offset(i, j).Value = anchor.Offset(i, j + 1) * _
Worksheets("sheet1").anchor.Offset(j + 1, 2)
ElseIf anchor.Offset(i, j + 1).Value < 1000 Then
anchorABED.Offset(i, j) = anchor.Offset(i, j + 1) * _
Worksheets("sheet1").anchor.Offset(j + 1, 3)
ElseIf anchor.Offset(i, j + 1).Value >= 1000 Then
anchorABED.Offset(i, j).Value = anchor.Offset(i, j + 1) * _
Worksheets("sheet1").anchor.Offset(j + 1, 4)
End If
Next i
Next j
答案 0 :(得分:0)
在乘法循环中,您尝试将 anchor 的偏移值(设置为活动工作表的范围对象的A4)与 anchor <的偏移量相乘/ em>在另一个工作表上。您不能像这样随意重置 anchor 的父级。
我假设要繁殖的两个单元在它们各自的工作表上具有相同的位置。您可以使用 anchor&#39> 地址来引用另一个工作表上与 anchor 具有相同单元格地址的单元格。
anchorABED.Offset(i, j - 1).Value = anchor.Offset(i, j + 1) * _
Worksheets("sheet1").Range(anchor.Address).Offset(j + 1, 1)
这不是最好的方法,因为要求是来自不同工作表的两个单元格保持单元格引用同步。最好有列和行标题信息,以便可以对第二个工作表上的数据矩阵执行动态查找。