- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-3-24
|
3#
發表於 2022-9-22 15:36
| 只看該作者
本帖最後由 Andy2483 於 2022-9-22 15:40 編輯
今天習得:不必要重複呼叫Function 值
Function()雖然可以呼叫到需要的值
但是運用這些值時需要另用容器裝,不然在迴圈裡一直重複呼叫這些值,會多出很多時間- 這是原始程式碼,重複呼叫!執行時間很長
- Private Sub TextBox1_Change()
- Dim Arr, x
- List7.Clear
- List7.Locked = True
- Le = Len(TextBox1.Text)
- If Le < 3 Then
- Exit Sub
- End If
- Set xDic = CreateObject("Scripting.Dictionary")
- Dim NM
- For i = 1 To UBound(Szrr)
- If InStr(Szrr(i, f("操_電話欄")), TextBox1.Text) Then
- NM = Szrr(i, f("操_電話欄"))
- xDic(NM) = ""
- End If
- Next
- If xDic.Count > 1 Then
- NM = ""
- End If
- mNo = 7
- For i = 1 To xDic.Count
- List(mNo).AddItem WorksheetFunction.Index(xDic.keys, i)
- Next
- If xDic.Count > 1 Then
- Arr = Application.Transpose(xDic.keys)
- End If
- Set xDic = Nothing
- With List(mNo)
- .Locked = False
- If .ListCount = 1 Then
- .SetFocus
- .ListIndex = 0
- End If
- End With
- List1.Clear
- List1.Locked = True
- mNo = 1
- Set xDic = CreateObject("Scripting.Dictionary")
- If NM = "" Then
- For i = 1 To UBound(Szrr)
- For x = 1 To UBound(Arr)
- If Szrr(i, f("操_電話欄")) = Arr(x, 1) Then
- xDic(Szrr(i, f("操_飼主欄"))) = ""
- End If
- Next
- Next
- Else
- For i = 1 To UBound(Szrr)
- If Szrr(i, f("操_電話欄")) = NM Then
- xDic(Szrr(i, f("操_飼主欄"))) = ""
- End If
- Next
- End If
- For i = 1 To xDic.Count
- List(mNo).AddItem WorksheetFunction.Index(xDic.keys, i)
- Next
- Set xDic = Nothing
- With List(mNo)
- .Locked = False
- If .ListCount = 1 Then .SetFocus: .ListIndex = 0
- End With
- End Sub
複製代碼- 這是用J,k盛裝呼叫值,只呼叫一次,時間大幅縮短
- Private Sub TextBox1_Change()
- Dim Arr, x, j, k
- j = f("操_電話欄")
- k = f("操_飼主欄")
- List7.Clear
- List7.Locked = True
- Le = Len(TextBox1.Text)
- If Le < 3 Then
- Exit Sub
- End If
- Set xDic = CreateObject("Scripting.Dictionary")
- Dim NM
- For i = 1 To UBound(Szrr)
- If InStr(Szrr(i, j), TextBox1.Text) Then
- NM = Szrr(i, j)
- xDic(NM) = ""
- End If
- Next
- If xDic.Count > 1 Then
- NM = ""
- End If
- mNo = 7
- For i = 1 To xDic.Count
- List(mNo).AddItem WorksheetFunction.Index(xDic.keys, i)
- Next
- If xDic.Count > 1 Then
- Arr = Application.Transpose(xDic.keys)
- End If
- Set xDic = Nothing
- With List(mNo)
- .Locked = False
- If .ListCount = 1 Then
- .SetFocus
- .ListIndex = 0
- End If
- End With
- List1.Clear
- List1.Locked = True
- mNo = 1
- Set xDic = CreateObject("Scripting.Dictionary")
- If NM = "" Then
- For i = 1 To UBound(Szrr)
- For x = 1 To UBound(Arr)
- If Szrr(i, j) = Arr(x, 1) Then
- xDic(Szrr(i, k)) = ""
- End If
- Next
- Next
- Else
- For i = 1 To UBound(Szrr)
- If Szrr(i, j) = NM Then
- xDic(Szrr(i, k)) = ""
- End If
- Next
- End If
- For i = 1 To xDic.Count
- List(mNo).AddItem WorksheetFunction.Index(xDic.keys, i)
- Next
- Set xDic = Nothing
- With List(mNo)
- .Locked = False
- If .ListCount = 1 Then .SetFocus: .ListIndex = 0
- End With
- End Sub
複製代碼 |
|