Board logo

標題: 字串中某幾個字元變色 [打印本頁]

作者: rph    時間: 2011-4-12 17:34     標題: 字串中某幾個字元變色

請教各位如何可以做的到!

我頂多只能做到儲存格變色


譬如 :

   輸入 AAA
   符合的字串111AAA333
   顯示的時候,把111AAA333字串中的AAA變色
作者: yanto913    時間: 2011-4-13 09:20

A1輸入AAA,B1輸入111AAA333
  1. Private Sub CommandButton1_Click()
  2.   On Error Resume Next
  3.     xx = Len([a1])
  4.     yy = Application.Search([a1], [b1])
  5.     Range("B1").Select
  6.     With ActiveCell.Characters(Start:=yy, Length:=xx).Font
  7.         .ColorIndex = 3
  8.     End With
  9. End Sub
複製代碼

作者: rph    時間: 2011-4-13 10:37

這是我之前寫的程式碼,語法如有使用錯誤,請多包涵(因為我是自學)
順便在此感謝yanto913 的協助!!我在DEBUG中,已了解你寫的方式
再請教一下!!
Application.Search([a1], [b1])在EXCEL VBA功能索引式參考手冊,我找不到用法!!
可否說明一下這句的語法及為何要用"[]"
Sub 按鈕4_Click()

   Dim A As String
   
    A = InputBox("字  串", "請 輸 入 字 串")
   
    MsgBox A
   
    Cells(1, 5) = A
   
    B = 2
   
    ActiveSheet.Range("I41000").Clear
   
    Do Until InStr(1, Cells(B, 2).Value, A, 1)
     
        B = B + 1
      
       If B >= 100 Then
      
       MsgBox "您輸入的姓名是:   " & A, vbOKOnly + vbCritical, Title:="查無此字串"
      
       A = InputBox("請重新輸入字串")
      
       B = 2
      
       End If
      
     Loop
   
    X = 4
   
    For B = 2 To 100
     
      If InStr(1, Cells(B, 2).Value, A, 1) Then
      
            
         Cells(X, 9) = Cells(B, 1)
         
         Cells(X, 10) = Cells(B, 2)
         
         Cells(X, 11) = Cells(B, 3)
         
         Cells(X, 12) = Cells(B, 4)
         
         XX = Len(Cells(1, 5).Value)

         yy = Application.Search(Cells(1, 5).Value, Cells(X, 10).Value)

         Cells(X, 10).Select

         With ActiveCell.Characters(Start:=yy, Length:=XX).Font
         
           .Bold = True
           
           .ColorIndex = 3

         End With
                              
         X = X + 1
         
      End If
      
    Next
   
End Sub
作者: Hsieh    時間: 2011-4-13 14:14

這問題要牽涉到搜尋字串的搜尋模式問題
以此例來說如果搜尋直指輸入A
那要3個A都變色還是第一個A變色?
作者: GBKEE    時間: 2011-4-13 15:18

本帖最後由 GBKEE 於 2011-4-13 15:19 編輯

回復 3# rph
加上   Application.Search  的函數 是使用工作表的函數   
正式的語法為  Application.WorksheetFunction.Search
可否說明一下這句的語法及為何要用"[]"

[ ] =Application.Evaluate方法
  1. Sub Ex()
  2. MsgBox Application.Evaluate("Sheet1!a1").Address
  3. MsgBox [Sheet1!a1].Address
  4. End Sub
複製代碼

作者: rph    時間: 2011-4-13 16:56

1.先回應Hsieh版大
我的小程式就只認我輸入的字串,譬如輸入"A",那字串中"123AAA444",就第1個"A"變色
因為我的程式主要功能就是輸入KEY之後,就找出符合KEY之資料,並且列出

2.再請教一下GBKEE,我剛才RUN了你的程式碼,MSGBOX出現$A$1的絕對位址訊息,這樣是代表???

3.工作表函數在哪可查的到???我看EXCEL的函數裡有SEARCH這個函數
作者: GBKEE    時間: 2011-4-13 17:22

回復 6# rph
Address 的用法可看 VBA的說明
VBA 可用工作表函數說明尋找如圖

[attach]5339[/attach]
作者: rph    時間: 2011-4-13 17:32

我剛才已去了解,也了解了[ ] =Application.Evaluate方法,感謝您的說明!
作者: Hsieh    時間: 2011-4-13 18:17

回復 6# rph
  1. Private Sub CommandButton1_Click()
  2. Dim A As Range
  3. fc = InputBox("輸入字串", , "A")
  4. s = Len(fc)
  5. For Each A In UsedRange
  6.    k = InStr(A, fc)
  7.    If k > 0 Then A.Characters(k, s).Font.ColorIndex = 3
  8. Next
  9. End Sub
複製代碼

作者: rph    時間: 2011-4-14 10:55

本帖最後由 rph 於 2011-4-14 11:48 編輯

TO Hsieh
今天我已將版主的程式碼貼到EXCEL測試,測試OK(我有把第5行的USEDRANGE改成RANGE("A1:A6"),要不然會有錯誤)
DIM A AS RANGE 就是宣告A為RANGE物件  P.S我剛有測試,沒宣告程式一樣可以跑,可否說明差異??
For Each A In Range("A1:B6") 這行程式碼是否代表將"A1儲存格的值"放入"A",再去作判斷,再來就變成"A2儲存格的值"放入"A",以此類推

感謝!!
作者: Hsieh    時間: 2011-4-14 11:10

回復 10# rph
  1.     Private Sub CommandButton1_Click()
  2. Dim A As Range
  3. fc = InputBox("輸入字串", , "A") '輸入欲搜尋字元
  4. s = Len(fc) '輸入字串的字元數
  5. For Each A In UsedRange '在按鈕所在工作表的已使用儲存格中作迴圈
  6.    k = InStr(A, fc)  '欲搜尋字元在儲存格中第幾個字元出現
  7.    If k > 0 Then A.Characters(k, s).Font.ColorIndex = 3  'K>0表示有這個字串存在,就將儲存格第k字元開始取s個字元長度改為紅色字體
  8. Next
  9. End Sub
複製代碼
你必須改掉usedrange才能使用,應該是你的程式是寫在一般模組,不是工作表模組的原因
改成ActiveSheet.UsedRange就會去把作用中的工作表所有被使用儲存格做檢查




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