Board logo

標題: [發問] 請問透過VBA雙向查詢,如何區別英文大小寫?,也就是字要完全一樣 [打印本頁]

作者: peter460191    時間: 2013-5-30 14:23     標題: 請問透過VBA雙向查詢,如何區別英文大小寫?,也就是字要完全一樣

如圖及附檔中,在儲存格C5及C6間進行雙向查詢,但只要遇到有大小寫時,不管是先大寫還是先小寫,第一次查詢完後欲再查詢第二次時,就不能查詢,請問各位高手如何讓它判別大小寫,謝謝您!
[attach]15108[/attach]
[attach]15109[/attach]

VBA程式:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim A As Range
If Intersect(Target, [C5:C6]) Is Nothing Then Exit Sub
Application.EnableEvents = False
Set A = Columns("A:B").Find(Target, lookat:=xlWhole)
If A Is Nothing Then MsgBox
[C5] = Cells(A.Row, 1).Value
[C6] = Cells(A.Row, 2)
10
Application.EnableEvents = True
End Sub
作者: GBKEE    時間: 2013-5-30 15:18

本帖最後由 GBKEE 於 2013-5-31 10:29 編輯

回復 1# peter460191
VBA 的說明
  1. Find 方法
  2. 套用至 Range 物件時用 Find 方法。
  3. 在範圍內尋找特定資訊,並傳回 Range 物件,該物件代表所找到的第一個包含所尋找資訊的儲存格。如果未發現符合的儲存格,就傳回 Nothing。本方法不影響指定範圍或目前儲存格。
  4. 關於在 Visual Basic 中使用 Find 工作表函數的詳細內容,請參閱在 Visual Basic 中使用 Microsoft Excel 工作表函數。
  5. expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)
  6. expression      必選。傳回 Range  物件的運算式。
  7. What     必選的 Variant。  要尋找的資料。可為字串或任意 Microsoft Excel 資料型式。
  8. After     選擇性的 Variant。  指定儲存格,尋找將從該儲存格之後開始。此儲存格對應於從使用者介面尋找時的使用中儲存格位置。注意 After 必須是尋找範圍中的單個儲存格。請記住尋找是從該儲存格之後   開始的;必須等到該方法循環回到此儲存格時,才會搜尋其內容。如果未指定此引數,搜尋將從範圍的左上角儲存格之後開始。
  9. LookIn     選擇性的 Variant資料類型。資訊的類型。
  10. LookAt      選擇性的 Variant。可為下列 XlLookAt 常數之一:xlWhole 或 xlPart。
  11. SearchOrder      選擇性的 Variant。可為下列 XlSearchOrder 常數之一:xlByRows 或 xlByColumns。
  12. SearchDirection     選擇性的 XlSearchDirection 資料類型。搜尋的方向。
  13. XlSearchDirection 可以是這些 XlSearchDirection 常數之一。
  14. xlNext 預設值
  15. xlPrevious
  16. MatchCase     選擇性的 Variant。若指定為 True,則搜尋時大小寫視為相異。預設值為 False。
  17. MatchByte     選擇性的 Variant。僅用於您選擇或安裝的雙位元語言支援版本。若指定為 True,就使雙位元組字元僅符合雙位元組字元。若指定為 False,則雙位元組字元可符合其等價的單位元組字元。
  18. SearchFormat     選擇性的 Variant。搜尋的格式。
複製代碼

作者: peter460191    時間: 2013-5-31 09:48

回復 2# GBKEE


    非常謝謝GBKEE 版主的指導,才疏學淺短時間無法明瞭深奧的內容,方便幫我改好程式碼以利研究嗎?謝謝您了!
作者: stillfish00    時間: 2013-5-31 10:20

本帖最後由 stillfish00 於 2013-5-31 10:23 編輯

回復 3# peter460191
MatchCase 選用  Variant
        如果為 True,則搜尋時會將大小寫視為相異。預設值為 False。

這個應該提示很明顯了,多看參數說明才能活用。
Set A = Columns("A:B").Find(Target, lookat:=xlWhole,MatchCase:=True)
作者: peter460191    時間: 2013-5-31 10:32

回復 4# stillfish00


    感謝stillfish00指導,已成功了,會仔細研究版主的說明,再一次謝謝兩位的指導,謝謝您!
作者: GBKEE    時間: 2013-5-31 10:36

回復 3# peter460191
4# stillfish00 的 Set A = Columns("A:B").Find(Target, lookat:=xlWhole,MatchCase:=True) 試試看
1#說:第一次查詢完後欲再查詢第二次時,就不能查詢 ,是何意!
作者: peter460191    時間: 2013-5-31 10:56

回復 6# GBKEE


    1#說:第一次查詢完後欲再查詢第二次時,就不能查詢,是何意!
意思是當c5儲存格選到大小寫其中一個時,再選另一個就不能動了
作者: Hsieh    時間: 2013-5-31 13:48

回復 7# peter460191
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. Static Mystr$
  3. Dim A As Range
  4. If Intersect(Target, [C5:C6]) Is Nothing Then Exit Sub '[C5:C6]為資料輸入位置,可任意改變
  5. Application.EnableEvents = False
  6. Set A = Columns("A:B").Find(Target, lookat:=xlWhole, MatchCase:=True) 'A:B為資料來源位置欄位,可任意改變
  7. If InStr(1, Mystr, Target, vbBinaryCompare) > 0 Then MsgBox "區分大小寫,已查詢過": GoTo 10 '區分大小寫
  8. 'If InStr(Mystr, Target) > 0 Then MsgBox "不分大小寫,已查詢過": GoTo 10 '不分大小寫
  9. If A Is Nothing Then MsgBox "輸入錯誤": [C5:C6] = "": GoTo 10 '[C5:C6]為資料輸入位置,可任意改變
  10. [C5] = Cells(A.Row, 1).Value '[C5:C6]為資料輸入位置,可任意改變
  11. [C6] = Cells(A.Row, 2) '[C5:C6]為資料輸入位置,可任意改變
  12. If Target.Address = "$C$5" Then Mystr = Mystr & "," & Target
  13. 10
  14. Application.EnableEvents = True
  15. End Sub
複製代碼

作者: peter460191    時間: 2013-5-31 14:47

回復 8# Hsieh


   謝謝 Hsieh 版主的程式,將仔細研究看看,非常謝謝您!




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