Tìm kiếm và làm nổi bật một từ trong chuỗi ký tự dài

Liên hệ QC

phuongnaruto

Thành viên mới
Tham gia
20/2/14
Bài viết
1
Được thích
0
Các cao thủ cho em hỏi e sử dụng code sau để tìm kiếm một từ trong chuỗi ký tự dài thì nó đã bôi đỏ đậm cho em từ đó, nhưng sau đó em ctlr+z để từ đó trở về định dạng ban đầu do trong chuỗi text đó có nhiều loại định dạng khác nhau ngầm thể hiện ý nghĩa khác nhau, thì nó không thể trở về định dạng ban đầu được mà cố định bị bôi đỏ đậm luôn, các bác cao thủ giúp em với ạ.sau đây là code em sử dụng. Em xin đa tạ.

Sub GPE()

Application.ScreenUpdating = False

Dim Str As String, FindCll As Range, FindCLlAdd As String, i As Long

Str = InputBox("Nhap chuoi can tim:")

Set FindCll = Cells.Find(What:=Str, After:=[IV65536], LookAt:=xlPart)

If FindCll Is Nothing Then Exit Sub

FindCLlAdd = FindCll.Address

Do

i = 1

Do Until InStr(i, FindCll.Value, Str) = 0

i = InStr(i, FindCll.Value, Str)

With FindCll.Characters(Start:=i, Length:=Len(Str)).Font

.FontStyle = "Bold"

.Color = -16776961

End With

i = i + Len(Str)

Loop

Set FindCll = Cells.FindNext(After:=FindCll)

Loop Until FindCll.Address = FindCLlAdd

Application.ScreenUpdating = True

End Sub
 
Các cao thủ cho em hỏi e sử dụng code sau để tìm kiếm một từ trong chuỗi ký tự dài thì nó đã bôi đỏ đậm cho em từ đó, nhưng sau đó em ctlr+z để từ đó trở về định dạng ban đầu do trong chuỗi text đó có nhiều loại định dạng khác nhau ngầm thể hiện ý nghĩa khác nhau, thì nó không thể trở về định dạng ban đầu được mà cố định bị bôi đỏ đậm luôn, các bác cao thủ giúp em với ạ.sau đây là code em sử dụng. Em xin đa tạ.

Sub GPE()

Application.ScreenUpdating = False

Dim Str As String, FindCll As Range, FindCLlAdd As String, i As Long

Str = InputBox("Nhap chuoi can tim:")

Set FindCll = Cells.Find(What:=Str, After:=[IV65536], LookAt:=xlPart)

If FindCll Is Nothing Then Exit Sub

FindCLlAdd = FindCll.Address

Do

i = 1

Do Until InStr(i, FindCll.Value, Str) = 0

i = InStr(i, FindCll.Value, Str)

With FindCll.Characters(Start:=i, Length:=Len(Str)).Font

.FontStyle = "Bold"

.Color = -16776961

End With

i = i + Len(Str)

Loop

Set FindCll = Cells.FindNext(After:=FindCll)

Loop Until FindCll.Address = FindCLlAdd

Application.ScreenUpdating = True

End Sub
Chạy tiếp code này:
Mã:
Sub Undo_GPE()

Application.ScreenUpdating = False

Dim Str As String, FindCll As Range, FindCLlAdd As String, i As Long

Str = InputBox("Nhap chuoi can tim:")

Set FindCll = Cells.Find(What:=Str, After:=[IV65536], LookAt:=xlPart)

If FindCll Is Nothing Then Exit Sub

FindCLlAdd = FindCll.Address

Do

i = 1

Do Until InStr(i, FindCll.Value, Str) = 0

i = InStr(i, FindCll.Value, Str)

With FindCll.Characters(Start:=i, Length:=Len(Str)).Font

.FontStyle = "Regular"

.ColorIndex = xlAutomatic

End With

i = i + Len(Str)

Loop

Set FindCll = Cells.FindNext(After:=FindCll)

Loop Until FindCll.Address = FindCLlAdd

Application.ScreenUpdating = True

End Sub
 
Bạn tham khảo qua bài viết này

 
Các cao thủ cho em hỏi e sử dụng code sau để tìm kiếm một từ trong chuỗi ký tự dài thì nó đã bôi đỏ đậm cho em từ đó, nhưng sau đó em ctlr+z để từ đó trở về định dạng ban đầu do trong chuỗi text đó có nhiều loại định dạng khác nhau ngầm thể hiện ý nghĩa khác nhau, thì nó không thể trở về định dạng ban đầu được mà cố định bị bôi đỏ đậm luôn, các bác cao thủ giúp em với ạ.sau đây là code em sử dụng. Em xin đa tạ.

Sub GPE()

Application.ScreenUpdating = False

Dim Str As String, FindCll As Range, FindCLlAdd As String, i As Long

Str = InputBox("Nhap chuoi can tim:")

Set FindCll = Cells.Find(What:=Str, After:=[IV65536], LookAt:=xlPart)

If FindCll Is Nothing Then Exit Sub

FindCLlAdd = FindCll.Address

Do

i = 1

Do Until InStr(i, FindCll.Value, Str) = 0

i = InStr(i, FindCll.Value, Str)

With FindCll.Characters(Start:=i, Length:=Len(Str)).Font

.FontStyle = "Bold"

.Color = -16776961

End With

i = i + Len(Str)

Loop

Set FindCll = Cells.FindNext(After:=FindCll)

Loop Until FindCll.Address = FindCLlAdd

Application.ScreenUpdating = True

End Sub
Bạn cần phải biết rằng chạy macro là 1 tác động không thể đảo ngược. Do đó muốn tránh những ảnh hưởng không mong muốn do macro gây ra, trước khi chạy bạn cần lưu file, để sau khi chạy thấy không vừa ý thì đóng file và đừng lưu.
 
Chạy tiếp code này:
Mã:
Sub Undo_GPE()

Application.ScreenUpdating = False

Dim Str As String, FindCll As Range, FindCLlAdd As String, i As Long

Str = InputBox("Nhap chuoi can tim:")

Set FindCll = Cells.Find(What:=Str, After:=[IV65536], LookAt:=xlPart)

If FindCll Is Nothing Then Exit Sub

FindCLlAdd = FindCll.Address

Do

i = 1

Do Until InStr(i, FindCll.Value, Str) = 0

i = InStr(i, FindCll.Value, Str)

With FindCll.Characters(Start:=i, Length:=Len(Str)).Font

.FontStyle = "Regular"

.ColorIndex = xlAutomatic

End With

i = i + Len(Str)

Loop

Set FindCll = Cells.FindNext(After:=FindCll)

Loop Until FindCll.Address = FindCLlAdd

Application.ScreenUpdating = True

End Sub
Rủi quên mất từ nhập trước đó là từ gì ..., có cách nào lấy lại không :p
 
Rủi quên mất từ nhập trước đó là từ gì ..., có cách nào lấy lại không :p
Cái đó là điểm mà cao thủ (pờ-rồ) khác với tôn sư (gu-ru).
Trước khi làm người ta cần hỏi lại xem người hỏi đã suy nghĩ chính chắn về điều muốn hay chưa. Trừ phi bạn thích code kiểu tới đâu sửa đến đấy.

Loại "cho phép hồi phục" này khó lắm. Bạn cần tạo một cấu trúc kiểu ngăn xếp (stack). Trữ các dữ liệu trước khi thay đổi, cứ mỗi lượt thay là một lượt đưa vào ngăn xếp. Lúc cần hồi phục thì móc ra. (*1)
Vì vậy, cần phải hỏi thớt rất nhiều chi tiết. Một trong những chi tiết là số lượng (*2).
Nếu chỉ chỉnh sửa nhỏ (1 tới 5 lượt, dữ liệu chỉ một con số, một từ) thì dùng một biến (User Type).
Nếu chỉnh sửa nhiều hơn (tới 10 lượt, dữ liệu vài con số) thì phải viết mọt class module và lập một biến đối tượng trên class đó.
Nhiều hơn nữa thì phải dùng một (hidden) sheet để chứa.
Và nhiều hơn nữa thì phải dùng copy phiên bản (kiểu temp file của Microsoft)

(*1) nếu chơi trội, cho phép cả "undo" và "redo" thì phải tạo hai ngăn xếp. Một cái "undo", và một cái "redo". Mỗi lần móc một ngăn từ "undo" ra thì nhét vào "redo".

(*2) rất tiếc là ở môi trường khác, người ta rất khiêm tốn về số lượng, có 10 người ta khai là chỉ có 7-8. Người thiết kế tự động cộng thêm "độ nở dung sai" (fudge factor) khoảng 50-100%.
Ở môi trường GPE, tôi chưa gặp người nào khiêm tốn số lượng, toàn là đồ trăm ngàn đến triệu không hà.
 
Web KT
Back
Top Bottom