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.
Tên Project tôi để là Project1.
Tên Class tôi để là TestTHVBA.
Viết code bên trong như sau:
Vào File chọn Make Exe :
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:
Và:
Các bạn copy code trên rồi dán vào notepad và lưu file như trên là OK.
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:
Browse tới file exe của chúng ta. Vậy là OK.
Trên VBA tôi viết code như sau:
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.
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
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
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
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
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.