[GIÚP] Những lưu ý khi viết code trong VB6 (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

nth09061985

Thành viên mới
Tham gia
19/7/13
Bài viết
49
Được thích
5
Mấy hôm nay em đang học cách biên dịch code VBA sang mã dll bằng cách dùng VB6, Em có làm thử mấy cái sub đơn giản kiểu như msgbox "GÌ GÌ ĐÓ" thì khi sang VBA bên excel thi chạy được nhưng khi em tạo thủ tục phức tạp hơn 1 chút bên VB6 thì khi chạy nó báo lỗi như sau:
run-time error '1004'
method '~' of object '~' failed


Cụ thể như sau ạ:!
Bên VB6 em có viết thủ tục sau:
Mã:
Private Excel As Excel.Application

Public Property Set ExcelApp(ByRef ExcelApp As Excel.Application)
Set Excel = ExcelApp
End Property

Public Sub Test()
Dim Dic As Object
Dim DL(), Lr As Long, Kq(), i As Long, d As Long
Set Dic = CreateObject("Scripting.Dictionary")


With Excel.ActiveWorkbook.Sheets("Sheet1")
Lr = .Range("A" & Rows.Count).End(xlUp).Row
DL = .Range("A2:B" & Lr)
ReDim Kq(1 To UBound(DL, 1), 1 To 2)
For i = 1 To UBound(DL, 1)
With Dic
If Not .Exists(DL(i, 2)) Then
d = d + 1
.Add DL(i, 2), d
Kq(d, 1) = d
Kq(d, 2) = DL(i, 2)
End If
End With
Next i
.Range("D2").Resize(d, 2) = Kq
End With
End Sub

Private Sub Class_Terminate()
Set Excel = Nothing
End Sub

Sau đó em Make..... thành file Vidu1.dll (project1 em đổi tên thành Duan1)
Bên cửa sổ VBA của File Test.Xlsm em tạo thủ tục như sau:
Mã:
Public Sub Test()
Dim Obj As New Duan1.Vidu1
Set Obj = New Duan1.Vidu1
Set Obj.ExcelApp = Application
Obj.Test
End Sub
Nhưng khi chạy code nó báo lỗi như em đưa ở trên ạ?
Em muốn hỏi các anh chị mấy ý:
+ Tại sao code trong VBA nó báo lỗi, liệu có phải code trong VB6 em viết sai?
+ Cần lưu ý gì khi viết code trong VB6? Các anh chị giải thích giúp em kĩ chỗ này 1 chút, vì em không biết trong VB6 cái gì được dùng cái gì không được dùng ạ! (Ví dụ về: Phương thức, thuộc tính, mảng....)
P/S: Trước khi viết code trong VB6 thì em đã test trước trong VBA thì code chạy ngon ạ!
Mong anh chị giúp đỡ!
 

File đính kèm

Lần chỉnh sửa cuối:
Lâu lắm rồi mình không vọc Dic ..dạo nay mình đang tập vọc Viết Functin ...truyền tham số vớ vẫn tiện đây viết cho Bạn luôn thử test xem thế nào nha ...
Code trong *.dll
PHP:
Public Sub DicDuyNhat(ByVal dArr As Range, ByVal sArr As Range)
    Dim i As Long, Arr(), kq(), k As Long:Arr = dArr.Value
    ReDim kq(1 To UBound(Arr), 1 To 2)
    With CreateObject("scripting.dictionary")
        For i = 1 To UBound(Arr)
            If Not .Exists(Arr(i, 2)) Then
                k = k + 1
                .Add Arr(i, 2), k
                kq(k, 1) = Arr(i, 1)
                kq(k, 2) = Arr(i, 2)
            End If
        Next
        sArr.Resize(k, 2) = kq
    End With
End Sub
Thủ tục gọi Code trong VBA... Lưu ý Check Tools\References\Browse\*.dll
Áp dụng cho cách mình viết ......còn lại có một mớ cách khác nữa từ từ Bạn nghiên cứu
PHP:
Sub Test_DicDuyNhat()
With New DicVBA.LocDuyNhat
    .DicDuyNhat Range("A2", [B65536].End(3)), [P2]
End With
End Sub
 
Lần chỉnh sửa cuối:
Lâu lắm rồi mình không vọc Dic ..dạo nay mình đang tập vọc Viết Functin ...truyền tham số vớ vẫn tiện đây viết cho Bạn luôn thử test xem thế nào nha ...
Code trong *.dll
PHP:
Public Sub DicDuyNhat(dArr As Excel.Range, sArr As Excel.Range)
    Dim i As Long, Arr(), kq(), k As Long:Arr = dArr.Value
    ReDim kq(1 To UBound(Arr), 1 To 2)
    With CreateObject("scripting.dictionary")
        For i = 1 To UBound(Arr)
            If Not .Exists(Arr(i, 2)) Then
                k = k + 1
                .Add Arr(i, 2), k
                kq(k, 1) = Arr(i, 1)
                kq(k, 2) = Arr(i, 2)
            End If
        Next
        sArr.Resize(k, 2) = kq
    End With
End Sub
Thủ tục gọi Code trong VBA... Lưu ý Check Tools\References\Browse\*.dll
Áp dụng cho cách mình viết ......còn lại có một mớ cách khác nữa từ từ Bạn nghiên cứu
PHP:
Sub Test_DicDuyNhat()
With New DicVBA.LocDuyNhat
    .DicDuyNhat Range("A2", [B65536].End(3)), [P2]
End With
End Sub
Cảm ơn bạn nhiều lắm, code này của bạn mình chạy thử thấy OK rồi! Tuy nhiên bạn có thể sửa theo code của mình không? Cách truyền tham số trong thủ tục này mình chưa quen dùng lắm! Mình sẽ từ từ nghiên cứu cảm ơn bạn nhiều!
 
Cảm ơn bạn nhiều lắm, code này của bạn mình chạy thử thấy OK rồi! Tuy nhiên bạn có thể sửa theo code của mình không? Cách truyền tham số trong thủ tục này mình chưa quen dùng lắm! Mình sẽ từ từ nghiên cứu cảm ơn bạn nhiều!
Mình nhìn thấy 2 dòng sau là né một bên rồi vì mình không có thói quên viết theo phong cách đó...nên mình sửa lại nó sẽ rối lên mất và không giống ai cả......--=0--=0
PHP:
Lr = .Range("A" & Rows.Count).End(xlUp).Row
DL = .Range("A2:B" & Lr)
 
Web KT

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

Back
Top Bottom