Đố 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 không có thì như thế nào nhỉ? Cái đoạn công thức của mình là để nhập trực tiếp vào ô điều kiện chứ không phải để trong code đâu nhé.
Đáp án mình viết thế này:
PHP:
Sub LOC()
[IV2] = [A3]: [IV3] = "'=* " & [A1]
[A3:A1000].AdvancedFilter 2, [IV2:IV3], [C3]
End Sub
 
Upvote 0
Đáp án mình viết thế này:
PHP:
Sub LOC()
[IV2] = [A3]: [IV3] = "'=* " & [A1]
[A3:A1000].AdvancedFilter 2, [IV2:IV3], [C3]
End Sub

Nghĩ cũng mắc cười. Cái đáp án của chú nó nằm chình ình trong file (tại cell IV3) ---> Gọi Advanced Filter lên là thấy ---> Vậy cũng đố
Ẹc... Ẹc...
Lần sau rút kinh nghiệm ra
 
Upvote 0
Upvote 0
Nghĩ cũng mắc cười. Cái đáp án của chú nó nằm chình ình trong file (tại cell IV3) ---> Gọi Advanced Filter lên là thấy ---> Vậy cũng đố
Ẹc... Ẹc...
Lần sau rút kinh nghiệm ra

Hức hức ai kêu anh giỏi quá chi nên bị mắc cười ráng chịu. Chứ cái dấu "'=" cũng ít thấy người xài mà
 
Upvote 0
Hức hức ai kêu anh giỏi quá chi nên bị mắc cười ráng chịu. Chứ cái dấu "'=" cũng ít thấy người xài mà

Nhưng nếu là tôi viết, tôi cũng chẳng cần cái dâu ' ấy làm gì ---> Cứ record macro theo kiểu bình thường cũng ra được cái này:
[IV3] = "=""=* ""&R1C1"
 
Upvote 0
Ta thường dùng Immediate test code, sau nhiều lần test thì cửa sổ Immediate như đám rừng không biết đâu là mới đâu là cũ, đố các bạn có dòng lệnh nào xóa Immediate không?

Vụ này có thể đơn giản với các cao thủ nhưng cứ đố để mọi người cùng biết.
 
Upvote 0
Ta thường dùng Immediate test code, sau nhiều lần test thì cửa sổ Immediate như đám rừng không biết đâu là mới đâu là cũ, đố các bạn có dòng lệnh nào xóa Immediate không?

Vụ này có thể đơn giản với các cao thủ nhưng cứ đố để mọi người cùng biết.

Tôi cứ Ctrl+A rồi bấm nút Delete thế thôi!
 
Upvote 0
Ta thường dùng Immediate test code, sau nhiều lần test thì cửa sổ Immediate như đám rừng không biết đâu là mới đâu là cũ, đố các bạn có dòng lệnh nào xóa Immediate không?

Vụ này có thể đơn giản với các cao thủ nhưng cứ đố để mọi người cùng biết.
Dùng vba để xoá nó đi.
Mã:
Application.SendKeys "^g ^a {DEL}"
 
Upvote 0
Upvote 0

Cái này mà anh nói là ĐÚNG Ý thì em thấy.. hơi mắc cười
- Nếu ta "đứng" trên bảng tính, gọi lệnh trên thì nó có chạy không?
- Chẳng lẽ anh phải Alt + F11 (vào môi trường VBA). Xong phải mất công viết cái câu lệnh SendKeys gì gì đó cho nó chạy?
===> Vậy thôi em làm theo cách của Nghĩa: Ctrl + A rồi Delete có phải sướng không?
----------------
ĐỐ VUI nhưng cũng phải có ứng dụng gì đó chứ anh
???
 
Upvote 0
Cái này mà anh nói là ĐÚNG Ý thì em thấy.. hơi mắc cười
- Nếu ta "đứng" trên bảng tính, gọi lệnh trên thì nó có chạy không?
- Chẳng lẽ anh phải Alt + F11 (vào môi trường VBA). Xong phải mất công viết cái câu lệnh SendKeys gì gì đó cho nó chạy?
===> Vậy thôi em làm theo cách của Nghĩa: Ctrl + A rồi Delete có phải sướng không?
----------------
ĐỐ VUI nhưng cũng phải có ứng dụng gì đó chứ anh
???

Nếu đang ở trên bảng tính thì mình sử dụng code sau:

Mã:
Application.SendKeys "%{F11} ^g ^a {DEL}  %{F4}"
 
Upvote 0
Cái này mà anh nói là ĐÚNG Ý thì em thấy.. hơi mắc cười
- Nếu ta "đứng" trên bảng tính, gọi lệnh trên thì nó có chạy không?
- Chẳng lẽ anh phải Alt + F11 (vào môi trường VBA). Xong phải mất công viết cái câu lệnh SendKeys gì gì đó cho nó chạy?
===> Vậy thôi em làm theo cách của Nghĩa: Ctrl + A rồi Delete có phải sướng không?
----------------
ĐỐ VUI nhưng cũng phải có ứng dụng gì đó chứ anh
???

