|
本帖最后由 e表格学习 于 2015-11-4 14:03 编辑
山总您好!下面的问题,应该是VBA菜鸟的普遍问题,即关于变量的“变来变去、扑朔迷离”的问题。
再次深入学习您的“太极字典”时,表26“第一次练习”中就出现了上述问题,似懂非懂,很让人难受:
下面程序中,n=m为什么不能“省略”不写?为什么省略后会报错?
原程序(部分):
- For i = 4 To UBound(Brr) '循环读取5月份数据
- If Not dic1.Exists(Brr(i, 2) & Brr(i, 3)) Then '判断 Brr(i, 2) & Brr(i,3) 在字典dic1中是否存在,如果不存在,则:
- If dic2.Exists(Brr(i, 2) & Brr(i, 3)) Then '再判断Brr(i, 2) & Brr(i,3) 在字典dic2中是否存在,如果存在,则:
- n = dic2(Brr(i, 2) & Brr(i, 3)) '返回"名称 & 规格"对应的序号
- Else
- m = m + 1
- dic2.Add Brr(i, 2) & Brr(i, 3), m '将"名称 & 规格"添加到第二个字典中,条目为一序号。
- ReDim Preserve Crr(1 To 4, 1 To m)
- Crr(1, m) = Brr(i, 2) '将名称存储到数组Crr()第1行
- Crr(2, m) = Brr(i, 3) '将规格存储到数组Crr第2行
- n = m
- End If
- Crr(3, n) = Crr(3, n) + Brr(i, 4) '汇总数量,保存到数组Crr第3行
- Crr(4, n) = Crr(4, n) + Brr(i, 5) '汇总金额,保存到数组Crr第4行
- End If
- Next
复制代码
注释掉n = m的修改后的程序:
For i = 4 To UBound(Brr) '循环读取5月份数据
If Not dic1.Exists(Brr(i, 2) & Brr(i, 3)) Then '判断 Brr(i, 2) & Brr(i,3) 在字典dic1中是否存在,如果不存在,则:
If dic2.Exists(Brr(i, 2) & Brr(i, 3)) Then '再判断Brr(i, 2) & Brr(i,3) 在字典dic2中是否存在,如果存在,则:
m = dic2(Brr(i, 2) & Brr(i, 3)) '返回"名称 & 规格"对应的序号
Else
m = m + 1
dic2.Add Brr(i, 2) & Brr(i, 3), m '将"名称 & 规格"添加到第二个字典中,条目为一序号。
ReDim Preserve Crr(1 To 4, 1 To m)
Crr(1, m) = Brr(i, 2) '将名称存储到数组Crr()第1行
Crr(2, m) = Brr(i, 3) '将规格存储到数组Crr第2行
'n = m
End If
Crr(3, m) = Crr(3, m) + Brr(i, 4) '汇总数量,保存到数组Crr第3行
Crr(4, m) = Crr(4, m) + Brr(i, 5) '汇总金额,保存到数组Crr第4行
End If
Next
山总的“太极字典少年班”是菜鸟学习字典的最好的启蒙教程,没有之一!
(我认为,此“太极”的某些部分,对于有些非菜鸟们也并不是一件容易学习的事情,有难度啊。)
山总赐教,人之幸事。
上述问题已解决。参考链接:
http://club.excelhome.net/thread-1239491-1-1.html
|
|