导出和导入所有模块和用户表单(不访问VbaProject.OTM)

导出和导入所有模块和用户表单(不访问VbaProject.OTM),vba,outlook,Vba,Outlook,我有一个从Excel导入和导出所有模块和userform的代码,但我需要它在Outlook上工作 我无法将文件VbaProject.OTM与我的代码共享(citrix不同步此文件,并且Outlook配置文件是虚拟的,citrix无法查看) 目前的解决方案是手动导出和导入每个模块和userform,但使用Excel,我可以使用vbacode导入和导出 如何从Outlook导入和导出 Public Sub ExportModules() szExportPath = "M:\ICM

我有一个从Excel导入和导出所有模块和
userform
的代码,但我需要它在Outlook上工作

我无法将文件
VbaProject.OTM
与我的代码共享(citrix不同步此文件,并且Outlook配置文件是虚拟的,citrix无法查看)

目前的解决方案是手动导出和导入每个模块和
userform
,但使用Excel,我可以使用
vba
code导入和导出

如何从Outlook导入和导出


    Public Sub ExportModules()

   szExportPath = "M:\ICM\Downloads\excel_test\"

    On Error Resume Next
        Kill szExportPath & "*.*"
    On Error GoTo 0

    szSourceWorkbook = ActiveWorkbook.Name

    Set wkbSource = Application.Workbooks(szSourceWorkbook)

    For Each cmpComponent In wkbSource.VBProject.VBComponents

        bExport = True

        szFileName = cmpComponent.Name

        ct = cmpComponent.Type

        Select Case ct

            Case 3
                szFileName = szFileName & ".frm"

            Case 1
                szFileName = szFileName & ".bas"

            Case Else
                bExport = False

        End Select

        If bExport Then
            cmpComponent.Export szExportPath & szFileName
        End If

    Next cmpComponent

    MsgBox "Esportazione completata"

End Sub

以及从excel导入模块和用户表单的代码:

Public Sub ImportModules()

    delmodules = True

    If ActiveWorkbook.Name = ThisWorkbook.Name Then delmodules = False

    szTargetWorkbook = ActiveWorkbook.Name

    Set wkbTarget = Application.Workbooks(szTargetWorkbook)

    szImportPath  = "M:\ICM\Downloads\excel_test\"

    Set objFSO = CreateObject("Scripting.FileSystemObject")

    If objFSO.GetFolder(szImportPath).Files.Count = 0 Then
       MsgBox "Nessun file da importare"
       Exit Sub
    End If

    Call DeleteVBAModulesAndUserForms(delmodules)

    Set cmpComponents = wkbTarget.VBProject.VBComponents

    For Each objFile In objFSO.GetFolder(szImportPath).Files
        If (objFSO.GetExtensionName(objFile.Name) = "frm") Or _
           (objFSO.GetExtensionName(objFile.Name) = "bas") Then
           cmpComponents.Import objFile.Path
        End If

    Next objFile

    MsgBox "Importazione completata"

End Sub

Function DeleteVBAModulesAndUserForms(delmodules)

    Set VBProj = ActiveWorkbook.VBProject

    For Each VBComp In VBProj.VBComponents
        If VBComp.Type = 1 Or VBComp.Type = 3 Then
           'Thisworkbook or worksheet module
           'We do nothing
        Else
           VBProj.VBComponents.Remove VBComp
        End If

        Next VBComp

End Function

但目前,函数DeleteVBAModulesAndUserForms的效果并不好,因为添加导入的每个模块而不是重写

但首先我的目标是在Outlook中工作的代码

我正在测试创建一个
CreateObject(“Outlook.Application”)
,但是我不知道如何在Outlook中设置
ActiveWorkbook.Name
Application.workbook


如果有人知道,请帮助我。

VBIDE对象未在Outlook VBA对象中公开,因为Outlook已连接到internet,因此出于安全考虑,允许对VBIDE对象进行编程访问可能是一个重大漏洞。感谢@0m3r的回答,是的,我每次编辑文件时都手动导出和导入模块和用户表单。要将每个模块共享给同事,请先导出我的模块,然后导入每个outlook应用程序同事上的模块。因此,出于安全原因,我不能使用代码vba VBProject.VBComponents.Import或Export,而不是excel。您好,我已通过ms access解决问题,使用带有电子邮件代码的按钮创建掩码,并为每个用户共享文件ms access。由于Outlook已连接到internet,出于安全考虑,thansk.VBIDE对象未在Outlook VBA对象中公开,允许以编程方式访问VBIDE对象可能是一个主要漏洞。感谢@0m3r的回答,是的,每次编辑文件时,我都手动导出和导入模块和用户表单。要将每个模块共享给同事,请先导出我的模块,然后导入每个outlook应用程序同事上的模块。因此,出于安全原因,我不能使用代码vba VBProject.VBComponents.Import或Export,而不是excel。您好,我已通过ms access解决问题,使用带有电子邮件代码的按钮创建掩码,并为每个用户共享文件ms access。坦斯克。