Viết hàm tự tạo theo kiểu Excel 365

Liên hệ QC

Ngô Hải Đăng

Thành viên hoạt động
Tham gia
31/8/17
Bài viết
180
Được thích
244
Donate (Paypal)
Donate
Donate (Momo)
Donate
Giới tính
Nam
Nghiên cứu trên diễn đàn thì phát hiện được cái Application.Caller và sau đây là ý tưởng của mình:
1. Code trên ThisWorkbook
Mã:
Option Explicit

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
    If IsUDF Then
        SetResult
        rCaller.Formula = sFormula
    End If
End Sub

Private Sub SetResult()
    Dim r0&, c0&
    On Error Resume Next
    r0 = UBound(aResult, 1) - LBound(aResult, 1)
    c0 = UBound(aResult, 2) - LBound(aResult, 2)
    On Error GoTo 0
    If c0 = 0 Then
        rCaller.Resize(1, r0 + 1) = aResult
    Else
        rCaller.Resize(r0 + 1, c0 + 1) = aResult
    End If
End Sub

2. Code trên Module
Mã:
Option Explicit

Public IsUDF As Boolean
Public rCaller As Range
Public aResult As Variant
Public sFormula As String

Function MyUDF()
    If IsUDF Then
        MyUDF = aResult
        IsUDF = False
        Set rCaller = Nothing
        If IsArray(aResult) Then Erase aResult Else aResult = Empty
    Else
        IsUDF = True
        Set rCaller = Application.Caller
        sFormula = rCaller.Formula
        
        'Dim tmp As String: tmp = "1 GIA TRI"
        'Dim tmp: tmp = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
        Dim tmp(10, 15) As Long
        aResult = tmp
    End If
End Function

3. Gõ =MyUDF() trên Sheet để test.

Có thể thử với kết quả là 1 giá trị, mảng 1 chiều và mảng 2 chiều. Mong được học hỏi thêm kinh nghiệm từ mọi người.
 
đang xài nó đấy ... hình như là cho Vĩnh viễn ... còn xài ké kiểu gì đây Mạnh chua có hiểu lắm
Không vĩnh viễn, 1 lần trả tiền xài được 1 năm, sau đó phải trả tiếp
Một Account cho phép cài đặt 5 máy, nếu không xài hết thì chia sẻ (đồng nghĩa việc chia sẻ account + pass của account)
 
Upvote 0
Không vĩnh viễn, 1 lần trả tiền xài được 1 năm, sau đó phải trả tiếp
Một Account cho phép cài đặt 5 máy, nếu không xài hết thì chia sẻ (đồng nghĩa việc chia sẻ account + pass của account)
SAO em ko thấy nó keo 1 năm Anh nhỉ
Họ cho Em keo là vĩnh viễn em cũng không Biết .... Em còn 1 cái khác nữa trên 2 năm nay mà vẫn xài tốt ... cái đó của edu tên miền trung quốc nên làm biếng xài ===> chính xác là hơi sợ tàu thôi -0-0-0-

Hình ảnh như sau ko thấy nói gì 1 năm hết
1605005262027.png
1605005286851.png
 
Upvote 0
Không vĩnh viễn, 1 lần trả tiền xài được 1 năm, sau đó phải trả tiếp
Một Account cho phép cài đặt 5 máy, nếu không xài hết thì chia sẻ (đồng nghĩa việc chia sẻ account + pass của account)
Đấy là hàng dành cho khách hàng cá nhân anh ơi.
Có nhiều gói: cho khách hàng doanh nghiệp, trường học... nữa.
 
Upvote 0
chính thức bỏ Office 2016 rồi dọn nhà qua Office 365 ... thấy giao diện rất đẹp + hiện đại -0-0-0-
mà tìm hoài không thấy dòng nào nó ghi cho xài 1 năm cả ??!!!

1605063558948.png
 
Upvote 0
Upvote 0
chính thức bỏ Office 2016 rồi dọn nhà qua Office 365 ... thấy giao diện rất đẹp + hiện đại -0-0-0-
mà tìm hoài không thấy dòng nào nó ghi cho xài 1 năm cả ??!!!

View attachment 249084

Vụ này bạn phải đăng nhập vào tài khoản của bạn trên Web của Microsoft, rồi check "Services & Subscriptions" mới thấy chứ trên ứng dụng không thấy đâu.
Bên Mac OS cũng vậy, tôi lúc trước có mua mấy app trên AppStore cũng bị tự động trừ tiền bản quyền vì không chịu kiểm tra kỹ các ứng dụng mình đã mua (Subscription) khi hết hạn.
 
Upvote 0
Vụ này bạn phải đăng nhập vào tài khoản của bạn trên Web của Microsoft, rồi check "Services & Subscriptions" mới thấy chứ trên ứng dụng không thấy đâu.
Bên Mac OS cũng vậy, tôi lúc trước có mua mấy app trên AppStore cũng bị tự động trừ tiền bản quyền vì không chịu kiểm tra kỹ các ứng dụng mình đã mua (Subscription) khi hết hạn.
Mạnh xem hết rồi không có thấy ... Mạnh còn 1 cái khác nữa tên Miền của trung Quốc tạo 2 Năm trước giờ vẫn vào OK đấy ( Có nêu mấy bài trước )

1605069608025.png
 
Upvote 0
................
 
Lần chỉnh sửa cuối:
Upvote 0
Upvote 0
....................
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom