Giải thích giùm lỗi sung đột giữa CF và Inputbox

Liên hệ QC

Po_Pikachu

Po_pikachu@ymail.com
Tham gia
29/4/08
Bài viết
2,209
Được thích
3,572
Nghề nghiệp
#VALUE!
Trong lúc nghiên cứu code em có phát hiện thấy 1 điều như vầy. Em tình cờ phát hiện có sự sung đột giữa Conditional Formatting với Inputbox. Cụ thể là vùng được chọn là G4:J14 được CF để xem số trùng nhau bằng công thức =countif($G$4:J$14,G4)>1 thì code Inputbox báo lỗi không nhận dạng được dữ liệu Nothings. Vậy không biết code em sai chỗ nào và tại sao sai?
PHP:
Sub chay() Dim vung As Range Set vung = Application.InputBox(Prompt:="Quet chon vung", Type:=8) r = vung.Row + 1 c = 23 For i = 0 To 99 If (Application.WorksheetFunction.CountIf(vung, i) = 0) Then     Cells(r, c).NumberFormat = "* 00"     Cells(r, c) = i     r = r + 1     Select Case r / (vung.Row + 10)     Case 1     r = vung.Row + 1     c = c + 1     End Select End If Next End Sub
Mọi người xem file và thực hiện thử sẽ thấy! Mong nhận lời hồi âm! Thân.
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn Po_Pikachu mến,

Code trên thì không có gì sai cả. Khi vùng có CF mà trong VBA có lệnh inputbox thì con ếch xèo lại quá ra là con gà ... mù.

Chẳng những thế, dùng VBA để đếm các ô có CF theo màu sắc cũng giuộc luôn.

Để khắc phục vấn để trên bạn phải dùng userform để lấy chi tiết tên vùng rồi mới ghép nó vô hàm countif để tính. Bạn vào link nầy để tham khảo thêm nhé.
 
Upvote 0
Cảm ơn bạn đã quan tâm. Nhưng có thể cho em biết lý do được không! Theo em hiểu inputbox chỉ lấy vị trí thôi chứ có đá động gì tới dữ liệu đâu mà lại không chịu chạy. Còn CF chỉ thêm màu khi thỏa điều kiện thôi, cũng đâu có làm thay đổi giá trị của ô đâu? Thanks.
 
Lần chỉnh sửa cuối:
Upvote 0
Trong lúc nghiên cứu code em có phát hiện thấy 1 điều như vầy.
Em tình cờ phát hiện có sự sung đột giữa Conditional Formatting với Inputbox. Cụ thể là vùng được chọn là G4:J14 được CF để xem số trùng nhau bằng công thức =countif($G$4:J$14,G4)>1 thì code Inputbox báo lỗi không nhận dạng được dữ liệu Nothings. Vậy không biết code em sai chỗ nào và tại sao sai?
PHP:
Sub chay()
Dim vung As Range
Set vung = Application.InputBox(Prompt:="Quet chon vung", Type:=8)
r = vung.Row + 1
c = 23
For i = 0 To 99
If (Application.WorksheetFunction.CountIf(vung, i) = 0) Then
    Cells(r, c).NumberFormat = "* 00"
    Cells(r, c) = i
    r = r + 1
    Select Case r / (vung.Row + 10)
    Case 1
    r = vung.Row + 1
    c = c + 1
    End Select
End If
Next
End Sub
Mọi người xem file và thực hiện thử sẽ thấy!
Mong nhận lời hồi âm!
Thân.

Tôi chẳng thấy sai chỗ nào cả. Copy code vào Module chạy tốt mà.
 
Upvote 0
Cảm ơn bạn đã quan tâm. Nhưng có thể cho em biết lý do được không! Theo em hiểu inputbox chỉ lấy vị trí thôi chứ có đá động gì tới dữ liệu đâu mà lại không chịu chạy.
Còn CF chỉ thêm màu khi thỏa điều kiện thôi, cũng đâu có làm thay đổi giá trị của ô đâu?
Thanks.

Đó chỉ là lổi trong lập trình trong XL thôi. Khi viết lập trình cho 1 nhu liệu lớn có tầm cở sữ dụng rộng rải như MS Office thì nếu Microsoft không khám phá cái lổi nào đó thì sau nầy cũng có người tìm ra. Lổi này đã được người ta khám phá sau này khi version XL 2003 đã ra lò. Microsoft đã sửa lổi này trong phiên bản 2007 nhưng không thèm rớ tới cái version trước. Nhìn từ góc cạnh kinh doanh thì nếu cứ vá đi vá lại cái áo cũ thì làm sao họ bán được cái áo mới.

Dùng code trong link trên tôi đã chỉnh lại code của bạn rồi đó để chạy dùng trong các XL version cũ hơn 2007.

Còn code nguyên thủy thì không có vấn đề nếu chạy trong XL 2007.

À, có trúng số thì đừng quên tui nha. :->
 

File đính kèm

Upvote 0
Cảm ơn bạn nhiều! Mình cũng ham vui nghiên cứu chút đỉnh mà lại gặp sự cố ngoài ý muốn thôi! Còn nếu có trúng số độc đắt thì chắc sẽ khao bạn 1 chầu! Nhưng khó quá bạn ơi, tới giờ này rồi mà chẳng có con số nào thèm cả! Chúc bạn vui vẻ! Thân.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom