Thư giản cùng Exel VBA

Liên hệ QC

kimhuynh

Thành viên mới
Tham gia
31/12/09
Bài viết
32
Được thích
10
Xin chào mọi người.

Trước đây mình có nhận được 1 file do đồng nghiệp gởi, giờ nhớ lại mới biết là dùng VBA nhưng không biết bằng cách nào có thể tạo ra được nó.

nội dung file 1: Có 2 hình

1. Hình 1 (Object), hình 1 có chữ "không tăng và click chuột được" sau đó có thông báo là "Cám ơn bạn đã ủng hộ công ty không tăng lương".
2. Hình 2, có nội dung "Tăng lương" , nhưng khi rê chuột vào thì Object nhảy sang vi trí khác, và rê chuột tiếp tục tới đó nữa thì lại nhảy sang cho khác nữa.

Không biết code VBA nào để viết mà chạy được như vậy. Nhờ các anh chị giúp đỡ.
 

File đính kèm

Xin chào mọi người.
Trước đây mình có nhận được 1 file do đồng nghiệp gởi, giờ nhớ lại mới biết là dùng VBA nhưng không biết bằng cách nào có thể tạo ra được nó.
nội dung file 1: Có 2 hình
1. Hình 1 (Object), hình 1 có chữ "không tăng và click chuột được" sau đó có thông báo là "Cám ơn bạn đã ủng hộ công ty không tăng lương".
2. Hình 2, có nội dung "Tăng lương" , nhưng khi rê chuột vào thì Object nhảy sang vi trí khác, và rê chuột tiếp tục tới đó nữa thì lại nhảy sang cho khác nữa.
Không biết code VBA nào để viết mà chạy được như vậy. Nhờ các anh chị giúp đỡ.
Chắc gần giống file này
Mở file, bấm nut Show Form để chạy
Bấm Alt + F11 để xem code
 

File đính kèm

Upvote 0
Cảm ơn anh NDU. Nó cũng gần gần giống như file của anh đấy ạ.
 
Upvote 0
Dùng sự kiện MouseMove thôi.
 

File đính kèm

Upvote 0
Thanks anh PTM. Cái này đúng như cái ngày xưa em nhận được.
 
Upvote 0
Khà khà khà
HIC HIC HIC

Cười nhỏ 3 tiếng, khóc to 3 tiếng!

Cười vì bài viết nhiều người đọc, nhiều người nhấn cám ơn, mới 4 tiếng rưỡi đồng hồ, 32 lần tải file.
Khóc, vì cũng bài mình viết, thuộc về chuyên môn, không phải thư giãn, thưa thớt người đọc, chả mấy cái cám ơn, file cả tháng không ai buồn tải!
 
Lần chỉnh sửa cuối:
Upvote 0
Khà khà khà
HIC HIC HIC

Cười nhỏ 3 tiếng, khóc to 3 tiếng!

Cười vì bài viết nhiều người đọc, nhiều người nhấn cám ơn, mới 4 tiếng rưỡi đồng hồ, 32 lần tải file.
Khóc, vì cũng bài mình viết, thuộc về chuyên môn, không phải thư giãn, thưa thớt người đọc, chả mấy cái cám ơn, file cả tháng không ai buồn tải!
---
Anh phải tự trách anh thôi, vì anh ............viết CAO QUÁ
 
Upvote 0
---
Anh phải tự trách anh thôi, vì anh ............viết CAO QUÁ

Không hẳn như vậy đâu, mình viết bài thuộc loại dễ hiểu bậc nhất GPE!
Chỉ khác mỗi chữ "thư giãn"

Chả lẽ sau này đặt tiêu đề topic và tên file là:

Thư giãn với Pivot table, file đính kèm Hihi_Pivot.xls
Thư giãn với biểu đồ cột, file đính kèm BeautyColumn.xls
Thư giãn với Form nhập liệu, file đính kèm FunnyForm.xls
....
 
Upvote 0
Chả lẽ sau này đặt tiêu đề topic và tên file là:
Thư giãn với Pivot table, file đính kèm Hihi_Pivot.xls
Thư giãn với biểu đồ cột, file đính kèm BeautyColumn.xls
Thư giãn với Form nhập liệu, file đính kèm FunnyForm.xls
....
Cũng được mà sư phụ... Cũng như Giải trí với các công thức Excel hoặc Đố vui về VBA đấy thôi ---> Học mà chơi, chơi mà học là dễ tiêu hoá nhất
Ẹc... Ẹc...
(hay là nhân đây, ai có ứng dụng VBA liên quan đến Relax thì post vào đây nhỉ?)
 
