各位版大好,以下有一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方式移除,迴圈以反序方式