1. 什麼是字典?
答:字典(Dictionary)對象是微軟Windows腳本語言中的一個很有用的對象。例如,有名的正則表達式
( RegExp)對象以及能方便處理驅動器、文件夾和文件的( FileSystemObject )對象也是微軟Windows腳本語言
中的一份子。
字典對象相當於一種聯合數組,它是由具有唯一性的關鍵字( Key)和它的項(Item)(注釋)聯合組成。就好像一本
字典書一樣,是由很多生字和對它們對應的註解所組成。
2. Dictionary是什麼意思?
答:字典
3. Key是什麼意思?
答:關鍵字。
4. Item是什麼意思?
答:項,條目,注釋。
5. 字典對象的方法有哪些?
答:字典對象共有6個方法:
1) Add:
2) Keys:
3) Items
4) Exists
5) Remove
6) Removeall
6. Add方法是什麼意思?
答:向dictionary對象中添加一個關鍵字項目對。
7. Add方法的表達式是什麼?
答:object.add(key,item)
8. Object 是什麼意思?
答:指一個dictionary對象的名稱。
9. Key是什麼意思?
答:指與被添加的item相關聯的key。
10. Item是什麼意思?
答:指與被添加的key相關聯的ltem。
11. 在使用add方法時的注意事項是什麼?
答:如果key已經存在,將導致一個錯誤,提示如下:
。
12. 字典對象為什麼需要先綁定?
答:因為字典不存在與VBA中,故此想要在VBA中使用字典,必須先綁定字典對象。
13. 創建字典對象的方法有哪些?
答:有前期綁定法和後期綁定法。
14. 如何通過前期綁定發創建字典對象?
答:VBE→窗口→工具→引用→瀏覽→搜索篩選器→輸入scrrun.dll→選定scrrun.dll文件→在可使用的引用菜單中→找到Miscrosoft scripting runtime→在前面的方括號中打鉤→點確定。
15. 如何通過後期綁定發創建字典對象?
答:通過如下代碼創建:
Dim d as object '此語句也可以寫成Dim d
Set d =createobject("scripting.dictonary")
16. 前期綁定法與後期綁定法有何區別?
答:兩種綁定方法的區別:
1) 使用前期綁定法,寫好的代碼發給別人使用時,別人也需要在他的VBE窗口中點擊工具→引用→瀏覽→找到scrrun.dll文件→確定。對於不懂的人來說,比照麻煩,而直接創建法(即後期綁定法)不需要這些,可以直接使用。
2) 使用前期綁定法,在寫代碼時,使用字典的屬性或者方法時會有提示,如果是直接創建的字典則不會有提醒。
3) 所以,我們剛開始接觸字典時可以使用前期綁定,然後再改為直接創建,這樣可以有提示,又能練習直接創建字典的代碼的寫法,方便學習。
17. D.add "a","Athens"是什麼意思?
答:添加一個項目對,關鍵為a,對應的項為Athens。
18. Exists方法是什麼意思?
答:如果dictionary對象中存在所指定的關鍵字則返回true,否則返回false。
19. Exists語法表達式什麼?
答:object.exists(key)
20. If d.exists("c") then是什麼意思?
答:若字典中存在關鍵字"c",則執行下面的語句。
21. Msg ="指定的關鍵字已經存在"是什麼意思?
答:把"指定的關鍵字已經存在"的字符串賦給變量msg。
22. Keys方法是什麼意思?
答:返回一個數組,其中包含了一個dictionary對象中全部現有的關鍵字。
23. Keys方法的語法表達式是什麼?
答:object.keys()
24. K=d.keys是什麼意思?
答:把字典中存在的關鍵字賦給變量k,得到的是一個一維數組,下限為0,上限為d.count-1,這是數組的默認形式。
25. 什麼是一維數組?
答:即下標個數為1的數組。
26. 什麼是數組?
答:把類型相同的一組數據(數值或字符)放在一起,用統一的名字代表這一組數據,用整數做下標表示它的各個數據間區別及順序,這就是數組。
27. [B1].resizede(d.count,1)=application.transpose(k)是什麼意思?
答:resize是range對象的一個屬性,用於調整指定區域的大小,它有參數,第一個是行數,d.count指字典中關鍵字key的數量,整個字典中有多少個關鍵字,就顯示多少。第二個數字1指的是列數.
"="左邊的意思是:把一個單元格B1調整為以B1開始的一列單元格區域,行數等於字典中關鍵字的數量d.count,就是把單元格B1調整為單元格區域B1:B3.
"="右邊的k是一個是水平排列的一維數組,如果需要把水平排列的數值轉換成縱向排列,就需要用到工作表內置的轉置函數transpose,但在VBA中不能直接使用該工作表函數,需要通過application對象的worksheetfunction屬性來使用它。
所以完整的寫法應為application.worksheetfunction.transpose(k),中間的worksheetfunction可以省略。
綜述,上述代碼的意思就是把字典中所有的關鍵字賦給以B1單元格開始的單元格區域中。
28. D.count從哪兒可以查看到?
答:VBE窗口→視圖→本地窗口→按F8(或者點擊調試→逐語句),即可在VBE窗口的下方本地窗口中D.count,注意點開d前面的+號,這樣就可以看到count屬性值了。
29. 什麼是items方法?
答:返回一個數組,其中包含了一個dictionary對象中的所有項目。
30. Items方法的語句表達式是什麼?
答:object.items()
31. T=d.items是什麼意思?
答:把字典中所有關鍵字對應的項賦給變量t,得到的也是一維數組,下限為0,上限為d.count-1.
32. 什麼是remove方法?
答:remove方法指從一個dictionary對象中清除一個關鍵字和它對應的項,即一個項目對。
33. 使用remove方法的注意事項是什麼?
答:如果所指定的關鍵字和項目不存在,那麼將導致一個錯誤,如下圖所示:
34. d.remove("b")是什麼意思?
答:清除字典中"b"關鍵字和他對應的項,即這個項目對被清除掉。
35. 什麼是removeall方法?
答:remove方法指從一個dictionary對象中清除所有的關鍵字和他對應的項,即所有項目對。
36. D.removeall是什麼意思?
答:清除字典中所有的數據,也就是清空這個字典。
37. 字典對象的屬性有哪些?
答:字典對象共有四個屬性:
1) Count
2) Key
3) Item
4) Comparemode
38. 什麼是count屬性?
答:返回一個dictionary對象中的項目數,只讀屬性。
39. Count屬性的語句表達式是什麼?
答:object.count
40. n=d.count是什麼意思?
答:把字典中所有關鍵字的數量賦給變量n,也就是有多少個關鍵字key。
41. 什麼是key屬性?
答:在dictionary對象中設置一個key值。
42. Key屬性的語句表達式是什麼?
答:object.key("key")=newkey
43. d.key("c")="d"是什麼意思?
答:用新的關鍵字"d"來替換指定的關鍵字"c",這時字典中就沒有關鍵字"c"了,只有關鍵字"d",原先與"c"對應的item項值就成了"d"的項目值了,即"d"和item項值就成了一個項目對。
44. 什麼是item屬性?
答:在一個dictionary對象中設置或者返回所指定關鍵字key的項目值item,對於集合則根據所指定的key返回一個item,讀/寫。
45. Item的語句表達式是什麼?
答:object.item(key)[=newitem]
46. Newitem是什麼意思?
答:指與所指定的key相關聯的新項目值。
47. 在試圖返回item屬性時,注意事項是什麼?
答:如果在試圖改變一個關鍵字key的時候沒有找到該item值,那麼將利用所指定的newitem創建一個新的key;如果在試圖返回一個已有item項目的時候沒有找到key,那麼將創建一個新的key且與其相關的item項目被設置為空,即這是一個item為空的項目對。
48. D.item("c")是什麼意思?
答:獲取指定的關鍵字"c"所對應的item項。
49. 什麼是comparemode屬性?
答:指設置或者返回在dictionary對象中進行字符串關鍵字比照時所使用的比照模式。
50. Comparemode屬性語句表達式是什麼?
答:object.comparemode=[compare]
51. Compare是什麼意思?
答:是一個可選項,如果提供了此項,compare就是一個代表比照模式的值,可以使用的值是0(二進位),1(文本),2(資料庫),如下圖所示:
52. d.comparemode=vbtextcompare是什麼意思?
答:指文本比照模式,即不區分關鍵字英文大小寫,vbtextcompare的值為1,所以上式也可以寫為d.comparemode=1
53. d.comparemode=vbbinarycompare是什麼意思?
答:指二進位比照模式,即區分關鍵字英文大小寫,vbbinarycompare的值為0,所以上式也可以寫為d.comparemode=0
54. Dim s As New dictionary是什麼意思?
答:聲明變量s為一個新字典,特別注意此語句只能用於前期字典對象綁定法。
55. m = s.Keys(0)是什麼意思?
答:指取出字典對象s中第一個key值,這是一種取出字典對象key值的一種方法。注意:注意字典中第一個key值默認起始位置為0,所以s.keys(0)為第一個key。
56. m = Application.Index(s.Keys, 1)是什麼意思?
答:這是從字典對象中取出key值的一種方法,利用的是工作表函數index。
57. n = s.Keys m = n(0)是什麼意思?
答:這是從字典對象中取出key值的一種方法,即數組法,也就是先把字典對象s的全部key值賦給一個數組n,然後從數組n中取出第一個key值賦給變量m。
58. m = s.Items(0)是什麼意思?
答:這是一種取出字典item項目值的方法,指從字典對象s中取出第一個item項目值。
59. m = Application.Index(s.Items, 1)是什麼意思?
答:這是一種取出字典item項目值的方法,指從字典對象s中取出第一個item項目值,利用的工作表函數index。
60. n = s.Items m = n(0)是什麼意思?
答:這是一種取出字典item項目值的方法,指從字典對象s中取出第一個item項目值,即數組法,也就是先把字典對象s的全部item值賦給變量n,得到的是一個數組,然後從數組n中取出第一個item值賦給變量m。
61. m = s("a")是什麼意思?
答:這是一種取出字典對象s中item項目值的方法,指從字典對象s中取出關鍵字"a"的item項目值,即項目對法,利用的是關鍵字和項目值的相互關聯性。
62. 在取出字典key值的方法中,需要注意什麼?
答:keys法只能用於字典對象前期綁定法,在後期綁定法中無法使用,舉例說明:m = s.Keys(0)。
63. 在取出字典item值的方法中,需要注意什麼?
答:items法只能用於字典對象前期綁定法,在後期綁定法中無法使用,舉例說明:m = s.items(0)。
64. d.Key("A") = "AAA"是什麼意思?
答:指將字典對象d中的關鍵字key"A"更改為"AAA".
65. d.Item("B") = "A0036"
答:指將字典對象d中的關鍵字key為"B"的item值更改為"A0036".
66. d("B")="A0036"是什麼意思?
答:這是d.Item("B") = "A0036"的簡寫。