VB 6.0 - VBIDE - Asked By Rusty on 14-Oct-11 11:03 AM

I can use CodeModule to get Member.Name which is usefull. How can I get what type of module it is - CLS, FRM or BAS?
Sri K replied to Rusty on 15-Oct-11 05:36 AM
Friend Sub copyComponents(ByVal src As Microsoft.Office.Interop.Excel.Workbook, _ 
                ByVal tgt As Microsoft.Office.Interop.Excel.Workbook) 
 
    Dim srcVBP As VBIDE.VBProject = src.VBProject 
    Dim tgtVBP As VBIDE.VBProject = tgt.VBProject 
 
    Dim strTemp As String = tgt.Path 
 
    Dim strCls As String = "\ClassModule.cls" 
    Dim strDoc As String = "\Document.cls" 
    Dim strFrm As String = "\Form.frm" 
    Dim strMod As String = "\Module.bas" 
 
    Dim strExp As String = tgt.Path & "\xlsExport.dat" 
    Dim exportComp As Boolean = False 
 
    For Each srcWks As Microsoft.Office.Interop.Excel.Worksheet In src.Worksheets 
      srcWks.Copy(Before:=tgt.Sheets(1)) 
    Next 
 
    Dim tgtComp As VBIDE.VBComponent 
 
    For Each vbaComp As VBIDE.VBComponent In tgtVBP.VBComponents 
      If vbaComp.Properties.Count >= 123 AndAlso vbaComp.Type = VBIDE.vbext_ComponentType.vbext_ct_Document Then 
        tgtComp = vbaComp 
      End If 
    Next vbaComp 
 
    For Each vbaComp As VBIDE.VBComponent In srcVBP.VBComponents 
      Select Case vbaComp.Type 
        Case VBIDE.vbext_ComponentType.vbext_ct_ClassModule     ' Class Module 
          strExp = strTemp & strCls 
          exportComp = True 
          Exit Select 
 
        Case VBIDE.vbext_ComponentType.vbext_ct_Document      ' Document Module 
 
          ' for: "ThisWorkbook" only 
          If vbaComp.Properties.Count >= 123 Then 
            Dim strModName As String = "Workbook_Open" 
            Dim modStart As Integer = vbaComp.CodeModule.ProcBodyLine(strModName, VBIDE.vbext_ProcKind.vbext_pk_Proc) 
            Dim modLines As Integer = vbaComp.CodeModule.ProcCountLines(strModName, VBIDE.vbext_ProcKind.vbext_pk_Proc) 
            Dim strCode As String = vbaComp.CodeModule.Lines(modStart + 1, intBodyLines(vbaComp.CodeModule, modStart, modLines)) 
 
            addCode(tgtComp.CodeModule, strModName, strCode) 
          End If 
 
          For Each wkbComp As VBIDE.VBComponent In tgtVBP.VBComponents 
            If wkbComp.Name = vbaComp.Name Then 
              exportComp = False 
              Exit For 
            Else 
              strExp = strTemp & strDoc 
              exportComp = True 
            End If 
          Next wkbComp 
          Exit Select 
 
        Case VBIDE.vbext_ComponentType.vbext_ct_MSForm        ' UserForm 
          strExp = strTemp & strFrm 
          exportComp = True 
          Exit Select 
 
        Case VBIDE.vbext_ComponentType.vbext_ct_StdModule       ' Code Module 
          strExp = strTemp & strMod 
          exportComp = True 
          Exit Select 
 
        Case Else                           ' Unknown Type 
          exportComp = False 
 
      End Select 
 
      If exportComp Then 
        vbaComp.Export(strExp) 
        tgtVBP.VBComponents.Import(strExp) 
        System.IO.File.Delete(strExp) 
        If getExt(strExp) = "frm" Then System.IO.File.Delete(getPath(strExp) & getSafeName(strExp) & ".frx") 
      End If 
 
    Next vbaComp 
 
    srcVBP = Nothing 
    tgtVBP = Nothing 
    strTemp = Nothing 
    strCls = Nothing 
    strDoc = Nothing 
    strFrm = Nothing 
    strMod = Nothing 
    strExp = Nothing 
    exportComp = Nothing 
    tgtComp = Nothing 
 
    GC.Collect() 
 
  End Sub 
 
Rusty replied to Sri K on 17-Oct-11 09:52 AM
Thank you very much
Sri K replied to Rusty on 22-Oct-11 11:03 AM
You are Welcome.