Upvote 0
Cũng được mà sư phụ... Học mà chơi, chơi mà học là dễ tiêu hoá nhất
Ẹc... Ẹc...

May là chưa đến nỗi đặt tên file là SexyADODB.xlsm hoặc hottyDictionary.rar
Hic!

Hôm nọ có tên học trò (thuộc loại cứng đầu hay cãi), thế mà cũng thốt lên: Càng ngày Người hỏi càng nhiều , người học càng ít!
 
Lần chỉnh sửa cuối:
Upvote 0
Lão huynh chết tiệt khéo tự tiếp thị thật, tăng lên 37 rồi kìa!
Ai đời! Bắt người ta chúc mình sống lâu, lại còn khêu gợi trí tò mò, dụ người ta tải nhiều nữa!

Mà cũng đáng buồn thật đấy chứ!
 
Upvote 0
Nhân đây góp vui một đoạn code dùng để Test hệ thống cảnh báo Virut của máy tính bạn:
HTML:
Sub Test()
Dim Virutten
Virutten = Timer
    Workbooks.Add
    Range("A1").Value = "X50!P%@AP[4\PZX54(P^)7CC)7}EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H"
    ActiveWorkbook.SaveAs Filename:= _
        "C:\Documents and Settings\Admin\My Documents\" & Virutten & ".txt", _
        FileFormat:=xlText, CreateBackup:=False
    Application.DisplayAlerts = False
    ActiveWorkbook.Close savechanges:=True
    'Application.Quit
End Sub
Nếu chạy code này mà hệ thống bảo vệ máy tính thân yêu của Bạn không phản ứng gì thì Remove được rồi, còn phải lo mà xóa thủ công file txt vứa tạo ra (virut này vô hại!).
 
Upvote 0
Quá rảnh

Vì quá rảnh nên nghĩ ra trò này phục vụ mọi người: Di chuyển nút Start và Tray của Windows
Các bạn mở file, bấm nút Move Start thì sẽ thấy nút Start của Windows chạy từ trái qua phải trên TaskBar. Tương tư thế đối với System Tray khi bấm nút Move Tray
Ẹc... Ẹc...
------------------------------------
Cái này tôi thí nghiệm trên Windows XP, còn Vista và Win 7 thì không biết thế nào, các bạn thử nghiệm xem
------------------------------------
(Thư giản vậy thôi chứ trong code có cả 1 đóng kiến thức không dễ nuốt đâu nha)
 

File đính kèm

Upvote 0
Không hẳn như vậy đâu, mình viết bài thuộc loại dễ hiểu bậc nhất GPE!
Chỉ khác mỗi chữ "thư giãn"

Chả lẽ sau này đặt tiêu đề topic và tên file là:

Thư giãn với Pivot table, file đính kèm Hihi_Pivot.xls
Thư giãn với biểu đồ cột, file đính kèm BeautyColumn.xls
Thư giãn với Form nhập liệu, file đính kèm FunnyForm.xls
....

Một sự thật là ít người thực sự đam mê để khám phá ngọn nguồn vấn đề lắm, chỉ là tìm hiếu đến mức độ công việc đang cần là xong. Nhiều người vào mạng ngó nghiêng xem cái gì dùng được cho mình lấy đi là xong chứ nhấn nút "Thanks" có lẽ vẫn chưa quen văn hóa này. Từ lâu khi viết xong một bài nào đó mình tâm đắc thì đã biết những nick nào trên diễn đàn này sẽ "Thanks" mình rồi.
 
Upvote 0
Vẽ TEXT trên Desktop

Hãy cho các đoạn code dưới đây vào 1 Module
PHP:
Private Declare Function CreateDCAsNull Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, lpDeviceName As Any, lpOutput As Any, lpInitData As Any) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long
Private Declare Function GetTextColor Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function SetTextColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
Private Type RECT
  Left As Long
  Top As Long
  Right As Long
  Bottom As Long
End Type
PHP:
Sub Test()
  Dim hdc As Long, tR As RECT, Text As String
  Text = Range("A1").Text
  hdc = CreateDCAsNull("DISPLAY", 0&, 0&, 0&)
  tR.Left = 0: tR.Top = 0
  tR.Right = 640: tR.Bottom = 32
  SetTextColor hdc, &HFF&
  DrawText hdc, Text, Len(Text), tR, 0
  SetTextColor hdc, GetTextColor(hdc)
  DeleteDC hdc
