Problem transferring VBA code w/ ProcOfLine & ProcBodyLine to VB.NET

M

minimaster

I like to convert an Excel VBA Addin to VB.net to have it as a COM
addin (Visual Basic 2010 Express)
The Problem: Normally when using ProOfLIne the parameter ProcKind
returns the "vbext_ProcKind"
but in vb.net it returns every time 0 (vbext_pk_Proc)
The same Code in VBA does function correctly.
Because of this ProcBodyLine throws an error whenever the Line of a
Property should be determined.
Anyone an idea how to solve this?
my VB.Net code (almost identical to VBA)

Imports Microsoft.Office.Core
Imports Excel = Microsoft.Office.Interop.Excel Imports VBIDE =
Microsoft.Vbe.Interop Imports Microsoft.Vbe.Interop.vbext_ProcKind
Imports Microsoft.Vbe.Interop.vbext_ComponentType

Private Sub addRoutinesToPopup(ByRef moduleCmdBar As CommandBar, _
ByRef VBComp As VBIDE.VBComponent)

Dim ProcKind As VBIDE.vbext_ProcKind
Dim LineNum As Long
Dim ProcName As String
Dim oldName As String = ""
With VBComp.CodeModule
LineNum = .CountOfDeclarationLines + 1
Do Until LineNum >= .CountOfLines
ProcName = .ProcOfLine(LineNum, ProcKind) ' <<<
delivers always 0 for ProcKind!
If Not ProcName = oldName Then
oldName = ProcName
myButton1 =
moduleCmdBar.Controls.Add(msoControlButton)
Select Case
TypeOfProc(.Lines(.ProcBodyLine(ProcName, ProcKind), 1)) '<<< throws
error when asking for line of a property
Case "Sub"
myButton1.FaceId = 186
Case "Sub with Param."
myButton1.FaceId = 187
Case "Function"
myButton1.FaceId = 385
Case Else
myButton1.FaceId = 190
End Select
With myButton1
.Caption = ProcName ' the sub or
Function name
.Parameter = TheMacroFile 'ADDIN_NAME the
file name containing the macros
.Tag = VBComp.Name ' the code module
name
.OnAction = "!<MacroLister.Connect>"
End With
End If
LineNum = LineNum + .ProcCountLines(ProcName,
ProcKind)
LineNum = LineNum + 1
Loop
End With
End Sub
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top