Excel RTD Add-In - Truy xuất dữ liệu File Excel, Access và SQLite

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

phuongnam366377

Thành viên hoạt động
Tham gia
25/10/19
Bài viết
149
Được thích
178
1/ ý tưởng viết Addin này có từ chủ đề sau

2/ Tham khảo chỉ dẫn của Ms sử dụng tốt trên VB6

3/ Giới thiệu của Ms cho hàm RTD

4/ tham khảo sử dụng hàm TEXTSPLIT trên Excel 365 cho vận dụng sử dụng Hàm RTD trên Excel 365


5/ Hàm RTD mặc định sử dụng tốt từ Microsoft Excel 2002. tới nay và cài tiến tốt hơn trên Excel 365

Mô tả và cách sử dụng

1/ yêu cầu sử dụng Addin RTD cho Excel là bạn phải có quyền Admin trên PC đó

2/ Nó là COM Automation DLL được viết trên Delphi sử dụng cho Excel 32 hay 64 bít tuỳ ai đó sử dụng Excel cài trên Máy tính

3/ Khi tải về nếu máy tính sử dụng Excel 32 bít thì dê chuột vào file ExcelRTDServer32.dll xong kéo thả vào File Register_ActiveX_OCX_DLL.vbs sau đó chọn Yes và ngược lại áp dụng cho 64 bit cũng như vậy

4/ mặc định hàm RTD do Ms thiết kế là mảng một chiều nhưng Tôi tuỳ chỉnh lại thành mảng hai chiều sử dụng SQL truy xuất dữ liệu File Excel, Access và SQlite khi truyền tham số DBpath,SQL,HDR vào hàm .. Với tuỳ chọn lấy tiêu đề là true hay False khi truyền vào hàm

5/ Mặc định hàm RTD trả về là một chuỗi khi ta gõ hàm tại một ô như sau Với tuỳ chọn lấy tiêu đề là true hay False khi truyền vào hàm

Mã:
=RTD("excelrtdserver.excelrtd",,C3,C4,C5)

1731155732140.png


6/ Khi kết hợp với hàm RTD với hàm có sẳn trên Excel 2019 to Excel 365 ta gõ hàm như sau thì kết quả trả về các ô trên Sheet

Mã:
=IFERROR(TEXTSPLIT(RTD("excelrtdserver.excelrtd",,C3,C4,C5), ",", CHAR(10)), "")

1731155960418.png

7/ Nếu sử dụng các bản Office từ 2019 về sau các hàm gõ trên ô có hỗ trợ mặc định ...
còn các bản trước đó phải sử dụng hàm có sử dụng Ctrl +Shift + Enterhàm do người dùng tự định nghĩa


8/ Tôi chuyển thể vài hàm cơ bản vào VBA cho ai đó cần thì sử dụng nếu không vẫn có thể tuỳ chỉnh dữ vào hàm RTD tự viết lấy theo ý thích

Mã:
Option Explicit
Rem ##########
Rem ham sau la mau cho nguoi dung tuy chinh ket qua tra ve Val
Private Function RtdWrapper(DBpath As String, SQL As String, _
                            Optional ByVal GetHeaders As Boolean = False) As Variant
    On Error GoTo ErrorHandler ' B?t l?i
    Dim Val As Variant
    Dim myRTD As Object
 
    ' G?i hàm RTD
    Val = Application.WorksheetFunction.RTD("ExcelRTDServer.ExcelRTD", "", DBpath, SQL, GetHeaders)
 
    ' Ki?m tra n?u giá tr? tr? v? h?p l?
    If IsError(Val) Then
        RtdWrapper = "Error: " & Err.Description  ' Tr? v? thông báo l?i
    Else
        RtdWrapper = Val  ' Tr? v? giá tr? h?p l?
    End If
    Exit Function

ErrorHandler:
    ' X? lý l?i có th? cho l?i COM
    If Err.Number = -2146827850 Then ' L?i liên quan d?n COM
        RtdWrapper = CVErr(xlErrNA) ' Tr? v? #N/A cho l?i COM
        Debug.Print "COM Error in RtdWrapper: " & Err.Description
    Else
        RtdWrapper = CVErr(xlErrValue) ' Tr? v? #VALUE! cho các l?i khác
        Debug.Print "General Error in RtdWrapper: " & Err.Description
    End If
End Function

Sub Test_RtdWrapper()
    Dim Val As Variant ' Thay d?i ki?u d? li?u thành Variant
    Dim Excelpath As String
    Dim SQL As String
    Dim Headers As Boolean

    Excelpath = ThisWorkbook.Path & "\DataRTD.xlsx"
    SQL = "SELECT * FROM  [Data$]"
    Headers = True

    Val = RtdWrapper(Excelpath, SQL, Headers)
 
    ' Ki?m tra n?u Val là m?t l?i và thông báo
    If IsError(Val) Then
        Debug.Print "An error occurred: " & Val ' In ra thông báo l?i
    Else
        Debug.Print Val  ' In giá tr? tr? v? h?p l? vào c?a s? Immediate
    End If
End Sub
Rem ##########

hàm trả về Val từ đó ta viết hàm phụ tuỳ chỉnh theo ý thích ... mã Debug.Print ra như sau

1731156287433.png


9/ Áp dụng cho truy xuất dữ liệu SQLite như trên chỉ khác Class sử dụng nó là SQLiteRTD

Mã:
=RTD("excelrtdserver.sqlitertd",,C5,C6,C7)

Hình ảnh áp dụng cho SQlite

1731157149491.png


đính kèm File phía dưới và các ví dụ mẫu + code mẫu cho ai đó yêu thích thì sử dụng...
trong quá trình sử dụng có phát sịnh lỗi hay chưa rõ cứ nêu chi tiết nếu được tôi sẻ hổ trợ xử lý và điều chỉnh code cho phù hợp
 

File đính kèm

  • ExcelRTDServer_GPE.rar
    4.6 MB · Đọc: 23
Lần chỉnh sửa cuối:
ai rảnh thử File bài số 1 thay thế cho Power Query truy xuất dữ liệu file Data.accdb xem có gì khác biệt ??!!!
 
Web KT

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

Back
Top Bottom