ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Problem transferring VBA code w/ ProcOfLine & ProcBodyLine to VB.NET (https://www.excelbanter.com/excel-programming/444242-problem-transferring-vba-code-w-procofline-procbodyline-vbulletin-net.html)

minimaster

Problem transferring VBA code w/ ProcOfLine & ProcBodyLine to VB.NET
 
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


All times are GMT +1. The time now is 02:10 AM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com