Thao tác trong hàm tự tạo. Áp dụng để tạo ra các hàm có chức năng đặt biệt.

Liên hệ QC

huuthang_bd

Chuyên gia GPE
Tham gia
10/9/08
Bài viết
8,709
Được thích
10,814
Donate (Momo)
Donate
Giới tính
Nam
Nghề nghiệp
Thợ đụng
Chúng ta đều biết Microsoft không cho thao tác trong các hàm.
Microsoft cũng có nói rõ ở đây: https://support.microsoft.com/en-us/kb/170787

Nếu lách được quy định này thì chúng ta có thể tạo ra các hàm có chức năng đặt biệt.

Tôi tìm được file promises.xlsm trên internet và sau một thời gian mò trong đống code trong file đó tôi lấy ra được một phần mà sau khi chỉnh sửa lại đã lách được quy định này của Microsoft. Tôi nói lách là bởi vì thực tế cũng không thể thao tác trong hàm mà hàm sẽ gọi một thủ tục ngay sau khi nó kết thúc.

Trong file có sẵn một hàm đơn giản để thí nghiệm. Mọi người chạy thử xem có lỗi gì không, nếu có thì cùng nhau tìm hiểu và sửa lỗi vì thực ra tôi cũng không hiểu code, chỉ sửa bằng các phép thử.


Ai viết được hàm nào hay thì post lên cho mọi người cùng tham khảo và sử dụng nhé.
Các bạn không có khả năng tự viết hàm có thể nêu ý tưởng. Nếu tính ứng dụng cao thì mọi người sẽ chung tay viết (không ai viết thì tôi viết nếu có khả năng --=0).
 

File đính kèm

  • Main.xlsm
    27.4 KB · Đọc: 80
Hàm HideMeIf

Xin mở màng hàm đầu tiên. Hàm HideMeIf
Chức năng: Ẩn hàng, cột, sheet có điều kiện.
Cú pháp: HideMeIf(CheckVal, [HideRow], [HideCol])

CheckVal:
Giá trị kiểm tra, True thì ẩn, False thì hiện
HideRow, HideCol: Tùy chọn ẩn hàng, cột, sheet. Có các trường hợp sau:
1. False - False: Ẩn sheet
2. True - False: Ẩn hàng (mặc định)
3. False - True: Ẩn cột
4. True - True: Ẩn hàng và cột.

Lưu ý:
- Khi dùng với dạng công thức mảng trên vùng có 1 cột, nhiều hàng thì hàm sẽ tự hiểu là Ẩn dòng
- Khi dùng với dạng công thức mảng trên vùng có 1 hàng, nhiều cột thì hàm sẽ tự hiểu là Ẩn cột
- Vì hàm sẽ gọi thủ tục nên nếu dùng cho vùng dữ liệu liên tục thì nên dùng với dạng công thức mảng (1 công thức mảng 10 ô chỉ gọi hàm 1 lần nhưng 10 ô có công thức thường sẽ gọi hàm 10 lần)
 

File đính kèm

  • HideMeIf.rar
    59.2 KB · Đọc: 81
Upvote 0
4 cái Class Module rồi còn thêm cái module chứa API thấy ghê quá . có thể giải thích sơ sơ về mấy cái Class module được không ?
để đỡ mất thời gian tìm hiểu về nó %#^#$%#^#$
 
Upvote 0
4 cái Class Module rồi còn thêm cái module chứa API thấy ghê quá . có thể giải thích sơ sơ về mấy cái Class module được không ?
để đỡ mất thời gian tìm hiểu về nó %#^#$%#^#$
Tôi có nói ở bài #1 rồi mà --=0
Trong file có sẵn một hàm đơn giản để thí nghiệm. Mọi người chạy thử xem có lỗi gì không, nếu có thì cùng nhau tìm hiểu và sửa lỗi vì thực ra tôi cũng không hiểu code, chỉ sửa bằng các phép thử.
 
Upvote 0
cái này có giống file #1 không ta ? hi hi
 

File đính kèm

  • b1.xlsb
    16.5 KB · Đọc: 26
Upvote 0
Chọn cell C2, xong bấm vào nút Fx phát là Excel lỗi và thoát luôn ---> Không biết chuyện gì xảy ra nữa

View attachment 148320






























quả nhiên thất bại là mẹ của thất bại . thầy chỉ ra chỗ Crash mục đích để em tự tìm hiểu sự khác nhau giữa 2 file phải không ?
em đã tìm hiểu được . nếu có gì sai mong thầy hướng dẫn thêm nhé
sự khác nhau giữa 2 file làm cho file của em bị Crash chính là ở chế độ EDIT MODE của excel . Khi bấm vào nút Fx cũng có nghĩa là ta kích hoạt chế độ Edit Mode => excel từ chối mọi sự kiện và nếu cố tình can thiệp thay đổi nội dung cell thì sẽ Crash
file #1 không bị Crash bởi vì đã đặt lệnh bên trong hàm bắt sự kiện => excel từ chối ngay trước khi sự kiện xảy ra

Như thế để làm được giống #1 . bắt buộc phải có 2 class module . 1 class khai báo sự kiện và 1 class thực thi sự kiện
xin được sửa lại #5 như sau
 

File đính kèm

  • b3.xlsb
    25.3 KB · Đọc: 40
Lần chỉnh sửa cuối:
Upvote 0
quả nhiên thất bại là mẹ của thất bại . thầy chỉ ra chỗ Crash mục đích để em tự tìm hiểu sự khác nhau giữa 2 file phải không ?
em đã tìm hiểu được . nếu có gì sai mong thầy hướng dẫn thêm nhé
sự khác nhau giữa 2 file làm cho file của em bị Crash chính là ở chế độ EDIT MODE của excel . Khi bấm vào nút Fx cũng có nghĩa là ta kích hoạt chế độ Edit Mode => excel từ chối mọi sự kiện và nếu cố tình can thiệp thay đổi nội dung cell thì sẽ Crash
file #1 không bị Crash bởi vì đã đặt lệnh bên trong hàm bắt sự kiện => excel từ chối ngay trước khi sự kiện xảy ra

Như thế để làm được giống #1 . bắt buộc phải có 2 class module . 1 class khai báo sự kiện và 1 class thực thi sự kiện
xin được sửa lại #5 như sau
Chả thấy cái như sau đâu hết.
 
Upvote 0
Web KT
Back
Top Bottom