hungdiep85
Thành viên thường trực
- Tham gia
- 1/6/09
- Bài viết
- 218
- Được thích
- 23
- Giới tính
- Nam
Sub ToMau()
Dim Cll As Range, Val As String, Pos1 As Long, Pos2 As Long
For Each Cll In Selection
Val = Cll.Value
Pos1 = InStr(Val, "(")
Do While Pos1 > 0
Pos2 = InStr(Pos1, Val, ")")
If Pos2 = 0 Then Exit Do
Cll.Characters(Pos1 + 1, Pos2 - Pos1 - 1).Font.Color = vbRed
Pos1 = InStr(Pos2, Val, "(")
Loop
Next
End Sub
Nhìn code của Bác xong quay qua nhìn cái code của em. thấy code em củ chuối quáChọn vùng muốn áp dụng và chạy code.
Mã:Sub ToMau() Dim Cll As Range, Val As String, Pos1 As Long, Pos2 As Long For Each Cll In Selection Val = Cll.Value Pos1 = InStr(Val, "(") Do While Pos1 > 0 Pos2 = InStr(Pos1, Val, ")") If Pos2 = 0 Then Exit Do Cll.Characters(Pos1 + 1, Pos2 - Pos1 - 1).Font.Color = vbRed Pos1 = InStr(Pos2, Val, "(") Loop Next End Sub
Ai cũng có thuở ban đầu thôiNhìn code của Bác xong quay qua nhìn cái code của em. thấy code em củ chuối quá
Bác có thể giúp em cái pattern được không? em xài cái này "(?<=\()(.*?)(?=\))" mà sao không lúc .execute(..) thì nó bị lỗiAi cũng có thuở ban đầu thôi
Trong mỗi ngôn ngữ hơi khác nhau.Bác có thể giúp em cái pattern được không? em xài cái này "(?<=\()(.*?)(?=\))" mà sao không lúc .execute(..) thì nó bị lỗi
Cảm ơn bác đã phản hồi!Trong mỗi ngôn ngữ hơi khác nhau.
Cái "VBScript.RegExp" mà bạn sử dụng chỉ phục vụ:
1. (?: pattern) - không có dấu cách trước p
2. Zero-width positive lookahead assertion: (?=pattern)
3. Zero-width negative lookahead assertion: (?!pattern)
Cái "VBScript.RegExp" mà bạn sử dụng KHÔNG phục vụ Positive and Negative Lookbehind: (?<=pattern) và (?<!pattern)
Bạn đang dùng dạng (?<=pattern) <- (?<=\()
Tôi cũng thấy buồn là không được dùng (?<=pattern) và (?<!pattern)
Thì dùng như HeSanbi giới thiệu thôi chứ xoay xở làm gì nữa? Tức "\((.*?)\)"Cảm ơn bác đã phản hồi!
Em thấy regexp rất thú ví, nhưng "khó" quá
Đối với bài trên, bác có pattern nào xử lý được vấn đề này không chia sẻ cho em học hỏi với ạ
Sub ToMau(ByVal vung As Range, Optional ByVal mau As Long = 255)
' Vung: 1 hoặc nhiều cell
' macro To Mau cac doan trong ngoac. Vd. o co gia tri "Ngay mai (em di). Bien nho (ten em) goi ve" thì 2 doan "Em di" va "ten em" se duoc to mau
Dim s As String, cell_ As Range, match As Object, re As Object
Set re = CreateObject("VBScript.RegExp")
With re
.Global = True
.Pattern = "\((.*?)\)"
End With
For Each cell_ In vung
s = cell_.Value
For Each match In re.Execute(s)
cell_.Characters(match.FirstIndex + 2, match.Length - 2).Font.Color = mau
Next match
Next cell_
Set re = Nothing
End Sub
Sub test()
ToMau ThisWorkbook.Worksheets("Sheet1").Range("A1:A2"), RGB(0, 0, 255)
End Sub