Đố 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,905
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
 
Code diễn giải ý nghĩa của thisworkbook

Mã:
Sub thu()
    Dim twMyFile As ThisWorkbook
    
    Set twMyFile = ThisWorkbook
  
      
End Sub
 
Upvote 0
Mã:
Sub LayVung()
    Dim vR
     Set vR = Application.InputBox("Chon vung du lieu", Type:=8)
End Sub

Ở trên là code để người dùng chọn một vùng, rõ ràng phải dùng "Set", vậy đố vui là làm sao vứt cái "set" đó đi mà code vẫn chạy được, lấy được vùng người dùng đã chọn.
 
Upvote 0
Upvote 0
Mã:
Application.InputBox("Chon vung du lieu", Type:=8).Select

Mã:
With Application.InputBox("Chon vung du lieu", Type:=8)
    MsgBox "con cò be bé " & .Address
End With
Đáp án nằm ngoài dự tính, đã lấy được vùng. Ý em là gán vào biến vR, gán vào vR sẽ làm được nhiều thứ hơn, rồi còn vấn đề người dùng nhấn núy cancel nữa
 
Upvote 0
Cho đáp án luôn đi bạn!
Mã:
Sub ChonVung()

    Dim vR
    vR = Application.InputBox("Chon mot vung:", Array("Chon vung"), Type:=8)
   
    If VarType(vR(LBound(vR))) = vbBoolean Then
        MsgBox "Da huy viec lua chon"
    Else
        MsgBox "Da chon vung: " & vR(LBound(vR)).Address
    End If
   
   
End Sub

Đưa đầu vào dưới dạng mảng là được.
Thử câu lệnh sau còn thấy vài điều là lạ:
Mã:
vR = Application.InputBox("Chon mot vung:", Array("Chon vung1", "chon vung2"), Type:=8)
 
Upvote 0
HÃY LẬP DANH SÁCH NHỮNG THÁNG TRONG THẾ KỸ NÀY CÓ 31 NGÀY & NGÀY ĐẦU CỦA THÁNG LÀ THỨ BẢY.​

Bài chỉ giành cho những người dưới 123 bài viết
 
Upvote 0
Theo cách đếm của diễn đàn ta thôi;
Mà ai đã có 123 bài cũng chầu rìa đi nghen!
 
Upvote 0
Hình như tôi mới có 121 bài. Tính luôn bài này là 122.

Nhưng nếu tôi khong hiểu rõ đề bài, hỏi lại bạn thì có bị hết "cô ta" hôn?
 
Upvote 0
Đố vui: Viết code đóng và mở lại chính file chứa code.
 
Upvote 0
Đố ké theo. Giả sử tôi đã có code này, xin cho biết 1 ứng dụng thực tiễn.

(câu đố thực chứ không phải hỏi mắc đâu nhé)
Không biết có ý tưởng nào giống anh không:
- Khi thao tác sai không thể dùng chức năng undo (ví dụ: xóa sheet, chạy macro).
- Một số biến toàn cục được tạo khi file được mở nhưng vì một lý do nào đó nó đã bị giải phóng (thường là do lỗi), lúc này cần phải mở lại file.
 
Upvote 0
Đố vui: Viết code đóng và mở lại chính file chứa code.
Code này trên GPE ........... hên thì trúng
Mã:
Public Sub RestartMe()
    Application.Cursor = xlWait
    Application.OnTime Now + TimeValue("00:00:2"), "OpenMe"
    ThisWorkbook.Close True
End Sub
Public Sub OpenMe()
    Application.Cursor = xlDefault
End Sub
 
Upvote 0
Code này trên GPE ........... hên thì trúng
Mã:
Public Sub RestartMe()
    Application.Cursor = xlWait
    Application.OnTime Now + TimeValue("00:00:2"), "OpenMe"
    ThisWorkbook.Close True
End Sub
Public Sub OpenMe()
    Application.Cursor = xlDefault
End Sub
Tưởng chưa có nên mới đố :D
 
Upvote 0
Đố ké theo. Giả sử tôi đã có code này, xin cho biết 1 ứng dụng thực tiễn.

(câu đố thực chứ không phải hỏi mắc đâu nhé)
Dùng để troll. Ví dụ trong phần OpenMe thiết lập MsgBox "Tắt anh mà dễ à" :D Ai không biết tắt nó trong TaskManager chắc đến nước Reset máy tính.
 
Upvote 0
Dùng để troll. Ví dụ trong phần OpenMe thiết lập MsgBox "Tắt anh mà dễ à" :D Ai không biết tắt nó trong TaskManager chắc đến nước Reset máy tính.
Làm gì có chuyện đó bạn. Khi mở lại lần đầu bạn không mở macro thì làm gì có lần sau :D.
 
Upvote 0
Web KT
Back
Top Bottom