Convert vba to vb6 and create a .dll - how to - hints, tips and risks

excel, vb6-migration, vba

Solution

@Tom

Ok, I'm actually learning this with you, so here goes,

VB.Net code (I am using .net 2.0)

In Visual Studio 2005 open a new Class Library Project Then remove all the garbage already written there and paste the code

'First thing to do is add a reference the Excel Runtime

Imports Microsoft.Office.Interop.Excel
Imports System.Runtime.InteropServices


Namespace ExcelExample

' the following is an Attribute spcifying that the class can be accesses in a unmanaged (non-.net) way

Imports Microsoft.Office.Interop.Excel
Imports System.Runtime.InteropServices


 Public Class ExcelVB


    Public Function getParameterNumberOfMaterial() As Integer
        On Error Resume Next
        Dim a As String
        Dim appInst As New Microsoft.Office.Interop.Excel.Application
        a = appInst.Sheets("Parameters").name

        If IsNumeric(appInst.Worksheets(a).range("C3").Value) Then
            If appInst.Worksheets(a).range("C3").Value > 0 Then

                getParameterNumberOfMaterial = appInst.Worksheets(a).range("C3").Value
            Else
                MsgBox("Please check cell C3 in the sheet 'Parameters'. It should include a numeric value which is greater than zero")
                MsgBox("Parameter Number of Material/Cost is set to the default value of 10")
                getParameterNumberOfMaterial = 10
            End If
        Else
            MsgBox("Please check cell C3 in the sheet 'Parameters'. It should include a numeric value which is greater than zero")
            MsgBox("Parameter Number of Material/Cost is set to the default value of 10")
            getParameterNumberOfMaterial = 10
        End If
        On Error GoTo 0
    End Function
End Class

End Namespace

Build the solution by pressing F6 go to Project->Project Proerties and Check Register for COm interop

So the output is a .DLL and a .tlb , the Excel file should reference the .tlb file,

you have to register the DLL by regasm /codebase c:\Excel\dllname.dll

Then you can access the Function from Excel.

Heres a link to my project folder unrar it, and you'll find a an excel workbook that contains a reference to the .dll via the .tlb

http://cid-4af152a1af4d7db8.skydrive.live.com/self.aspx/Documents/Debug.rar

Heres another great article

http://richnewman.wordpress.com/2007/04/15/a-beginner%E2%80%99s-guide-to-calling-a-net-library-from-excel/

Problem

I should convert a huge load of code which was written in VBA (Excel) to VB6. But I really do not know what I have to take care of or where to begin. Therefore it would be great to get some hints here from the VB6 experts. I installed already MS Visual Studio and played a bit around. But I'm not a VB6 expert and do not really know what I have to do. The final goal is to have all the VBA code, which is currently placed in one excel vba macro into a VB6 project and create a .dll out of it. This .dll should be referenced by the excel and the excel should run like it does now :-) For example what do I have to do to convert this vba code to VB6. ``` Public Function getParameterNumberOfMaterial() As Integer 10 On Error Resume Next Dim a As String 20 a = Sheets("Parameters").name 30 If IsNumeric(Application.Worksheets(a).range("C3").Value) Then 40 If Application.Worksheets(a).range("C3").Value > 0 Then 50 getParameterNumberOfMaterial = Application.Worksheets(a).range("C3").Value 60 Else 70 MsgBox "Please check cell C3 in the sheet 'Parameters'. It should include a numeric value which is greater than zero" 80 MsgBox "Parameter Number of Material/Cost is set to the default value of 10" 90 getParameterNumberOfMaterial = 10 100 End If 110 Else 120 MsgBox "Please check cell C3 in the sheet 'Parameters'. It should include a numeric value which is greater than zero" 130 MsgBox "Parameter Number of Material/Cost is set to the default value of 10" 140 getParameterNumberOfMaterial = 10 150 End If 160 On Error GoTo 0 End Function ``` Edit: Yes and if it is possible to convert vba code into a .dll this would be fine also. Then I would not have to convert the code. But I think it is only possible to create a .dll out of vb6 code.

Original source