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
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