End Sub
Gõ vào cell A1 dòng chữ: GIAI PHAP EXCEL - CONG CU TUYET VOI CUA BAN
Chạy sub Test, các bạn sẽ nhìn thấy chuổi vừa gõ xuất hiện ở góc trên, bên trái của màn hình Desktop
-----------------------------------------
Từ đây ta nghĩ ra việc cho 1 cái đồng hồ Digital lên Desktop là điều nằm trong tầm tay (thêm hàm SetTimer và KillTimer)
PHP:
Private Declare Function CreateDCAsNull Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, lpDeviceName As Any, lpOutput As Any, lpInitData As Any) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long
Private Declare Function GetTextColor Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function SetTextColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Private Type RECT
  Left As Long
  Top As Long
  Right As Long
  Bottom As Long
End Type
PHP:
Private Sub TimerProc()
  Dim hdc As Long, tR As RECT, Text As String
  Text = Format(Now, "hh:mm:ss")
  hdc = CreateDCAsNull("DISPLAY", 0&, 0&, 0&)
  tR.Left = 0: tR.Top = 0
  tR.Right = 640: tR.Bottom = 32
  SetTextColor hdc, &HFF&
  DrawText hdc, Text, Len(Text), tR, 0
  SetTextColor hdc, GetTextColor(hdc)
  DeleteDC hdc
End Sub
PHP:
Sub StartProc()
  KillTimer Application.hwnd, 1
  SetTimer Application.hwnd, 1, 1000, AddressOf TimerProc
End Sub
PHP:
Sub StopProc()
  KillTimer Application.hwnd, 1
  Shell ("RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters ,1 ,True")
End Sub
Chạy sub StartProc, sẽ nhìn thấy cái đồng hồ số đang chạy trên Desktop, chạy sub StopProc để tắt đồng hồ
-----------------------
Nói thêm: Trong VB6 có Timer Control còn trong VBA thì không có control này nên dùng hàm SetTimer và KillTimer để có sự thay thế tương ứng (code gần như tương tự như viết với Timer control của VB6)
 

File đính kèm

Upvote 0
Rất OK không ngờ excel lại làm nhiều cái mình không ngờ được đọc đoạn code của anh thật là hay mà "không hiểu" ặc...ặc....!!!!
Thật ra các hàm API tuy rất mạnh nhưng cũng khó hiểu. Để hiểu sâu sắc 1 hàm nào đó thật chẳng đơn giản tí nào. Cách của tôi học là:
- Tìm 1 đoạn code ngắn gọn nào đó có dùng đến hàm API rồi cố gắng xem nó đang làm cái gì (biết mục đích sử dụng)
- Chưa cần hiểu đến mức sâu sắc nhưng ít ra cũng phải hiểu được các tham số trong hàm mang ý nghĩa gì
- Thử tùy biến, thay đổi từng tham số rồi thí nghiệm và rút ra kết luận

---------------------------------------------
Nói thật: Code di chuyển nút Start này tôi đã nghiên cứu ròng rã 5 tháng liền đấy... Giờ thì có thể tùy biến thoải mái như dịch sang trái, sang phải hoặc tạo thanh trượt để chỉnh tốc độ chạy... vân vân và vân vân...
May là nhờ có Nguyễn Duy Tuân thường xuyên trợ giúp và góp ý cho tôi mấy cái API này...
Ẹc... Ẹc...
---------------------------------------------
Có khi các bạn sẽ thắc mắc: Thế ta di chuyển nút Start để làm giống gì? Uh, thì chẳng ứng dụng gì cả nhưng trong quá trình làm nó đương nhiên ta có thu hoạch được thêm nhiều kiến thức để sau này có thể làm những việc khác 1 cách dễ dàng và thuận lợi
 
Upvote 0
Cũng được mà sư phụ... Cũng như Giải trí với các công thức Excel hoặc Đố vui về VBA đấy thôi ---> Học mà chơi, chơi mà học là dễ tiêu hoá nhất
Ẹc... Ẹc...
(hay là nhân đây, ai có ứng dụng VBA liên quan đến Relax thì post vào đây nhỉ?)

Cảm ơn các anh NDU và PTM đã trả lời nhanh chóng. Em cứ ngỡ là tiêu đề có ghi chữ Thư Giản thì sẽ không được các anh giúp đỡ để giải quyết, nhưng không ngờ các anh lại trả lời rất nhanh chóng và mọi người lại rất có hưng thú với việc vừa học, vừa chơi trên EXcel.

Hy vọng mọi người tham gia diễn đàn sẽ có nhiều câu hỏi hay dạng vừa học vừa chơi để có nhiều người đọc và quan tâm hơn.
 
Upvote 0
Web KT

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

Back
Top Bottom