Thay vì Ctrl + A rồi Delete (2 thao thác) thì mình phải gõ dòng lệnh đó sau đó bấm cho chạy lệnh, nó chẳng hiệu quả gì cả.
 
Upvote 0
Nếu đang ở trên bảng tính thì mình sử dụng code sau:

Mã:
Application.SendKeys "%{F11} ^g ^a {DEL}  %{F4}"

Rồi có người thích ở trong cửa số VBA để chạy code thì Hai Lúa tính sao?
Thật ra cái câu hỏi này đã từng có người bàn trên mạng nhiều lắm rồi (Google sẽ thấy) và nó không đơn giản thế đâu
 
Upvote 0
Rồi có người thích ở trong cửa số VBA để chạy code thì Hai Lúa tính sao?
Thật ra cái câu hỏi này đã từng có người bàn trên mạng nhiều lắm rồi (Google sẽ thấy) và nó không đơn giản thế đâu

Vậy thì tùy thôi, ai sử dụng cái nào thì dùng cái ấy, đâu bắt ép, vì Thầy nói ngoài sheet thì thêm lệnh vậy thôi.

To Anh Nghĩa: Anh nói sai rồi, có những dòng lệnh ta cần test nhiều khúc, kết thúc khúc nào ta xóa lúc đó, anh có xóa được khi code đang chạy hay không?
 
Upvote 0
Rồi có người thích ở trong cửa số VBA để chạy code thì Hai Lúa tính sao?
Thật ra cái câu hỏi này đã từng có người bàn trên mạng nhiều lắm rồi (Google sẽ thấy) và nó không đơn giản thế đâu

Google thử thấy cái link này http://dailydoseofexcel.com/archives/2004/06/09/clear-the-immediate-window/

-+*/Hix xem xong thấy chóng mặt buồn nôn,--> chắc là do nội công của e chưa đủ để luyện chiêu này ,!$@!!-+*/
 
Upvote 0
Google thử thấy cái link này http://dailydoseofexcel.com/archives/2004/06/09/clear-the-immediate-window/

-+*/Hix xem xong thấy chóng mặt buồn nôn,--> chắc là do nội công của e chưa đủ để luyện chiêu này ,!$@!!-+*/

Code đó người ta dùng hàm API để xác định cửa sổ Immediate, xong, dùng hàm PostMessage để gửi "thông điệp" Ctrl + A và Del để cửa sổ
Tuy nhiên, ngay chính trong VBA cũng đã có câu lệnh xác định cửa sổ Immediate rồi
Ví dụ:
Mã:
Sub ClearImmediateWindow()
  With Application
    .VBE.Windows("Immediate").SetFocus
    .SendKeys "^a {Del}"
  End With
End Sub
Bất kể cửa số Immediate có đang hiện hay không, bất kể ta "đứng" ở đâu thì code vẫn chạy được
 
Lần chỉnh sửa cuối:
Upvote 0
Cái này mà anh nói là ĐÚNG Ý thì em thấy.. hơi mắc cười
- Nếu ta "đứng" trên bảng tính, gọi lệnh trên thì nó có chạy không?
- Chẳng lẽ anh phải Alt + F11 (vào môi trường VBA). Xong phải mất công viết cái câu lệnh SendKeys gì gì đó cho nó chạy?
===> Vậy thôi em làm theo cách của Nghĩa: Ctrl + A rồi Delete có phải sướng không?
----------------
ĐỐ VUI nhưng cũng phải có ứng dụng gì đó chứ anh
???

Đang đứng tại VBE, thay vì bấm 3 lần: ^G; ^A; Del
Ta bấm Click chuột vào sub (đã viết sẵn) sau rồi Run:

Mã:
Sub ClearImmedia()
     Application.SendKeys "^g ^a {DEL} {f7}"
End Sub

Cũng có thể dùng được đấy chớ, hi ... tại vì không còn gì để đố và cũng chẳng thấy ai đố, buồn sinh chuyện đấy mà, ẹc, ẹc ...
 
Upvote 0
Viết hoa đầu từ
Không dùng vòng lặp,
Application.WorksheetFunction và công cụ RegExp làm thế nào để viết hoa đầu từ tất cả các từ trong chuỗi (chuoi khong co dau)?
ví dụ : Cho chuỗi
"dien dan giai phap excel" làm sao để thành "Dien Dan Giai Phap Excel"
 
Upvote 0
Viết hoa đầu từ
Không dùng vòng lặp,
Application.WorksheetFunction và công cụ RegExp làm thế nào để viết hoa đầu từ tất cả các từ trong chuỗi (chuoi khong co dau)?
ví dụ : Cho chuỗi
"dien dan giai phap excel" làm sao để thành "Dien Dan Giai Phap Excel"
Phải như sau không anh?

Mã:
Sub test()
MsgBox StrConv("dien dan giai phap excel", vbProperCase)
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom