Sửa giúp lỗi code

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

kingwizard

Thành viên mới
Tham gia
23/7/16
Bài viết
36
Được thích
1
Chào mọi người
Chuyện là mình tìm được đoạn macro này trên mạng, để đổi màu 1 phần đoạn text mong muốn, thì khi chạy tuy báo lỗi nhưng nó vẫn đổi màu đoạn text
Mọi người xem giúp mình làm sao để không báo lỗi Run-time error '13': Type mismatch nữa với
Cảm ơn mọi

Public Sub ChgTxtColor()
Set myRange = Range("A1:A1000") 'The Range that contains the substring you want to change color
substr = "Test" 'The text you want to change color
txtColor = 3 'The ColorIndex which repsents the color you want to change

For Each myString In myRange
lenstr = Len(myString)
lensubstr = Len(substr)
For i = 1 To lenstr
tempString = Mid(myString, i, lensubstr)
If tempString = substr Then
myString.Characters(Start:=i, Length:=lensubstr).Font.ColorIndex = txtColor
End If
Next i
Next myString
End Sub
 
PHP:
Public Sub ChangeTextColor()
Const substr = "Test" 'The text you want to change color'
Const txtColor = 3 'The ColorIndex which repsents the color you want to change'

Dim myRange as range, oCell as range, myString as string, tempString as string
Dim lenStr as long, lenSubStr as long, i as long

Set myRange = Range("A1:A1000") 'The Range that contains the substring you want to change color'
lensubstr = vba.Len(substr)

For Each oCell In myRange
myString = oCell.Value2
lenstr = vba.Len(myString)

For i = 1 To lenstr
tempString = VBA.Mid$(myString, i, lensubstr)
If tempString = substr Then
oCell.Characters(Start:=i, Length:=lensubstr).Font.ColorIndex = txtColor
End If
Next i
Next oCell
End Sub
 
Upvote 0
Cám ơn đã xem giúp ạ, nhưng vẫn bị lỗi
Debug thì nó chỉ vào dòng này myString = oCell.Value2
Bạn xem giúp mình với
 
Upvote 0
Mình úp cái file đó lên đây.
 
Upvote 0
Upvote 0
Cái lỗi gốc là bạn khai báo các tham biến không tường minh;
Khai báo thật tường minh thì sẽ tự thấy lỗi
Phải tự nhìn ra lỗi của mình hay macro mà mình thu lượm được mới trở thành của mình 1 cách thật sự;
 
Upvote 0
Cuối cùng chẳng thấy mình úp nhỉ --=0
 
Upvote 0
Upvote 0
Hỏi bác tí nhé.
Khi thêm chữ VBA thì khác gì so với không thêm nhỉ?
Và hàm mid đô la nó nghĩa là gì?
Vì xóa hết nó vẫn chạy, mà thêm vào thì chỗ thêm chỗ không nên hơi khó hiểu. Bí ẩn quá.
Tôi trả lời giùm hắn:

Về dâu $:
Ngày xưa, máy tính ít bộ nhớ, mà tên biến thì tốn bộ nhớ cho nên một số phiên bản Basic có tiêu chuẩn dùng ký hiệu để khai báo kiểu biến. Ký hiệu $ dùng cho các biến string và hàm trả vè string.
Hàm MID$ trên căn bản là in hệt như hàm MID. Trên code và cách kết nối hàm thì có $ nhanh hơn không có (*1).

Về tiền tố không gian định danh (namespace) VBA:
Trên nguyên tắc, hàm và biến, hằng phải có không gian định danh (với VBA thì là khai báo ở module hay thư viện nào)
Các hàm của VBA thì thuộc về VBA, các hàm của bảng tính thì thuộc về Application.WorksheetFunction.
Một trong những lý do của không gian định danh giúp người viết code thoải mái đặt tên biến và hàm, không cần phải xem xét là tên ấy đã được dùng (ở nơi khác) chưa.

Về VBA. MID$:
Thực ra, bình thường thì bạn có thẻ viết MID$. Trong VBA, các hàm và biến, hằng được mặc định là thuộc về không gian định danh VBA. Chỉ khi nào bạn có khai báo môt hàm MID$ (trùng tên) trong code của mình thì hàm MID$ ấy mặc địnhkhôn gian địnhn danh là module của bạn. Lúc ấy, muốn gọi MID$ nguyên bản VBA thì bạn phải gọi VBA.MID$
Bạn kia cố tình gán tiền tố VBA vì có thể code y nằm trong thư viện để giành
Y bắt buộc phải viết thế để khẳng định hàm. Lúc ấy cái thư viện có chứa hàm MID$ do y tự viết hay không hoàn toàn không là vấn đề.

Chú thich:
(*1) Một trong những thành viên thuộc nhóm mà tôi vẫn giới thiệu là nghề lập trình chỉ có thể hơn chứ không thua tôi đã có bài viết ở GPE về vụ "tốc độ" này.
Vì vậy, nhiều người đổi sang dùng.
Tôi theo trường phái của dân chuyên Hướng Đối Tượng cho nên tránh ràng buộc tên biến không cần thiết.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom