Cần khắc phục Code bị Debug (Tô màu vàng cho các ô chứa ngày tháng dọc theo cột B) (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

hung2412

Thành viên tích cực
Tham gia
5/8/08
Bài viết
929
Được thích
240
Giới tính
Nam
Xin chào các Anh chị và các bạn GPE!
Nhờ các Anh chị và các bạn giúp đỡ cho tôi vấn đề này với, cụ thể như sau:
Tôi có một bảng tính như vầy:

OqxTjHg.png


Dọc theo cột B có một số ô chứa ngày tháng (Ngày tháng được ngăn cách bởi ký tự /). Mục đích của tôi là tô màu vàng cho những ô chứa ngày tháng đó, kết quả mong muốn như hình dưới đây:

qcghAap.png


Để giải quyết bài trên, tôi thử xài Code sau:
[GPECODE=vb]Sub Search()
Dim i As Long
For i = 3 To 31
If WorksheetFunction.IsNumber(WorksheetFunction.Search("" / "", Cells(i, 2), 1)) = True Then
Cells(i, 2).Interior.ColorIndex = 6
End If
Next
End Sub[/GPECODE]
Code trên làm nhiệm vụ dò xem ô nào có chứa ký tự /(Ô đó cũng là ô ngày tháng) là sẽ tô màu vàng luôn.
=> Vấn đề được đặt ra ở đây là: Code trên bị Debug tại dòng 4 (Mà cụ thể ở đây là lệnh
WorksheetFunction.Search("" / "", Cells(i, 2), 1)) => Không hiểu là tại làm sao?
Mong các Anh chị và các bạn GPE chỉ giáo!
Trân trọng cảm ơn!
P/s: Có 01 File đính kèm.
 

File đính kèm

Nếu chịu khó Record Macros rồi "tu" cho nó 1 chút thì sang "Tây phương" nó được cái này:
PHP:
Public Sub GPE()
With Range("D3:D31")
    .AutoFilter Field:=1, Criteria1:="=*/*"
    .Interior.ColorIndex = 6
    .AutoFilter
End With
End Sub
Các ô Date thì không thể tìm cái dấu "/" trong đó đâu, vì Excel xem nó như Number, chẳng có cái dấu "/" nào trong đó.
PHP:
Public Sub GPE_2()
Dim Cll As Range
For Each Cll In Range("D3:D31")
    If Cll.Value Like "*/*" Or IsDate(Cll) Then
        Cll.Interior.ColorIndex = 6
    End If
Next Cll
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Xin chào các Anh chị và các bạn GPE!
Nhờ các Anh chị và các bạn giúp đỡ cho tôi vấn đề này với, cụ thể như sau:
Tôi có một bảng tính như vầy:
Dọc theo cột B có một số ô chứa ngày tháng (Ngày tháng được ngăn cách bởi ký tự /). Mục đích của tôi là tô màu vàng cho những ô chứa ngày tháng đó, kết quả mong muốn như hình dưới đây:



Để giải quyết bài trên, tôi thử xài Code sau:
[GPECODE=vb]Sub Search()
Dim i As Long
For i = 3 To 31
If WorksheetFunction.IsNumber(WorksheetFunction.Search("" / "", Cells(i, 2), 1)) = True Then
Cells(i, 2).Interior.ColorIndex = 6
End If
Next
End Sub[/GPECODE]
Code trên làm nhiệm vụ dò xem ô nào có chứa ký tự /(Ô đó cũng là ô ngày tháng) là sẽ tô màu vàng luôn.
=> Vấn đề được đặt ra ở đây là: Code trên bị Debug tại dòng 4 (Mà cụ thể ở đây là lệnh
WorksheetFunction.Search("" / "", Cells(i, 2), 1)) => Không hiểu là tại làm sao?
Mong các Anh chị và các bạn GPE chỉ giáo!
Trân trọng cảm ơn!
P/s: Có 01 File đính kèm.
cái này cần chi Vi bi Ây thêm 1 cột phụ sau đó xử ý 1 ít kỹ thuật nữa là tô được màu cho những ô là ngày tháng và những ô là ngày tháng nhưng gõ sai
 
Upvote 0
"" / "" có nghĩa là cái gì? Một chuỗi trống đem chia cho một chuỗi trống?
 
Upvote 0
"" / "" có nghĩa là cái gì? Một chuỗi trống đem chia cho một chuỗi trống?
Dạ, cái ký tự / là ký tự được ngăn cách ngày tháng năm (Ví dụ: 03/07/2014)
Lúc đầu tôi gõ là ""/"" (Không có khoảng trống chia cho khoảng trống) => Sau khi di con trỏ ra khỏi dòng đó thì nó tự biến thành "" / "" (Thành khoảng trống chia cho khoảng trống).
 
Upvote 0
Bạn hỏi về code ít lắm cũng vài chục bài, hỏi về "bị debug" cầu nửa tá. The mà cũng không biết chép lại cái câu bào lỗi nó ra sao.

vì không có câu báo lỗi cho nên người khác bắt buộc phải đoán. Theo lẽ thường thì worksheet function nếu không làm được sẽ bị lỗi (*).

nhưng ở đây, code của bạn chưa đi đến đó. Lúc chia "" cho "" nó đã bị lỗi type mismatch rồi. Lỗi ở đây là căn bản nhất, bạn theo học đã hàng trăm code rồi mà còn chưa biết cách thức viết mộit chuỗi. Có lẽ bạn nên dẹp bỏ ý định học code cấp tốc của mình đi và chịu khó đi từng bước lại từ đầu.

(*) nếu gọi qua application, nó sẽ trả về cái lỗi, và có thể dùng hàm iserror để xét.
 
Upvote 0
Code của bạn họa chăng sẽ tìm ra chuỗi như 27/5/1987, nếu không sai chính tả trong câu lệnh.

Còn dạng 12/12/2012 thì không thể tìm ra!

& chúc ngày cuối tuần vui vẻ!
 
Upvote 0
Bạn chạy thử code này
PHP:
Option Explicit
Sub ToVàngChoChuoi_XanhChoNgàyTháng()
 Dim Cls As Range, nRg As Range, sRg As Range
 Const Xx As String = "/"
 
 Set nRg = Sheet1.Columns("B:B").SpecialCells(xlCellTypeConstants, 1)
 If Not nRg Is Nothing Then
    For Each Cls In nRg
        If IsDate(Cls.Value) Then Cls.Interior.ColorIndex = 38
    Next Cls
 End If
 Set sRg = Sheet1.Columns("B:B").SpecialCells(xlCellTypeConstants, 2)
 If Not sRg Is Nothing Then
    For Each Cls In sRg
        If InStr(Cls.Value, Xx) Then Cls.Interior.ColorIndex = 35
    Next Cls
 End If
End Sub
 
Upvote 0
Bạn chạy thử code này
PHP:
Option Explicit
Sub ToVàngChoChuoi_XanhChoNgàyTháng()
 Dim Cls As Range, nRg As Range, sRg As Range
 Const Xx As String = "/"
 
 Set nRg = Sheet1.Columns("B:B").SpecialCells(xlCellTypeConstants, 1)
 If Not nRg Is Nothing Then
    For Each Cls In nRg
        If IsDate(Cls.Value) Then Cls.Interior.ColorIndex = 38
    Next Cls
 End If
 Set sRg = Sheet1.Columns("B:B").SpecialCells(xlCellTypeConstants, 2)
 If Not sRg Is Nothing Then
    For Each Cls In sRg
        If InStr(Cls.Value, Xx) Then Cls.Interior.ColorIndex = 35
    Next Cls
 End If
End Sub
Code này chỉ rõ là những ô đúng theo ngày tháng đích thực và những ô không phải là ngày tháng => Những ô đó thì tôi biết.
Mục đích tôi lập đề tài này là chủ yếu tại sao lệnh WorksheetFunction.Search("" / "", Cells(i, 2), 1)) bị lỗi (Bị lỗi cú pháp hay thiếu cái gì đấy).
 
