Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于导出宏的VBA宏_Vba_Excel - Fatal编程技术网

用于导出宏的VBA宏

用于导出宏的VBA宏,vba,excel,Vba,Excel,我想编写一个宏,用于导出VBA编辑器项目视图中存在的宏,因为无法导出多个文件 我之所以要这样做,是因为我需要.bas和.cls文件来创建一个doxygen文档 如果有人知道更简单的解决方案,请告诉我。否则:如何从项目一次导出所有VBA代码文件 致以最良好的问候和感谢 首先,不用说,任何“接触到您的代码”的代码都必须是可信的 是的,这是可能的,您可以使用VBProject和VBComponent来实现它。请看一看,然后。这些链接很好地解释了如何做你要求的事情 工作示例,导出.bas、.cls和.f

我想编写一个宏,用于导出VBA编辑器项目视图中存在的宏,因为无法导出多个文件

我之所以要这样做,是因为我需要
.bas
.cls
文件来创建一个doxygen文档

如果有人知道更简单的解决方案,请告诉我。否则:如何从项目一次导出所有VBA代码文件


致以最良好的问候和感谢

首先,不用说,任何“接触到您的代码”的代码都必须是可信的


是的,这是可能的,您可以使用VBProject和VBComponent来实现它。请看一看,然后。这些链接很好地解释了如何做你要求的事情

工作示例,导出
.bas
、.cls和
.frm
模块:

Option Explicit

Public Sub MakeDoxy()

    Dim rootDir As String
    Dim sourceDir As String

    rootDir = GetFolder("C:\") & "\"
    sourceDir = rootDir & "source\"

    If Dir(rootDir, vbDirectory) = "" Then
        MkDir rootDir
    End If

    If Dir(sourceDir, vbDirectory) = "" Then
        MkDir sourceDir
    End If

    ExportVBAModules (sourceDir)

End Sub

Private Sub ExportVBAModules(ByVal sourceDir As String)

    Dim objVBComp As VBComponent
    Dim objVBProj As VBProject
    Dim ext As String

    Set objVBProj = ThisWorkbook.VBProject

    For Each objVBComp In objVBProj.VBComponents

        ' We don't export THIS module
        If objVBComp.Name = "MakeDoxygen" Then GoTo Skip

        If Dir(sourceDir & objVBComp.Name, vbDirectory) = "" Then
            MkDir sourceDir & objVBComp.Name
        End If

        Select Case objVBComp.Type
            Case vbext_ct_ClassModule: ext = ".cls"
            Case vbext_ct_Document: GoTo Skip
            Case vbext_ct_StdModule: ext = ".bas"
            Case vbext_ct_MSForm: ext = ".frm"
            Case Else: GoTo Skip
        End Select

        objVBComp.Export sourceDir & objVBComp.Name & "\" & objVBComp.Name & ext
Skip:
    Next

End Sub


Private Function GetFolder(strPath As String) As String

    Dim fldr As FileDialog
    Dim sItem As String
    Set fldr = Application.FileDialog(msoFileDialogFolderPicker)

    With fldr
        .Title = "Select ''VBADoxy'' Root Folder"
        .AllowMultiSelect = False
        .InitialFileName = strPath
        If .Show <> -1 Then GoTo NextCode
        sItem = .SelectedItems(1)
    End With

NextCode:
    GetFolder = sItem
    Set fldr = Nothing

End Function
选项显式
公共子MakeDoxy()
Dim rootDir作为字符串
Dim sourceDir作为字符串
rootDir=GetFolder(“C:\”&“\”
sourceDir=rootDir&“source\”
如果Dir(rootDir,vbDirectory)=“”,则
MkDir rootDir
如果结束
如果Dir(sourceDir,vbDirectory)=“”,则
MkDir源目录
如果结束
ExportVBAModules(sourceDir)
端接头
专用子ExportVBAModules(ByVal sourceDir作为字符串)
作为VBComponent的Dim objVBComp
作为VBProject的Dim objVBProj
Dim ext作为字符串
设置objVBProj=thiswoolk.VBProject
对于objVBProj.VBComponents中的每个objVBComp
'我们不导出此模块
如果objVBComp.Name=“MakeDoxygen”,则转到跳过
如果Dir(sourceDir&objVBComp.Name,vbDirectory)=“”,则
MkDir sourceDir和objVBComp.Name
如果结束
选择案例objVBComp.Type
案例vbext\U ct\U类模块:ext=“.cls”
案例vbext\u ct\u文档:转到跳过
案例vbext\u ct\u std模块:ext=“.bas”
案例vbext\u ct\u MSForm:ext=“.frm”
其他情况:跳转
结束选择
objVBComp.Export sourceDir&objVBComp.Name&“\”&objVBComp.Name&ext
跳过:
下一个
端接头
私有函数GetFolder(strPath作为字符串)作为字符串
Dim fldr As FILE对话框
以字符串形式显示
设置fldr=Application.FileDialog(msoFileDialogFolderPicker)
与fldr
.Title=“选择“VBADoxy”根文件夹”
.AllowMultiSelect=False
.InitialFileName=strPath
如果.Show-1,则转到下一个代码
sItem=.SelectedItems(1)
以
下一个代码:
GetFolder=sItem
设置fldr=无
端函数

@StefanFalk如果你认为有好处,请添加你的答案(不要编辑我的)。我的编辑只是按照你的建议为我们之后的人编写的代码。如果你能在我的答案下面添加你的答案,你将对社区有好处:)
如果(typeof(T)==typeof(UInt16))