Tạo exe từ VB6 nạp vào thư viện VBA và chạy

tuhocvba

Administrator
Thành viên BQT
Như các bạn đã biết VB6 khi tạo DLL chỉ chạy được trên Office 32bit. Đây là điều bất tiện rất lớn. Do đó, ở bài viết này tôi sẽ hướng dẫn các bạn làm sao để chạy được trên Office 64bit.

Cách làm như sau:
Các bạn mở VB6. Chọn ActiveExE.
Theo Smod @OnceMore giải thích , ActiveExE khác với StandardExe là nó không có userform.
Ấn OK.
Bạn cần đăng nhập để thấy đính kèm

Tên Project tôi để là Project1.
Tên Class tôi để là TestTHVBA.
Bạn cần đăng nhập để thấy đính kèm

Viết code bên trong như sau:
Mã:
Public Function Newinstance(ProgID As String) As Object
  Set CreateInstance = CreateObject(ProgID)
End Function
Public Sub msgboxtuhocvba(ByVal s As String)
    MsgBox s
End Sub
Public Function tinhtong(ByVal a As Integer, ByVal b As Integer) As Integer
    tinhtong = a + b
End Function
Vào File chọn Make Exe :
Bạn cần đăng nhập để thấy đính kèm

Khi Make exe sẽ có cảnh báo gì đó. Kệ nó, không quan tâm.

Ta cần đăng ký (hủy đăng ký) file exe này nên tôi tạo ra hai file vbs như sau:
Register.vbs:
'AxExeReg.vbs
'
'Register an ActiveX EXE.
'
'RUN THIS AS AN ADMIN USER (on Vista or later you will
'be prompted for elevation).
'
'Drag the EXE's icon onto the icon for this file, or
'execute it from a command prompt as in:
'
'          AxExeReg.vbs fullpathtoEXE
'
Option Explicit

Private WinVer

If WScript.Arguments.Count < 1 Then
  WScript.Echo "Missing EXE parameter." & vbNewLine _
             & "Use AxExeReg.vbs fullpathtoEXE" & vbNewLine _
             & "or drag EXE's icon onto this script's icon."
Else
  With WScript.CreateObject("WScript.Shell")
    WinVer = .RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentVersion")
    If Fix(CSng(WinVer)) < 6 then
      'Win2K or XP (run by admin user).
      .Run """" & WScript.Arguments(0) & """ /regserver"
    Else
      'Vista or later, request elevation.
      With CreateObject("Shell.Application")
        .ShellExecute WScript.Arguments(0), "/regserver", , "runas"
      End With
    End If
  End With
  WScript.Echo "Reg Complete!"
End If
Và:
UnRegister.vbs:
'AxExeUnreg.vbs
'
'Unregister an ActiveX EXE.
'
'RUN THIS AS AN ADMIN USER (on Vista or later you will
'be prompted for elevation).
'
'Drag the EXE's icon onto the icon for this file, or
'execute it from a command prompt as in:
'
'          AxExeUnreg.vbs fullpathtoEXE
'
Option Explicit

Private WinVer

If WScript.Arguments.Count < 1 Then
  WScript.Echo "Missing EXE parameter." & vbNewLine _
             & "Use AxExeUnreg.vbs fullpathtoEXE" & vbNewLine _
             & "or drag EXE's icon onto this script's icon."
Else
  With WScript.CreateObject("WScript.Shell")
    WinVer = .RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentVersion")
    If Fix(CSng(WinVer)) < 6 then
      'Win2K or XP (run by admin user).
      .Run """" & WScript.Arguments(0) & """ /unregserver"
    Else
      'Vista or later, request elevation.
      With CreateObject("Shell.Application")
        .ShellExecute WScript.Arguments(0), "/unregserver", , "runas"
      End With
    End If
  End With
  WScript.Echo "Unreg Complete!"
End If
Các bạn copy code trên rồi dán vào notepad và lưu file như trên là OK.
Bạn cần đăng nhập để thấy đính kèm

Tôi giữ chuột vào file exe của tôi và thả vào file Register.vbs để đăng ký file exe này.
OK rồi đấy.
Bây giờ mở Excel lên:
Bạn cần đăng nhập để thấy đính kèm

Browse tới file exe của chúng ta. Vậy là OK.

Trên VBA tôi viết code như sau:
Mã:
Sub abb()
    Dim a As New Project1.TestTHVBA
   
    x = a.tinhtong(3, 5)
    MsgBox x
End Sub
Code chạy hoàn hảo.

Kỹ thuật này đã được Kiều Mạnh sử dụng nhưng không public. Nó được khai phá bởi Smod @OnceMore . Và hoàn thiện thành bài viết bởi admin.
 

NhanSu

SMod
Thành viên BQT
ActiveX EXE vẫn có thể có form chứ. Như vậy là phải chạy file ActiveX EXE này để load class vào bộ nhớ rồi mới chạy được vba phải không @tuhocvba @OnceMore ? Mình không có vb6 để thử.
 
O

OnceMore

Guest
@NhanSu activex exe vẫn chạy được form nhưng mặc định không cần form. Mình có thể add form và show nó bình thường.
 
T

thanhphong

Guest
Cho em hỏi:
Bước đăng ký có thể làm tự động được không ạ?
Bước select file exe nạp vào thư viện Excel có thể làm tự động được không ạ?
 
Top