Lần chỉnh sửa cuối:
Upvote 0
Code này chỉ rõ là những ô đúng theo ngày tháng đích thực và những ô không phải là ngày tháng => Những ô đó thì tôi biết.
Mục đích tôi lập đề tài này là chủ yếu tại sao lệnh WorksheetFunction.Search("" / "", Cells(i, 2), 1)) bị lỗi (Bị lỗi cú pháp hay thiếu cái gì đấy).
Trước khi bạn dùng VBA thì bạn cũng nên tham khảo qua cấu trúc hàm Seach.
Với hàm Search thì nó có công dụng là: Dùng để tìm vị trí bắt đầu của một chuỗi con (substring) trong một chuỗi do đó nó chỉ có tác dụng với chuỗi còn ngày tháng là dạng số nên không tìm thấy chuỗi con.

Để bắt tay vào VBA thì bạn cần phân biệt:
1/ Dạng dữ liệu: kiểu Text, kiểu Số (tôi thường chỉ chia dữ liệu nhập thành 2 dạng này thôi)
2/ Định dạng dữ liệu khác dang dự liệu.

Khi nắm chắc điều này bạn hãy bắt tay vào VBA thì các lỗi phát sinh bạn sẽ có cái nhìn tổng quát hơn
Học VBA mày mò như bạn là rất tốt, chúc bạn sẽ thành thạo VBA trong thời gian ngắn.
 
Upvote 0
Code này chỉ rõ là những ô đúng theo ngày tháng đích thực và những ô không phải là ngày tháng => Những ô đó thì tôi biết.
Mục đích tôi lập đề tài này là chủ yếu tại sao lệnh WorksheetFunction.Search("" / "", Cells(i, 2), 1)) bị lỗi (Bị lỗi cú pháp hay thiếu cái gì đấy).

Sao bạn không ghi mục đích này vô tiêu đề luôn!

