Đố vui về VBA!

Liên hệ QC

anhtuan1066

Thành viên gạo cội
Tham gia
10/3/07
Bài viết
5,802
Được thích
6,911
Nhằm cũng cố kiến thức về VBA cho các bạn mới bắt đầu và cả những bạn đang ứng dụng mà chưa hiểu nhiều về nó, tôi mở topic này với mong mõi qua những câu hỏi vui, các bạn sẽ nhận định lại sự hiểu biết cũa mình... (Kễ cã chính tôi cũng đang tập tành nên có rất nhiều cái chưa biết)
Mong rằng topic sẽ mang đến cho các bạn những khám phá thú vị với những cái tưỡng chừng như đã biết
Mong nhận dc bài viết về câu đố cũa các cao thủ! Còn các bạn mới thì đừng ngại khi đưa ra ý kiến cũa mình.. Có sai có sữa sẽ hoàn thiện!
Tôi xin mỡ màn trước bằng 1 câu hỏi đơn giãn
ANH TUẤN

CÂU HỎI 1: Tại sao biến K ko hoạt động?
Tôi muốn khi nhấn vào 1 button thì cell A1 sẽ tăng lên 1 đơn vị... Tôi đã làm như sau:
-Tạo 1 Command Button (nút nhấn thuộc thanh Control Toolbox), click phải chuột lên nút nhấn, chọn View code, rồi gõ vào đoạn code sau:
PHP:
Private Sub CommandButton1_Click()
   K = K + 1
   Range("A1").Value = K
End Sub
Ban đầu K chưa có gì, xem như =0, nhấn nút lần thứ nhất thì K dc tăng thêm 1, vậy K hiện tại sẽ bằng 1, và gán K vào cell A1 thì đương nhiên A1 sẽ =1... Nhấn nút lần 2, K lại dc tăng thêm 1 nên hiện tại K sẽ =2 và cell A1 cũng sẽ =2... vân vân.. từ đó diễn tiến tiếp...
Hi.. hi.. Điều này nghe qua có vẽ rất hợp lý, ấy thế mà khi nhấn nút nó chỉ hoạt động dc duy nhất 1 lần (A1 = 1) rồi thôi ko nhút nhít nữa...
Các bạn có thể giãi thích tại sao lại như thế ko? Tại sao những lần nhấn nút sau đó K lại ko tăng thêm tí nào (vì thực tế A1 vẫn cứ = 1 hoài) ?
ANH TUẤN
 
Nếu số sheet không ẩn trong file bé hơn 16 thì trong 16 Control đó, cái nào không phải tên sheet thì đều là cái chuỗi tào lao đó.
Trong một hàng dài có một đám TÀO LAO, gọi TÀO LAO thì thằng TÀO LAO đứng trước sẽ nghe :D

Có một trường hợp đặc biết khá buồn cười: sheet không ẩn cũng có tên TÀO LAO luôn +-+-+-+ (lại phải để ý vụ này)
 
Lần chỉnh sửa cuối:
Upvote 0
Có một trường hợp đặc biết khá buồn cười: sheet không ẩn cũng có tên TÀO LAO luôn +-+-+-+ (lại phải để ý vụ này)
Vụ này thì em không biết.
Cũng không có ai khác tham gia nên thôi công bố đáp án luôn
PHP:
Sub IX()
With Application.CommandBars("Workbook Tabs")
    If .Controls(9).Caption = "&Sheet List" Then
        MsgBox "File hien tai chi co " & (.Controls("&Sheet List").Index - 1) & " sheet khong an"
    Else
        MsgBox "Sheet khong an thu 9 la: " & Replace(.Controls(9).Caption, "&&", "&")
    End If
End With
End Sub
 

File đính kèm

  • IX.xls
    45.5 KB · Đọc: 8
Upvote 0
đố vui mà vui đâu hổng thấy , nghĩ nát nước mà không ra . hic
 
Upvote 0
Upvote 0
Vậy bạn thử câu này thử có vui không nha :D
--
Thủ tục sau có khi nào bị lỗi không
PHP:
Sub CoLoiKhong()
ActiveCell.Value = ActiveCell.Value
End Sub
Gợi ý thêm một trường hợp: Khi không có ActiveCell (ActiveCell Is Nothing = True) thì sẽ báo lỗi. Vậy khi nào thì không có ActiveCell?
 
Upvote 0
Gợi ý thêm một trường hợp: Khi không có ActiveCell (ActiveCell Is Nothing = True) thì sẽ báo lỗi. Vậy khi nào thì không có ActiveCell?
Cái này hình như hay nè. Vì 1 cái quỷ khác đang active thí dụ như là 1 shape, 1 picture, 1 chart, ... nói chung là 1 object hỏng phải cell
 
Upvote 0
Cái này hình như hay nè. Vì 1 cái quỷ khác đang active thí dụ như là 1 shape, 1 picture, 1 chart, ... nói chung là 1 object hỏng phải cell

Dù Shape có đang Active thì vẫn tồn tại ActiveCell mà sư phụ nên code sẽ không lỗi
Trên Excel, có ít nhất 2 chỗ mà chắc chắn "nơi ấy" không có cái ActiveCell nào cả
Ngoài ra, vẫn còn 1 "chỗ" nữa có activecell đàng hoàng nhưng bác Bill không cho thay đổi ActiveCell
 
Upvote 0
Em tìm thấy 1 lỗi khi Activecell ở trong vùng PivotTable (chưa choose fields nào).
Kết quả: Error 400.
 
Upvote 0
Thủ tục sau có khi nào bị lỗi không
PHP:
Sub CoLoiKhong()
ActiveCell.Value = ActiveCell.Value
End Sub
Đáp án (theo mình, ai có đáp án khác thì bổ sung giúp nhé)
1. Khi Activesheet là một Chart (sẽ không có ActiveCell)
2. Khi Activesheet là một DialogSheet(sẽ không có ActiveCell)
3. Khi ActiveCell được định dạng ngày và có giá trị âm
4. Khi ActiveCell được định dạng ngày và có giá trị lớn hơn 2.958.465 (ngày 31/12/9999)

Mục đích của câu đố này là muốn các bạn chú ý đến trường hợp 3 và 4 để sau này có gặp thì biết. Mình từng gặp lỗi này khi gán giá trị từ một mảng vào một vùng và lúc đó không biết vì sao lỗi (Không phải là 1 ô mà là cả vùng lớn nên chả biết vì sao mình lỗi)

Cách khắc phục là khi gán dữ liệu xuống sheet thì dùng .Value2, sẽ không bị lỗi này.
 
Upvote 0
Câu mới

Tôi có một thủ tục như sau:
PHP:
Sub ViDu()
Dim SoA As Long, SoB As Long, KetQua1 As Long, KetQua2 As Long
'...
KetQua1 = SoA And SoB
KetQua2 = SoA Or SoB
End Sub
Đố các bạn ý nghĩa và nguyên tắc tính của KetQua1 và KetQua2
 
Upvote 0
Tôi có một thủ tục như sau:
PHP:
Sub ViDu()
Dim SoA As Long, SoB As Long, KetQua1 As Long, KetQua2 As Long
'...
KetQua1 = SoA And SoB
KetQua2 = SoA Or SoB
End Sub
Đố các bạn ý nghĩa và nguyên tắc tính của KetQua1 và KetQua2

Nhớ lúc trước có làm 1 lần trò này rồi
Ẹc... Ẹc... thí nghiệm rồi suy đoán
 
Upvote 0
Web KT

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

Back
Top Bottom