VBA编写代码导出和导入类、模块、窗体

news2024/9/22 23:38:56

功能描述

为了方便备份代码,运行一个函数,导出类、模块、窗体。当在其他vba工程使用时,可以运行另外一个函数,快速导入代码。

1、开发人员宏设置:信任对VBA工程对象模型的访问

在这里插入图片描述

2、引用 Microsoft Visual Basic for Applications Extensibility

在这里插入图片描述

3、代码

Option Explicit

' 导出模块、类模块和用户窗体
Sub ExportModulesClassesAndForms()

    Dim vbComp As VBComponent
    Dim FilePath As String
    Dim BackupFolder As String

    ' 设置备份文件夹名称
    BackupFolder = ThisWorkbook.Path & "\backcode\"

    ' 检查备份文件夹是否存在,如果不存在则创建
    If Len(Dir(BackupFolder, vbDirectory)) = 0 Then
        MkDir BackupFolder
    End If

    ' 设置文件保存路径
    FilePath = BackupFolder

    ' 遍历所有 VB 组件
    For Each vbComp In ThisWorkbook.VBProject.VBComponents
        Select Case vbComp.Type
            Case vbext_ct_StdModule
                vbComp.Export FilePath & vbComp.Name & ".bas"
            Case vbext_ct_ClassModule
                vbComp.Export FilePath & vbComp.Name & ".cls"
            Case vbext_ct_MSForm
                vbComp.Export FilePath & vbComp.Name & ".frm"
        End Select
    Next vbComp

End Sub

' 导入 VBA 组件(模块、类模块和用户窗体)
Sub ImportVBAComponents()

    Dim fileDialog As FileDialog
    Dim selectedItem As Variant
    Dim vbComp As VBComponent
    Dim importPath As String

    ' 创建文件对话框
    Set fileDialog = Application.FileDialog(msoFileDialogFilePicker)

    ' 只允许选择 bas、cls 和 frm 文件
    fileDialog.Filters.Clear
    fileDialog.Filters.Add "VBA Modules", "*.bas"
    fileDialog.Filters.Add "VBA Class Modules", "*.cls"
    fileDialog.Filters.Add "VBA UserForms", "*.frm"
    fileDialog.AllowMultiSelect = True

    ' 显示文件对话框
    If fileDialog.Show = -1 Then

        ' 获取选择的文件路径
        For Each selectedItem In fileDialog.SelectedItems

            importPath = selectedItem

            ' 根据文件后缀判断是模块、类模块还是用户窗体
            Select Case Right(importPath, 4)
                Case ".bas"
                    Set vbComp = ThisWorkbook.VBProject.VBComponents.Import(importPath)
                Case ".cls"
                    Set vbComp = ThisWorkbook.VBProject.VBComponents.Import(importPath)
                Case ".frm"
                    Set vbComp = ThisWorkbook.VBProject.VBComponents.Import(importPath)
            End Select

        Next selectedItem

        MsgBox "VBA 组件导入完成!", vbInformation

    Else
        MsgBox "没有选择文件!", vbExclamation
    End If

    ' 释放文件对话框对象
    Set fileDialog = Nothing

End Sub

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2144298.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【非常实用—Navicat重置 MySQL 的密码】

Navicat重置 MySQL 的密码 连接本地数据库,忘记原始密码停止 MySQL 服务以安全模式启动 MySQL打开新的命令行窗口重置密码停止 MySQL 并重启 连接本地数据库,忘记原始密码 停止 MySQL 服务 在命令行中使用以下命令停止服务(Windows 下&#…

2024秋季学期期中考

密码 mmmd5 直接在网上找一个md5解密的网站现场来解就可以了。每一段都拼接起来就可以了。 但是的话,也可以直接用脚本,但是要用到MD5的字典。 它给了一个附件,可以借助此来解答。 那么我们主要来学习一下hash函数, 哈希函数&…

15.10 在k8s部署grafana-deployment并导入k8s大盘

本节重点介绍 : grafana deployment部署k8s大盘导入 准备yaml 部署工作 1. 修改yaml中的节点选择器标签 k8s-node01改为你自己的节点 2. 在节点上创建数据目录 mkdir -pv /data/grafana3. 部署grafana # 部署 kubectl apply -f deployment.yaml # 检查 [rootprome-mast…

CMU 10423 Generative AI:lec7、8、9(专题1:AE、VAE详解)

文章目录 1 AE(自编码器)1.1 自编码器干什么用的1.2 自编码器的架构图、输入输出、训练方法1.3 常见应用1.4 代码示例:图片的压缩存储和复原 2 VAE(变分自编码器)2.1 概述2.2 AE存在的问题:隐空间不平滑&am…

ad 明明已经给原理图库添加封装了,为什么还是看不到

不得不说,ad可能真的是比较庞大也不比较冗余,使用的过程中就会出现各种各样的问题,明明所有的操作都没问题,可是就是没能得到自己想要的,额 真的一言难尽 软件本身也很庞大了 各种东西可能一下子反应不过来&#xf…

谁的大一不迷茫?网络安全到底该怎么入门?

大一的新生,都在向我询问类似的问题: 网络安全要学的东西好杂,找不到方向了,迷茫了 同学们都在研究xxx,我要去学吗? 精力有限,我到底该学什么编程语言,好怕选错啊 最近下班比较早…

指针 (六)

OK,书接上回,咱们继续: 一 . 函数指针变量 (1)函数指针变量的创建 首先我们得明白,什么是函数指针变量呢?从我们之前学习过的整型指针,数组指针的相关知识当中,通过类…

【软件测试】什么叫测试?

生活中的测试 测试在生活中是处处可见的 例如:在商场购买衣服 外观测试:挑选符合个人审美的衣服试穿测试:选择尺码,试穿材质测试:考虑材质相关问题价格测试:价格是否符合预期 例如:在购物软件购…

【逐行注释】自适应观测协方差R的AUKF(自适应无迹卡尔曼滤波,MATLAB语言编写),附下载链接

文章目录 自适应R的UKF逐行注释的说明运行结果部分代码各模块解释 自适应R的UKF 自适应无迹卡尔曼滤波(Adaptive Unscented Kalman Filter,AUKF)是一种用于状态估计的滤波算法。它是基于无迹卡尔曼滤波(Unscented Kalman Filter&…

简单题58-最后一个单词的长度(Java and Python)20240918

问题的描述: python代码: class Solution(object):def lengthOfLastWord(self, s):""":type s: str:rtype: int"""# 去掉字符串前后的空格s s.strip()# 分割字符串,获取单词列表words s.split(" "…

9.1 溪降技术:游泳

目录 9.1 游泳概述观看视频课程电子书:游泳防御性游泳姿势**身体姿势** 积极游泳姿势**身体姿势** 总结 9.1 游泳 概述 深潭游泳 对于峡谷探险者来说,游泳是一项核心技能。我们的游泳水平和自信心将在很大程度上决定我们的路线选择。在这一阶段&#xff…

开放式耳机哪个好用?开放式耳机好还是入耳式耳机好?

开放式耳机这种新型的耳机类型最近几年,真的受到了越来越多人的欢迎了,所以很多人来问我如何才能选到一款合适自己的开放式耳机,毕竟一款合适自己的耳机才能够用的长久,作为一名合格的耳机测评师,在这里当然要为大家答…

Ollama:本地运行大模型【含UI界面】

文章目录 Ollama 简介安装 ollamaWindows 安装Docker 安装其它平台安装支持的模型模型清单模型参数与运行内存快速启动 llama 模型llama 模型介绍运行 llama3.1 模型通过 HTTP API 访问ollama 命令语法常用示例特别示例自定义模型创建 Modelfile创建模型并运行集成 Web 页面Ope…

Linux系统中的内建命令

当使用export命令设置环境变量时,既然export也是一个命令,那么一定也需要创建子进程,完成设置环境变量的任务。但是父子进程的数据是各自独立的(子进程会继承父进程的数据,但是),理论上来说父子…

客户说了算!精益产品开发,让中小企业精准触达用户需求!——张驰咨询

随着全球经济环境的波动,特别是疫情后经济复苏进程的反复,很多中小制造企业面临产品滞销、同质化严重和内卷竞争加剧的困境。市场饱和、利润微薄,还在新产品开发上遇到了研发人才不足、资金短缺等问题。许多企业在这场市场博弈中徘徊在生死边…

socket地址API(Linux网络编程基础API)

socket 目标进程的标识(套接字)由两部分组成: IP地址:标识出计算机所在的网络位置。端口号:标识出计算机上特定的进程。 字节序 字节序定义了多字节数据在内存中的存储顺序,是处理器架构的特性。字节序…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于模型-数据混合驱动的区域能源互联网韧性在线评估》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

不管你是网工小白还是大佬,一定要焊死在电脑上的6款工具!

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部 你们好,我的网工朋友。 咱网工日常工作可谓状况多多,从配置复杂的网络设备到排除棘手的连接故障,再到维护网络…

GaussDB关键技术原理:高弹性(五)

书接上文GaussDB关键技术原理:高弹性(四)从扩容流程框架方面对hashbucket扩容技术进行了解读,本篇将从日志多流和事务相关方面继续介绍GaussDB高弹性技术。 目录 4.2 日志多流 4.2.1 日志多流总体流程 4.2.2 基线数据传输 4.…

统信服务器操作系统【d版系统上Ansible工具】配置方法

在统信服务器操作系统d版本上进行安装Ansible工具的方法以及配置方法。 文章目录 准备环境功能描述安装与配置一、 安装ansible工具1. 直接 命令安装2. 验证安装结果3. 配置ssh免密登录二、Ansible使用1. 主机清单配置2. ansible命令3. ansible模块三、 playbook配置文件1. 执行…