Board logo

標題: [發問] 陣列操作請益 [打印本頁]

作者: li_hsien    時間: 2015-8-7 18:01     標題: 陣列操作請益

請問各位大大

最近小弟進行陣列及下拉式選單的運用

上網爬文找方法

雖然可以正常運行

但是不懂部分程式的操作方式

簡要程式碼如下
  1. Sub test()

  2.     '設定陣列範圍內容
  3.     Arr = Range("A1:A10")

  4.     Set D = CreateObject("Scripting.Dictionary")

  5.     Dim aList$

  6.     For i = 1 To UBound(Arr)
  7.         D(Arr(i, 1)) = ""
  8.     Next

  9.     k = D.keys
  10.    
  11.     aList = Join(k, ",")

  12.     '建立下拉選單
  13.     With Target.Validation
  14.         .Delete
  15.         .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
  16.         Operator:=xlBetween, Formula1:=aList

  17.     End With

  18. End Sub
複製代碼
請問其中的

D(Arr(i, 1)) = ""

k = D.keys

我不懂這兩部分的運作方式

煩請解惑

謝謝!
作者: no3-taco    時間: 2015-8-7 20:24

回復 1# li_hsien
參考看看!!!
1. D(Arr(i, 1)) = ""
語法 object.Item(key) [= newitem]   '可 讀取/寫入 屬性。
.item省略掉了
在寫入方面,這個與 D.add 的方法很像,不一樣的是 add 遇到添加重複的 key值 會回應一個錯誤,
而object.Item(key) [= newitem] 會取代 先前加入的 key值 的 item值

2. k = D.keys
用 k變數傳回一個陣列,該陣列包含一個 Dictionary 物件中的全部的key值。
k只能宣告成不定變數或不定陣列
作者: li_hsien    時間: 2015-8-10 14:18

回復 2# no3-taco

感謝no3-taco

請問關於第一點有些疑惑

1. D(Arr(i, 1)) = ""
語法 object.Item(key) [= newitem]   '可 讀取/寫入 屬性。
依您的意思是在跑迴圈時如果碰到相同的值會自動覆蓋吧???

但請問後面的 =newitem
為什麼是 =空值 ???
不太懂這方式

請no3-taco大協助

謝謝!
作者: no3-taco    時間: 2015-8-10 21:39

本帖最後由 no3-taco 於 2015-8-10 21:41 編輯

回復 3# li_hsien
'總之添加的key的名稱不可能會有重複,但是item可以有重複
為什麼是 =空值 ???

這不是你自己寫的程式,看你要把item的值拿來做啥用??,我覺得應該是item的值用不到所以設空值
  1. Sub 練習()
  2. Dim D As Object
  3. Set D = CreateObject("Scripting.Dictionary")
  4.     D.Add "valkey1", "item1"
  5.     D.Add "valkey2", "item2"
  6.     D.Add "valkey3", "item3"
  7.    
  8.     D.Item("valkey3") = "item5"  'valkey3已有,項目值不同取代項目值
  9.     'D.Add "valkey3", "item6"  '(自己開啟測試)已有相同key值,會傳回一個錯誤
  10.    
  11.     Debug.Print D.Item("valkey3")  '(讀取用法) object.Item(key) [= newitem]
  12.     Debug.Print D("valkey3")       '同上一列(讀取用法) object.Item(key) [= newitem]
  13.     Debug.Print
  14.     '========使用陣列列出===
  15. '    arr = D.Keys
  16. '    arr2 = D.Items
  17. '    For i = LBound(arr) To UBound(arr)
  18. '        Debug.Print arr(i), arr2(i)
  19. '    Next i

  20. End Sub
複製代碼
可參考相關連結:
http://forum.twbts.com/viewthread.php?tid=20&extra=page%3D1%26amp%3Bfilter%3Ddigest
http://www.excelpx.com/thread-145901-1-1.html
作者: c_c_lai    時間: 2015-8-11 06:40

回復 3# li_hsien
newitem 的詮釋:
Optional.
Used for Dictionary object only; no application for collections.
If provided, newitem is the new value associated with the specified key.
If key is not found when changing an item, a new key is created with the specified newitem.
作者: li_hsien    時間: 2015-8-13 08:28

回復 4# no3-taco

感謝no3-taco的精闢解析

因為是網路上抓取來修正拼湊出來的

所以自己不甚了解,因此來這邊尋求解析

您用這個範例,整個運作流程清楚許多

感謝協助!
作者: li_hsien    時間: 2015-8-13 08:36

回復 5# c_c_lai

感謝c_c_lai解釋

就我理解上

它主要說明適用地方外

另外就是說明如上述no3-taco解釋的運作模式吧?




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)