Xử lý lỗi #NAME? bằng cách không hiển thị kết quả, chỉ hiển thị công thức

tuhocvba

Administrator
Thành viên BQT
Trong nhiều trường hợp, excel phát sinh lỗi mà chúng ta không hề mong muốn do sự nhanh nhẩu "cầm đèn chạy trước oto" của excel.
Ta hãy xét một tình huống như sau:
Tôi cần tạo một tool dịch phụ đề phim tự động. Input là file phụ đề (tiếng anh).
Nếu đọc file theo cách đọc từng dòng (mong muốn), thì đôi khi dữ liệu lấy từ file phụ đề tiếng anh không phân chia theo từng dòng.
(Từ đầu file tới cuối file là một chuỗi ký tự liền mạch không có xuống dòng-nguyên nhân: không rõ, nếu mở trên notepad++ thì hiển
thị theo dòng.)
Vì vậy, tôi buộc lòng phải sử dụng workbooks.open, tương đương với thao tác bằng tay đó là bạn mở một workbook trắng, sau đó dùng
tay thả file phụ đề vào workbook này.
Lúc này xuất hiện tình huống như sau, câu hội thoại có thể có dấu "-" ở đầu câu.
Ví dụ:
"-Vietnam"
Kết quả hiển thị trên excel sẽ là:
Mã:
#NAME?
Dễ hiểu hơn, bạn hãy gõ "-Vietnam" trên excel, lập tức sẽ ra lỗi như trên.
Tóm lại, đối với các chuỗi ký tự mà có kí tự công thức toán ở đầu, excel hiểu nhầm đó là công thức, từ đó tạo nên những lỗi không mong muốn.

Trong trường hợp của tôi, để giải quyết vấn đề "tự ý xài công thức" của excel, tôi sẽ sử dụng lệnh:
Mã:
ActiveWindow.DisplayFormulas = True
Lúc này trên excel sẽ không hiển thị kết quả của phép tính, mà thay vào đó nó sẽ hiển thị công thức của phép tính.
Giả sử trên excel, tại cells A1 tôi gõ "-Vietnam", thay vì hiển thị lỗi thì bây giờ nó hiển thị trên cells A1 là:
Mã:
=-Vietnam
Giả sử tôi có chương trình như sau:
Mã:
    Sub vidu()
        Dim temp    as string
        temp = Thisworkbook.sheets(1).cells(1,1).value
    End sub
Chương trình sẽ báo lỗi, để lấy được đoạn chuỗi ký tự mong muốn là "-Vietnam" ta sửa lại như sau:
Mã:
    Sub vidu()
        Dim temp    as string
        temp = Thisworkbook.sheets(1).cells(1,1).text    'Ta thu duoc ket qua temp = "=-Vietnam"
        if Mid(temp,1,1) = "=" then
            temp = Right(temp,len(temp)-1)    'Ta thu duoc ket qua temp = "-Vietnam"
        end if
    End sub
 
Top