Hay bạn định đánh đố mọi người suy nghĩ & tư duy của bạn?!?
 
Upvote 0
Code này chỉ rõ là những ô đúng theo ngày tháng đích thực và những ô không phải là ngày tháng => Những ô đó thì tôi biết.
Mục đích tôi lập đề tài này là chủ yếu tại sao lệnh WorksheetFunction.Search("" / "", Cells(i, 2), 1)) bị lỗi (Bị lỗi cú pháp hay thiếu cái gì đấy).
Lệnh của bạn bị lỗi cú pháp, đáng lẽ phải là WorksheetFunction.Search("/", Cells(i, 2), 1)). Nhưng khi sửa thành như vậy thì sẽ bị lỗi run-time khi hàm search không tìm thấy kết quả.
Bạn nên dùng lệnh If Instr(Cells(i,2),"/")>0 Then....
 
Upvote 0
Sao bạn không ghi mục đích này vô tiêu đề luôn!

Hay bạn định đánh đố mọi người suy nghĩ & tư duy của bạn?!?
Tôi đã ghi tiêu đề là "Cần khắc phục Code bị Debug..." và trong bài viết tôi có nói rõ là bị Debug tại dòng này WorksheetFunction.Search("" / "", Cells(i, 2), 1)) rồi mà.
P/s: Đánh đố gì đâu bạn, tôi không biết thì hỏi thôi ạ.
 
Upvote 0
Trước khi bạn dùng VBA thì bạn cũng nên tham khảo qua cấu trúc hàm Seach.
Với hàm Search thì nó có công dụng là: Dùng để tìm vị trí bắt đầu của một chuỗi con (substring) trong một chuỗi do đó nó chỉ có tác dụng với chuỗi còn ngày tháng là dạng số nên không tìm thấy chuỗi con.
Điều này không đúng dhn à. Khi dùng Search("/",A1) trên sheet, nếu A1 định dạng date sẽ báo lỗi VALUE. Nhưng khi dùng lệnh Application.WorksheetFunction.Search("/",Cells(1,1)) thì lại được, có thể VBA đã ép kiểu. Lỗi của tác giả ở đây là "" / "" bị type mismatch (code dừng khi i=3), khi sửa thành "/" thì không bị lỗi này nhưng sẽ gặp lỗi run-time "Unable to get search property" khi duyệt đến ô không chứa "/" (code dừng khi i=4). Để sửa thì thay Search bằng Instr, hàm này sẽ trả về 0 khi không tìm thấy kết quả.
 
Upvote 0
Ai kêu mọi người ngứa nghề chi ráng chịu. Mình đã cất nón chào lâu rồi.
 
Upvote 0
Lệnh của bạn bị lỗi cú pháp, đáng lẽ phải là WorksheetFunction.Search("/", Cells(i, 2), 1)). Nhưng khi sửa thành như vậy thì sẽ bị lỗi run-time khi hàm search không tìm thấy kết quả.
Bạn nên dùng lệnh If Instr(Cells(i,2),"/")>0 Then....
Nói như bạn là:
[GPECODE=vb]If Instr(Cells(i,2),"/")>0 Then....[/GPECODE]
=> Rất chính xác. Nó thay thế kiểu Search rất hiệu quả.
 
Upvote 0
... Lỗi của tác giả ở đây là "" / "" bị type mismatch (code dừng khi i=3), khi sửa thành "/" thì không bị lỗi này nhưng sẽ gặp lỗi run-time "Unable to get search property" khi duyệt đến ô không chứa "/" (code dừng khi i=4). Để sửa thì thay Search bằng Instr, hàm này sẽ trả về 0 khi không tìm thấy kết quả.

1. Tôi đã nhắc nhở chủ thớt tự xem lại cách trình bày hằng chuỗi (string literal). Nhưng chủ thớt không có vẻ phục thiện gì cả.

Lỗi type mismatch (vì con toán chia không thể thực hiện giữa hai vế chuỗi) xảy ra ngay khi vba tính chuỗi này để nạp thông số cho hàm search. Tức là trước khi vào hàm. Khi sửa thành chuỗi đàng hoàng rồi thì mới nạp vào hàm, và cái lỗi kia là do hàm không tìm thấy chuỗi con trong chuỗi mẹ.

Bài kế đó, tôi cũng có nhắc nhở cách bẫy lỗi không tìm thấy trong hàm search.

2. Nếu làm việc thuần với chuỗi thì đương nhiên hàm InStr hiệu quả nhất.

Ai kêu mọi người ngứa nghề chi ráng chịu. Mình đã cất nón chào lâu rồi.

Tôi thấy có mấy câu trả lời cho nên chủ ý giải thích ngữ pháp cho các bạn khác. Chứ còn chủ thớt thì tôi đã bảo là nên học lại từ căn bản. Càng cố học cấp tốc càng rối rắm về sau. Học code đến đó rồi mà cách viết chuỗi hằng cũng chưa thông!!!
 
Upvote 0
Web KT

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

Back
Top Bottom