chuyển code từ vba trong excel qua vb6 báo lỗi...

Liên hệ QC

thothongcong

Thành viên mới
Tham gia
9/10/09
Bài viết
9
Được thích
3
em chỉ mới chập chững viết code bên vb6.....
khi đọc tài liệu trên internet thì chỉ cần mình viết chuẩn bên vba thì qua bên vb6 cũng với code đó có thể sử dụng được nhưng mình làm chỉ toàn thấy báo lỗi.
mong các pác nào có kinh nghiệm xin chỉ giáo thêm
em có tải file hình báo thông tin lỗi kèm với file mà em viết....
 

File đính kèm

  • bao loi.JPG
    bao loi.JPG
    16.7 KB · Đọc: 12
  • giai thich giup code.rar
    20.5 KB · Đọc: 36
Chào bạn,
Bạn phải cụ thể hơn, đưa đoạn code thì hy vọng mới có người giúp bạn được.
Nên nhớ rằng VBA và VB6 khác nhau, không phải code nào trong VBA được thì VB6 cũng được.

Lê Văn Duyệt
 
Mã:
Sub lamthu()Dim loc As TN.thunghiem
Set loc = New TN.thunghiem
[COLOR=#ff0000]    loc.loc_bh[/COLOR]
Set loc = Nothing
End Sub
đây chỉ là đoạn code đơn giản mà em đang làm thử chuyển qua DLL nhưng khi viết code trong excel thì lại bị lỗi như hình mà em có đưa file đính kèm
debug tại vị trí này ( loc.loc_bh)
trong khi đó cũng với code đó chạy trên excel thì lại rất okie.......
em có gởi kèm file vb6 + flie DLL em đã xuất ra|+flie excel
thank các pác!!!
 

File đính kèm

  • vb6+DLL+excel.rar
    32.7 KB · Đọc: 44
Lần chỉnh sửa cuối:
Mã:
Sub lamthu()Dim loc As TN.thunghiem
Set loc = New TN.thunghiem
[COLOR=#ff0000]   loc.loc_bh[/COLOR]
Set loc = Nothing
End Sub
đây chỉ là đoạn code đơn giản mà em đang làm thử chuyển qua DLL nhưng khi viết code trong excel thì lại bị lỗi như hình mà em có đưa file đính kèm
debug tại vị trí này ( loc.loc_bh)
trong khi đó cũng với code đó chạy trên excel thì lại rất okie.......
em có gởi kèm file vb6 + flie DLL em đã xuất ra|+flie excel
thank các pác!!!

Bạn làm thế không được rồi.
Đối tượng Cells - Range là thuộc tính của Application. Thực ra viết đầy đủ thì là vd.:
Application.Cells(...)
Application.ActiveSheet.Cells(...)
v...v
Tóm lại muốn truy cập "tới cái gì đó" trong Excel thì bạn phải có đối tượng Application. Khi bạn "chạy" code trong Excel thì bạn có ngay Application vì nó được tạo khi khởi động Excel. Tất nhiên bạn có thể truy cập đối tượng Application này tại bất cứ đâu trong code Excel.

Bây giờ trong code VB bạn có: mHangCuoi = Cells(65000, 15).End(xlUp).Row
VB đâu có biết Cells là cái gì??? Nó không tạo đối tượng Application, không được "biếu", "tặng", "truyền" ... thì làm sao nó có để mà truy cập tới các thuộc tính, gọi các method của "vị" Application này???
Vậy bạn phải truyền cho VB "vị" Application kia. Vd. code là

Bên VB
Mã:
Option Explicit
' biến dùng để nhớ "vị" Application ma Excel truyền cho
Private FExcelApp As Excel.Application

Public Property Set ExcelApp(ByRef excel_App As Excel.Application)
    ' nhớ "vị" Application mà Excel truyền cho vào biến
    Set FExcelApp = excel_App
End Property

Private Sub Class_Terminate()
    Set FExcelApp = Nothing
End Sub

Sub loc_bh()
    Dim mHangCuoi As Long
    Dim i As Integer
    ' trong Excel bạn có thể viết tắt Cells thì Excel hiểu là bạn muốn truy cập tới
    ' Cells của ActiveSheet. VB không biết Cells này là gì nên bạn phải truy cập tới
    ' nó thông qua Application đã ghi nhớ
    
    With FExcelApp.ActiveSheet
        mHangCuoi = .Cells(65000, 15).End(xlUp).Row
        .Range(.Cells(1, 23), .Cells(65000, 25)).ClearContents
        For i = 2 To mHangCuoi
        
                .Cells(i, 23) = .Cells(i, 16) & "_" & .Cells(i, 15)
                .Cells(i, 24) = Mid(.Cells(i, 22), 2, 2) * 10
                .Cells(i, 25) = Mid(.Cells(i, 22), 4, 2) * 10
          
        Next i
    End With
End Sub

Bên Excel
Mã:
Sub code_chay_goi_vb6()
Dim loc As TN.thunghiem
    ' Tạo đối tượng (object)
    Set loc = New TN.thunghiem
    ' "truyền" Application (Pointer) sang cho VB
    Set loc.ExcelApp = Application
    ' gọi Method
    loc.loc_bh
    Set loc = Nothing
End Sub

Hiện bên Excel bạn có tham chiếu tới DLL là Missing. Bạn xóa nó đi rồi thêm lại
 
Câu trúc dòng lệnh trong VBA đâu phải y chang như trong VB đâu nên ko đc là phải rồi!
 
Bạn làm thế không được rồi.
Đối tượng Cells - Range là thuộc tính của Application. Thực ra viết đầy đủ thì là vd.:
Application.Cells(...)
Application.ActiveSheet.Cells(...)
v...v
Tóm lại muốn truy cập "tới cái gì đó" trong Excel thì bạn phải có đối tượng Application. Khi bạn "chạy" code trong Excel thì bạn có ngay Application vì nó được tạo khi khởi động Excel. Tất nhiên bạn có thể truy cập đối tượng Application này tại bất cứ đâu trong code Excel.

Bây giờ trong code VB bạn có: mHangCuoi = Cells(65000, 15).End(xlUp).Row
VB đâu có biết Cells là cái gì??? Nó không tạo đối tượng Application, không được "biếu", "tặng", "truyền" ... thì làm sao nó có để mà truy cập tới các thuộc tính, gọi các method của "vị" Application này???
Vậy bạn phải truyền cho VB "vị" Application kia. Vd. code là

Bên VB
Mã:
Option Explicit
' biến dùng để nhớ "vị" Application ma Excel truyền cho
Private FExcelApp As Excel.Application

Public Property Set ExcelApp(ByRef excel_App As Excel.Application)
    ' nhớ "vị" Application mà Excel truyền cho vào biến
    Set FExcelApp = excel_App
End Property

Private Sub Class_Terminate()
    Set FExcelApp = Nothing
End Sub

Sub loc_bh()
    Dim mHangCuoi As Long
    Dim i As Integer
    ' trong Excel bạn có thể viết tắt Cells thì Excel hiểu là bạn muốn truy cập tới
    ' Cells của ActiveSheet. VB không biết Cells này là gì nên bạn phải truy cập tới
    ' nó thông qua Application đã ghi nhớ
   
    With FExcelApp.ActiveSheet
        mHangCuoi = .Cells(65000, 15).End(xlUp).Row
        .Range(.Cells(1, 23), .Cells(65000, 25)).ClearContents
        For i = 2 To mHangCuoi
       
                .Cells(i, 23) = .Cells(i, 16) & "_" & .Cells(i, 15)
                .Cells(i, 24) = Mid(.Cells(i, 22), 2, 2) * 10
                .Cells(i, 25) = Mid(.Cells(i, 22), 4, 2) * 10
         
        Next i
    End With
End Sub

Bên Excel
Mã:
Sub code_chay_goi_vb6()
Dim loc As TN.thunghiem
    ' Tạo đối tượng (object)
    Set loc = New TN.thunghiem
    ' "truyền" Application (Pointer) sang cho VB
    Set loc.ExcelApp = Application
    ' gọi Method
    loc.loc_bh
    Set loc = Nothing
End Sub

Hiện bên Excel bạn có tham chiếu tới DLL là Missing. Bạn xóa nó đi rồi thêm lại
Em chạy code như anh hướng dẫn thì báo lỗi này:
Untitled.jpg
 

File đính kèm

  • vb6+DLL+excel.rar
    31.3 KB · Đọc: 4
. ...
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom