各位版大好,以下有一dictionary物件,今欲将item为0之key值写入空值,但是却出现
dic.Item(i)非变量的错误讯息,不知道要如何修正,谢谢!
Function inventory_rank3(item_range As Range, number_range As Range, _
rank_order As Integer) As String
Dim r As Range
Dim ary1, ary2
Dim w&, dic, num&,
Set dic = CreateObject("scripting.dictionary")
For Each r In item_range
num = number_range.Resize(1).Offset(w)
If r <> "" Then
If dic.exists(r.Value) Then
dic.Item(r.Value) = dic.Item(r.Value) + num
Else
dic.Add r.Value, num
End If
End If
w = w + 1
Next
For Each dic.Item(i) In dic
If dic.Item(i) = 0 Then dic.Key(i) = ""
Next
End Function
作者: soyoso (我是耀宗) 2016-03-12 13:18:00
写法为for each 变量 in dic...next变量用于循环item及key内
我后来使用以下做法For i = 0 To dic.Count - 1If dic.items()(i) = 0 Then dic.items()(i) = "aNext不过dic里面的key却不为所动,觉得很困惑@@不好意思,上面应为dic.items()(i) = ""
作者: soyoso (我是耀宗) 2016-03-12 21:28:00
测试可用个变量接dic.key()(i)的值,再以dic.key(变量)的方式=原po要的字串更正为应是变量接dic.keys()(i)的值
这样的写法就成功了不过dic的key之首项似乎不能为""因为每次只要首项为"",程式就会停止不知这样的问题有无解法?还是只能另外用变量来处理?
作者: soyoso (我是耀宗) 2016-03-13 17:20:00
不太了解什么是key之首项,是指item 1吗?如果是的话,测试用for each..next来带出,并无出现原po的情况
这里的key首项就是item 1没错我后来用以下写法For Each i In ary1If dic.Item(i) = 0 Then dic.Key(i) = ""Next当item 1不为0时,其余item为0所对应到的key皆被顺利变更为"",但若item 1为0时,则程式会出现错误。不知道我哪里做错了,还请指教,谢谢!
可是如果连B的数字都为0那C,甚至之后的D、E等就会跑不出来在真实的状况中,不同的项目的确会因为不同的时间的买卖而使存货为0
作者: soyoso (我是耀宗) 2016-03-14 08:54:00
如果有二笔以上都改为空字串"",就会因为有重复值而无法执行因此有二笔以上时,可以remove方式移除,循环以反序方式