Sửa giúp lỗi code

Chia sẻ bởi:hands
★★★★★
Quảng cáo

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

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

www.giaiphapexcel.com/diendan/threads/s%E1%BB%ADa-gi%C3%BAp-l%E1%BB%97i-code.165104/

Khóa học Power PI – Ứng dung trong Nhân sự
Khóa học SprinGO phù hợp

Khóa học Power PI – Ứng dung trong Nhân sự

TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...

Xem khóa học
★★★★★ 5 ★ 1 👤 1 ▥ 0
Quảng cáo

Bạn nên đọc

One Response

  1. hands says:

    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

    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.

Leave a Reply

Your email address will not be published. Required fields are marked *

Quảng cáo

Cũ vẫn chất

Xem thêm