M
minimaster
I like to convert an Excel VBA Addin to VB.net as an COM addin
<- Here is the Problem. Normally ProcKind returns the "vbext_ProcKind"
but vb.net 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:
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
<- Here is the Problem. Normally ProcKind returns the "vbext_ProcKind"
but vb.net 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:
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