分享

office Vba用第三方编辑器,如Sublime或Atom

 刮骨剑 2019-11-11
office VBA的ide实在是太烂了,代码提示和语法高亮功能都不行,但是由于MS没有开放这个接口,不能用如sublime或Atom这样优秀的第三方编辑器?

经过一番研究,利用vba的导入导出模块的功能 ,部分实现了这个功能:

  1. 新建一个xlsm文件
  2. alt+F11打开vbe环境,选中左边的ThisWorkbook,在代码面板输入下面的代码
Public Sub exportAndImport()
        Dim wkBook As Excel.Workbook
        Dim wkComp As VBIDE.VBComponent
        Dim macroPath As String
        Set wkBook = ThisWorkbook
        
        On Error Resume Next
        macroPath = ThisWorkbook.Path & "\" & "export\"
        For Each wkComp In wkBook.VBProject.VBComponents 'export
            If wkComp.Type = vbext_ct_StdModule Then '如果是模块就导出并删除
                wkComp.Export macroPath & wkComp.Name & ".bas"
                wkBook.VBProject.VBComponents.Remove wkComp
            End If
        Next
        macroPath = ThisWorkbook.Path & "\" & "import\"
        tempfile = Dir(macroPath & "*.bas")
        
        While tempfile <> ""
            Set wkComp = wkBook.VBProject.VBComponents.import(macroPath & tempfile) '导入代码
            wkComp.Name = Left(tempfile, Len(tempfile) - 4)
            tempfile = Dir
        Wend
        Debug.Print "in export and import"
    End Sub
  1. 解释下,这就是把当前工作薄里的所有模块导出到当前子目录export,并从当前子目录import里,导入各个bas文件为对应文件名的模块。比如我的一个main.bas文件里的代码会导入成main模块。这样,就可以用 sublime或者 atom等ide来编辑。
    main模块
  2. 两个问题
  • 问题1:众所周之,在VBA中,模块是导出成.bas文件,类模块是导出成.cls文件,但是我发现.VBProject.VBComponents.import 不能指定导入类型,只要是允许导入的文件,都导入成VBA的模块。更不用提窗体的frm文件。
  • 问题2:为了方便,我在工作表里扔了两个Button,一个Button宏是上述的函数,一个Button宏是运行 main里的一个main()函数
    但是我发现,只要把这两个宏的功能集中的一个宏里,就会出问题,类似下面这样
call exportAndImport()
call main.main()

感觉是exportAndImport,会多导入一个bas文件,结果会导致函数定义重复,有谁帮我解释一下吗?


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多