2,462
社区成员
发帖
与我相关
我的任务
分享
Option Explicit
Sub test()
Dim arrw7a()
Dim i As Integer
arrw7a = Array("time", "listen", "put", "stand", "close", "here", "spell" _
, "telephone", "number", "English", "write", "again", "welcome" _
, "colour", "birthday", "football", "let", "Chinese", "from", "about" _
, "America", "England", "grade", "capital", "city")
Application.ScreenUpdating = False
Dim mydic As New Collection
For i = 0 To UBound(arrw7a)
mydic.Add arrw7a(i), arrw7a(i)
Next
Dim wd
Dim strTmp As String
On Error Resume Next
For Each wd In ActiveDocument.Words
strTmp = ""
strTmp = mydic(Trim(wd))
If strTmp = Trim(wd) Then
wd.Font.Color = RGB(0, 0, 255)
End If
Next
Application.ScreenUpdating = True
End Sub
arrw7a(i) = mydic.Items
'这句的意思是将arrw7a(i)这个数组成员的值赋为mydic.items
'循环赋值结束以后,mydic.Items仍然是空,因为mydic从未被赋过值
改为
mydic.add arrw7a(i), arrw7a(i)
'这句的意思是在mydic这个字典中添加一个项,key和value都是arrw7a(i)
所以引出使用不当的地方,这儿使用集合比字典更合适(使用字典完全可以正常工作,集合不是唯一选择,但相较字典是更优的选择)
错误2:判断条件设置错误
If mydic.Exists(wd) = True Then …
wd是一个Range对象,而mydic的成员Key和Value都是String,所以原代码使用mydic.Exists来判断是否包含一个Range,类型不一样,永远得到false,需要改为
If mydic.Exists(wd.Text) = True Then …