Chia sẻ cách tạo gợi ý cho hàm trong Excel bằng thư viện ExcelDna.

Liên hệ QC

giaiphap

==(^o^)==
Tham gia
12/3/07
Bài viết
5,778
Được thích
6,274
Donate (Momo)
Donate
Giới tính
Nam
Chủ đề này không mới, nhưng hiện tại chưa thấy ai chia sẻ trong diễn đàn Giải pháp Excel (Hoặc có thể có rồi nhưng “tui” chưa thấy). Nay “tui” chia sẻ cách tạo gợi ý của hàm trong Excel. Như các bạn thấy khi mình gõ một hàm có sẳn trong Excel (Ví dụ Hàm VLOOKUP) thì sẽ có một gợi ý cho chúng ta biết hàm có công dụng gì, có bao nhiêu tham số, … Nhưng hàm chúng ta viết bằng VBA thì sẽ không thấy gợi ý này.
H1.png
Nếu bạn nào biết C# thì vấn đề này rất dễ dàng, nhưng bạn nào chưa biết thì có thể làm theo cách sau bằng cách sử dụng thư viện có sẳn ExcelDna:
Đầu tiên bạn vào trang web https://github.com/Excel-DNA/IntelliSense/releases và tải một trong 2 file (“tui” khoanh đỏ), tùy theo phiên bản Ofice của bạn mà tải cho phù hợp nhé.
H2.png
Sau khi tải về bạn đặt vào chung thư mục với file Excel mà mình muốn tạo hàm, sau đó mở file Excel bạn cần tạo hàm lên.

Vấn đề trước tiên là bạn sẽ tạo một Sheet mới và đặt tên cho sheet này là “_IntelliSense_” (Tên này lằ bắt buộc không được phép đặt tên khác nhé), trên Sheet này bạn nhập ô A1 là FunctionInfo ô B1 bạn gõ số 1.
H3.png
Tiếp đến bạn nhấn Alt+F11 để mở cửa sổ soạn code VBA lên.
Bạn tạo một Module mới và gõ code vào như sau:
Mã:
Option Explicit
Const xllName = "ExcelDna.IntelliSense.xll"
Const xllName64 = "ExcelDna.IntelliSense64.xll"
Public Sub DangKyDLL()
    On Error GoTo ErrorHandler
    Dim filePath As String
    If m_IsExcelx64 Then
        filePath = ThisWorkbook.Path & "\" & xllName64
    Else
        filePath = ThisWorkbook.Path & "\" & xllName
    End If
    Application.RegisterXLL filePath
    DoEvents
    Exit Sub
ErrorHandler:
    Debug.Print Err.Number, Err.Description
End Sub
Function m_IsExcelx64() As Boolean
    Dim l As Long
    l = -1
    On Error Resume Next
    l = Application.Hinstance
    On Error GoTo 0
    If l = -1 Then
        m_IsExcelx64 = True
    Else
        m_IsExcelx64 = False
    End If
End Function
Lưu ý là ExcelDna.IntelliSense.xll và ExcelDna.IntelliSense64.xll là tên 2 thư viện đã tải về và đặt cùng thư mục với tệp tin Excel nhé.
Bạn tiếp tục tạo thêm một Module mới nửa và viết thêm 2 hàm như sau:
Mã:
Option Explicit
Function ChaoExcelDna()
   ChaoExcelDna = "Chào m" & ChrW(7915) & "ng b" & ChrW(7841) & "n " & ChrW(273) & ChrW(7871) & "n v" & ChrW(7899) & "i ExcelDna"
End Function

Public Function TinhDienTich(dai As Double, rong As Double) As Double
    TinhDienTich = dai * rong
End Function
Bạn tiếp tục nháy đúp chuột vào ThisWorkbook và thêm vào đoạn code sau:
Mã:
Option Explicit
Private Sub Workbook_Open()
On Error GoTo thoat
    Call DangKyDLL
thoat:
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    On Error GoTo thoat
    Application.Run "AutoClose"
thoat:
End Sub
H4.png
Xong bạn đóng cửa sổ VBA lại và trở về giao diện Sheet “_IntelliSense_” để tạo gợi ý cho 2 hàm vừa tạo, sẳn tiện tạo luôn gợi ý (Việt hóa hàm có sẳn của Excel) cho hàm IFERROR có sẳn của Excel như sau:
H5.png
Xong bạn có thể ẩn đi Sheet “_IntelliSense_” để người khác khỏi nhìn thấy (Mục đích là để người dùng không lỡ tay chỉnh sửa hay xóa nhầm dữ liệu gợi ý này).
Cuối cùng bạn đóng file này đi và mở lại nhập thử hàm TinhDienTich hoặc ChaoExcelDna hoặc IFERROR xem kết quả sẽ thấy nó hiện gợi ý cho mình.
H6.png
Bạn có thể tham khảo cách làm chi tiết ở Link sau:
Liên kết: https://www.youtube.com/watch?v=-BIOzl1igXU
 

File đính kèm

  • Goi Y Ham VBA.zip
    704.7 KB · Đọc: 14
Làm bằng VBA có vẻ phức tạp nhỉ. Em viết bằng C# không phải nhiều bước như này
 
Làm bằng VBA có vẻ phức tạp nhỉ. Em viết bằng C# không phải nhiều bước như này

Bạn biết ngôn ngữ C# thì bạn lập trình các hàm và tích hợp mã nguồn của cái DNA vào, bạn cũng phải mất cả vài năm học cho thành thạo C#, hay cũng phải mất nhiều ngày đọc tài liệu để biết cách tích hợp cái DNA vào mà. Nhiều người trên đây biết VBA hơn C# (học biết C# nhưng trình gà không bằng trình VBA của họ), đã có các hàm viết rồi, giờ chỉ cần cái xll kia khai báo vào là xong chứ khó khăn gì đâu.
 
Làm bằng VBA có vẻ phức tạp nhỉ. Em viết bằng C# không phải nhiều bước như này
Ở bài đâu "tui" có viết.
Nếu bạn nào biết C# thì vấn đề này rất dễ dàng.
Nhưng thật ra chưa chắc là dễ đâu. bạn thử mô tả lại từng bước làm bằng C# xem có nhiều bước hơn hay không? Tui dám chắc là không. Giờ tui nói sơ qua những cái phải làm khi tạo bằng C# bạn xem có phải nhiều buywowcs hơn không?
Thứ nhất bạn phải cài thêm thư viện ExcelDna.AddIn rồi mới cài ExcelDna.IntelliSense, bạn viết mô tả các tham số (Gợi ý hàm) cho hàm (được cái là viết trực tiếp ngay chổ đặt tên hàm) giống như Excel thôi vã lại còn thêm lệnh ExcelArgument, Name, Description...
H8.png
Thứ hai trước khi chạy nó vẫn phải đăng ký ExcelDna.IntelliSense với Excel và khi đóng thì nó vẫn phải gỡ đăng ký.
H9.png
Theo tui thấy thì chưa chắc cái nào dễ hơn cái nào, chẳng qua là C# được hổ trợ mọi cái đều tiện và nhanh thôi chứ thực chất vẫn như nhau. Cái khác là do Excel phải viết nhiều lệnh hơn nhưng bản chất là như nhau.
Một cái nửa là như bạn @UltraExcel nói chẳng qua là bạn biết C# thì dễ còn những người chỉ biết VBA thì phải tìm hiểu thêm nhiều hơn.
 
Web KT
Back
Top Bottom