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