Cách khai báo biến TARGET của thủ tục nằm trong *.DLL(

Liên hệ QC

VADaNang

Thành viên chính thức
Tham gia
4/12/06
Bài viết
65
Được thích
47
Xin được giúp đỡ
+ Thủ tục trong “Worksheet”
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Application.Run "'CHUONGTRINH.XLS'!Tinh_Toan", Target
End Sub
+ Thủ tục trong module của file CHUONGTRINH.XLS
Sub Tinh_Toan(ByVal Target As Excel.Range)
Hangcp = Target.EntireRow.Count
Cot = Target.Column
.......................
End Sub
+ Bây giờ tôi muốn đưa thủ tục “Tinh_Toan (ByVal Target As Excel.Range)”
này vào trong trong file *.dll (viết bằng VB) để khi gọi ra nó hiểu được các biến Hangcp, Cot.
Xin hỏi cách khai báo biến Target của thủ tục nằm trong *DLL (VB)?
Xin cám ơn.
 
Xin hỏi cách khai báo biến Target của thủ tục nằm trong *DLL (VB)?
- Chạy VB6, chọn File/ New Project, chọn ActiveX DLL, nhấn OK
- Nhấn Project/ References, chọn Microsoft Excel 12.0 Object Library
(số 12.0 sẽ tuỳ thuộc bạn cài phiên bản Office nào)
- Nhấn OK để đóng hộp thoại.
- Viết code cho Class Modules
Bạn muốn khai báo biến Target dạng Range thì chỉ cần:
Mã:
Sub Tinh_Toan([B][COLOR=red]ByVal Target As Range[/COLOR][/B])
    Hangcp = Target.EntireRow.Count
    Cot = Target.Column
    '.......................
End Sub
.....
Biên dịch ra file *.dll
......
 
Cám ơn bạn đã chỉ dẫn rất rõ ràng.
 
Xin chào.
Tôi đã làm và khai báo được Range và tạo ra 1 file *.DLL (không có lỗi gì) nhưng không biết khi gọi thủ tục từ DLL này ra thì nó báo lỗi “Class doesn’t support automation”.
tức hai biến HangcpCot không nhận biết được.
Xin được giúp đỡ.
 
Hiện tại mình bị vướng trong khâu lấy dữ liệu từ bên trong thủ tục (tức lấy thông số từ biến truyền vào là TARGET) chứ khâu dịch DLL, Đăng ký và gọi thủ tục từ DLL thì ổn.(Các thủ tục khác gọi từ DLL với tham biến Interger, mảng ... thì hoạt động tốt).
 
Mình thấy có vấn đề gì đâu nhỉ!
Bạn làm theo các bước sau:
B1: Tạo file *.dll
- Chạy VB6, chọn File/ New Project, chọn ActiveX DLL, nhấn OK
- Nhấn Project/ References, chọn Microsoft Excel 12.0 Object Library
(số 12.0 sẽ tuỳ thuộc bạn cài phiên bản Office nào...)
- Nhấn OK để đóng hộp thoại.
- Viết code cho Class Modules (Name là clsClass1 chẳng hạn)
Mã:
Sub Tinh_Toan(ByVal Target As Range)
    hangcp = Target.EntireRow.Count
    cot = Target.Column
    MsgBox "Cot = " & cot & "  HangCP = " & hangcp
End Sub
- Nhấn Project/ Project1 Properties, đặt tên cho Project Name (là GoiDLL chẳng hạn)
- Nhấn File/ Make GoiDLL.dll
B2: sử dụng các hàm, thủ tục trong file dll
- Chạy MS Excel, vào VBA, insert Module
- Nhấn tiếp Tools/ References, nhấn nút Browse để chọn file *.dll mà mình vừa tạo ra--->OK để đóng hộp thoại.
Trong Modules code bạn thử thêm đoạn code sau:
Mã:
Option Explicit
Public Sub thu()
Dim objThu As goiDLL.clsClass1
Set objThu = New clsClass1
Call objThu.Tinh_Toan(Range("A1:B10"))
'.....
Set objThu = Nothing
End Sub
Vậy thôi!
 
Cám ơn bạn nvson, vd của bạn rất dễ hiểu.
Bạn có thể vd thêm cách lấy dữ liệu ngược lại, từ GoiDLL lấy dữ liệu ở ô nào đó trên Excel không?
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom