# 大黄人的VBA代码库
**Repository Path**: iphitos/vba-code-base
## Basic Information
- **Project Name**: 大黄人的VBA代码库
- **Description**: 大黄人的VBA代码库。
- **Primary Language**: Visual Basic
- **License**: GPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 11
- **Created**: 2023-03-12
- **Last Updated**: 2023-03-12
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 大黄人的代码库
## 简介
大家好,我是 Junyi,昵称是大黄人。
这些是我 2016 年工作至今累计总结下来的常用方法和函数,写成的代码库,以便做快速的开发。
自 2020 年 12 月发布一年多以来,得到了零星的支持,我也感到很欣慰。
从 2022 年 4 月开始,我对代码库进行重新整理和改进,发布 V1.0 版本,新版本可以更好得应用到实际工作中去。当然也会造成与旧版本不兼容的问题(旧版本可以在 `old` 文件夹中找到),请大家多包涵。具体更改,可以参考《阅读文档》。
个人的代码风格:
- 极简
- 易读
- 拒绝冗余
## 近期更新内容
**2023-03-02:**
**mQuery更新内容 Updates 1.3 2023-03-02:**
1. 代码中涉及到数据库链接的添加了密码参数,使用的是 mSettings 里设置的密码。
2. TableType 删除了除全部类型意外的表类型(该功能无用,为了提高性能,进行简化)。
3. mSettings 中增加了3个内容:
- 选项 Keep Window After Execute:执行 SQL 语句以后,可以依然保留窗体。这样如果有多句语句需要执行,不需要重新加载,提高性能。
- 选项 Read Table When Open:打开界面的时候,读取数据表。有时候,只为了执行预设的SQL语句,不需要读取数据表时,可以关闭这个选项节约电脑资源。
- Password:可以进行设置。
**mADO更新内容 Updates 1.2 2023-03-02:**
1. 为所有使用到数据库连接的方法新增 Password 密码参数。
**2022-06-21:**
mFile.ReadIni -> 修正了读取超过255个字符会崩溃的问题。
**2022-05-23:**
具体见各阅读文档。
**mQuery更新内容 Updates 1.1 2022-04-16:**
1. 文本英文化:
- 修正了英文模式下大部分提示语句依然还是中文的问题。
- Access预设数据表字段名称更改为英文。
- 这么做是为了改进非中文电脑的兼容性。
**mQuery更新内容 Updates 1.0 2022-04-12:**
1. 更新界面
- 增加 TableType 选择页面。现在可以选择多种表格类型了。
- 各控件边框更改为平面版。
2. 新增函数 InputTableName
3. 新增列表点击事件 TableTypeList_Click
4. 对应更新 init 方法。
- 删除可选参数 mTableType
- 增加对 TableTypeList 的相关代码。
**mADO更新内容 Updates 1.1 2022-04-12:**
1. 修改属性方法:GetAccessTable
- 增加可选参数:mReturnName,用于切换返回表名或表类型
- 增加可选参数:mIgnoreSystemTable,用于剔除系统表
### 类模块 mADO 全面革新:
一年多以来,`mADO` 很好得应用到了 Excel 和 Acess 之间的交互查询。与 `mSheet` 一样,它也有很多方法从来不用,而又有很多方法非常常用。同时,由于以前的开发并没有接触到实际应用,很多方法还需要改进。以下:
更新内容 Updates 1.0 2022-04-04
- (1)数据库的连接和创建
- 方法 1.1 CreateAccessFile:不变。(不用)
- 属性方法 1.2 TestConnection:不变。(非常常用)
- (2)Access工作表
- 方法 2.1 CreatAccessTable:不变。(不用)
- 方法 2.2 DeleteAccessTable:不变。(不用)
- 属性方法 2.3 GetAccessTable:不变。(非常常用)
- 属性方法 2.4 CheckTableExists:
- 将名字由 CheckTableExist 变成 CheckTableExists。(修改思路:强迫症,为了统一)(不用)
- 方法 原2.5 AddTableField:删除。(修改思路:这些需要小心翼翼的操作在Acess里更合适)
- 方法 原2.6 DeleteTableField:删除。(修改思路:同上)
- 方法 2.5 CreateAccessTableFromExcelSheet:不变。(常用)
- (3)添加、删除、修改数据记录
- 方法 3.1 AddRecord:不变。(不用)
- 方法 3.2 AddRecords:不变。(不用)
- 方法 3.3 DeleteRecord:
- 增加类模块变量 `DeleteRecordSucceed` ,在删除成功后会变 `True`
- 在删除前给予确认删除的提示。(修改思路:删除数据是一个非常危险的操作,一定要确认好)(不用)
- 方法 3.4 DeleteRecords:
- 不再使用公共函数 `RangeToString`(修改思路:用更简单的方法)
- 增加 `ShowMsg` 可选参数。(修改思路:与其他方法统一)
- 增加类模块变量 `DeleteRecordSucceeds` ,在删除成功后会变 `True`
- 在删除前给予确认删除的提示。(修改思路:同上)(不用)
- 方法 3.5 DeleteRecordCondition:不变。
- 这是一个2022年3月份新增的方法(常用)
- 方法 3.6 UpdateRecord:
- 增加 `ShowMsg` 可选参数。(修改思路:与其他方法统一)
- 增加类模块变量 `UpdateRecordSucceed` ,在修改成功后会变 `True`
- 在修改前给予确认删除的提示。(修改思路:修改数据是一个非常危险的操作,一定要确认好)
- 返回的提示会显示修改了多少条数据了。(修改思路:与删除数据统一)(不用)
- 方法 3.7 UpdateRecords:不变。
- 增加 `ShowMsg` 可选参数。(修改思路:与其他方法统一)
- 增加类模块变量 `UpdateRecordsSucceed` ,在修改成功后会变 `True`
- 在修改前给予确认删除的提示。(修改思路:修改数据是一个非常危险的操作,一定要确认好)
- 返回的提示会显示修改了多少条数据了。(修改思路:与删除数据统一)(不用)
- 方法 原3.7 UpdateAddRecords:删除。(修改思路:实际应用中根本不会用到这样的方法,太不标准了。)
- (4)读取数据
- 方法 4.1 ReadData
- 增加 `ContainField` 可选参数。(修改思路:增加这个参数让 ReadData 和 ReadDataWithoutField 这两个方法合并)(非常常用)
- 方法 原4.2 ReadDataWithoutField:删除。
- 方法 4.2 ReadDistinctFields:
- 将参数 `WithField` 改为 `ContainField`(修改思路:强迫症,为了统一)(常用)
- 属性方法 4.3 ReadField:不变。(不用)
### 类模块 mSheet 全面革新:
一年多以来,`mSheet` 的使用频率出现两个极端,要么不用,要么非常常用,但是,对那些不用的大部分方法,我依然选择保留。然后,因为当时开发时,对于对象的理解还比较稚嫩,写了一些很啰嗦的方法和参数,对那些没意义的方法和参数进行简化和删除。以下:
更新内容 Updates 1.0 2021-04-04
- (1)工作表的创建、修改和删除
- 1.1 方法 CheckSheetExists:不变。(不用)
- 1.2 方法 CreateSheet:不变。(不用)
- 1.3 方法 DeleteSheet:
- 修正了当工作簿还剩1个工作表时,代码依然会执行,然后奔溃的BUG(修改思路:修正后,会弹一个错误提示)(不用)
- 1.4 方法 RenameSheet:不变。(不用)
- 1.4 方法 CopySheet:不变。(不用)
- (2)工作表的创建、修改和删除
- 原2.1 CopyRange:删除。(修改思路:非常啰嗦的一个方法,大大增加了代码量,降低效率。)
- 2.1 CopyRange:
- 原 CopyRange2 改名为 CopyRange 并代替 1.1(常用)
- 原2.2 ClearRange:删除。(修改思路:一句代码就可以搞定的事情没必要那么费劲,实际场景根本不会调用它)
- 2.2 方法 UnionSheets:不变。(不用)
- 2.3 方法 Filter:不变。(不常用)
- 2.4 属性方法 FindColumnData:不变。(非常常用)
- 2.5 方法 SetColumnData:不变。(非常常用)
- 2.6 属性方法 FindRowData:不变。(非常常用)
- 2.7 方法 SetRowData:不变。(非常常用)
- 2.8 属性方法 GetLastRow:
- 新增可选参数 mMethod(修改思路:这个方法虽然常用,但是有弊端,就是在选择的某列最下面的单元格出现空值的时候,无法得到正确的行数,于是让其拥有多种方法获得行数)(常用)
- 2.9 属性方法 GetLastColumn:
- 新增可选参数 mMethod(修改思路:同上)(常用)
- 2.10 方法 GetDistinct:不变。(不常用)
- (3)其他工作表相关方法
- 3.1 方法 SetScrollArea:删除。(修改思路:花里胡哨,没有意义)
- 3.1 方法 ProtectSheet:
- 增加了 `On Error` 语句让发生错误时给予提示。(修改思路:这个方法我从来没实际场景用过,但还是保留,并修正漏洞)(不用)
- 3.2 方法 UnProtectSheet:
- 增加了 `On Error` 语句让发生错误时给予提示。(修改思路:同上)(不用)
### 类模块 mFile 全面革新:
一年多以来,`mFile` 很好得解决了文件与文件夹相关的问题。然而,随着需求的变多,这些方法并不能满足所有,需要改进。以下:
更新内容 Updates 1.0 2021-04-03
- 重新的归类:(1)文件夹操作(2)文件操作
- (1)文件夹操作
- (1)1.1 属性方法 GetSubFolders:不变。(这是一个非常完美的属性方法)
- (5)1.2 属性方法 GetPath:
- 改名为:GetFolderDialog(修改思想:GetPath 会被认以为类似 GetSubFolders 的功能,造成误导)
- 删除可选参数 mDefaultPath,将地址改为工作簿地址。(修改思想:不会有人会一成不变把所有文件放一个文件夹的,还是按照工作表一直改变的)
- 1.3 属性方法 CheckPath:
- 这是一个 2022 年 3 月才新增的方法,用于读检查文件夹是否存在。
- 更名为 CheckFolderExists
- 1.4 方法 CreateFolder:
- 这是一个 2022 年 3 月才新增的方法,用于读检查文件夹是否存在。
- 删除了参数 mFolderName(修改思想:该参数可以跟路径写在一起)
- (2)文件操作
- (2)2.1 属性方法 GetFileName:与(3)属性方法 SearchFileName 合并为 GetFileName(修改思想:可以说 GetFileName 是 SearchFileName 的一个子集,两个函数存在冗余的关系。)
- (3)属性方法 SearchFileName:同(2)
- (4)2.2 属性方法 CheckFileExists:简化代码。
- (5)2.3 属性方法 ReadIni:
- 这是一个 2022 年 3 月才新增的方法,用于读取 ini 文件。
- 返回一个字符串。如果读取不到,则返回空值。
- (6)2.4 方法 WriteIni:
- 与(5)是一对,用于写入 ini 文件。
- 2.5 方法 CreateFile
- 这是一个 2022 年 3 月才新增的方法,用于读检查文件夹是否存在。
- 删除了参数 mFileName(修改思想:该参数可以跟路径写在一起)
### 类模块 mBook 全面革新:
一年多以来,`mBook` 的使用场景并不多,里面的几个方法看似有用但实际没有什么应用场景,于是决定对其进行革新。以下:
更新内容 Updates 1.0 2021-04-01
- (1)工作簿的创建、保存和打开
- 方法 1.1 CreateWorkbook:
- 改为函数(属性),返回:工作簿对象(修改思想:光创建一个空表并没有什么实际应用场景)
- 可选参数 ShowMsg 的默认值由 `True` 改为 `False`(修改思想:用到这个函数必然后面的操作都是连续的,弹出提示会打断连续,降低用户体验)
- 新增可选参数 CloseAfterCreation:默认 `False`(修改思想:在获得工作簿对象后,依然可以继续对其进行进一步操作。)
- 新增可选参数 mShowScreen:默认 `False`
- 方法 1.2 SaveAsWorkbook:不变
- 函数 1.3 OpenWorkbook:不变
- 函数 1.4 OpenWorkbookDialog
- 删除 mShowScreen 参数。(修改思想:既然是通过对话框打开,无关紧要会不会刷新屏幕)
- 新增功能:默认打开工作簿所在路径。
- 新增可以打开的文件类型:CSV
- 方法 1.5 CloseWorkbook:删除(修改思想:画蛇添足)
- (2)工作簿数据操作
- 函数 2.1 GetSheetName:不变
- 函数 2.2 CopyFromWorkbook:
- 新增功能:默认打开工作簿所在路径。
- 新增可以打开的文件类型:CSV
点击查看各模块窗体的具体阅读文档:
- 类模块
- [mADO](./阅读文档/mADO.md)
- [mBook](./阅读文档/mBook.md)
- [mFile](./阅读文档/mFile.md)
- [mSheet](./阅读文档/mSheet.md)
- 窗体
- [mProcess](./阅读文档/mProcess.md)
- [mQuery](./阅读文档/mQuery.md)
- [mSelect](./阅读文档/mSelect.md)
- [mShowHideSheet](./阅读文档/mShowHideSheet.md)
## 类模块
### [mADO](./阅读文档/mADO.md)
类模块 `mADO` 用于 Excel 和 Access 之间的连接、增加、删除、修改、查询。
### [mBook](./阅读文档/mBook.md)
类模块 `mBook` 用于工作簿的操作。
### [mFile](./阅读文档/mFile.md)
类模块 `mFile` 用于文件的查询。
### [mSheet](./阅读文档/mSheet.md)
类模块 `mSheet` 用于工作表的操作。
## 窗体
### [mProcess](./阅读文档/mProcess.md)
窗体 `mProcess` 用于显示进度条。
### [mQuery](./阅读文档/mQuery.md)
窗体 `mQuery` 用于 SQL 查询。
### [mSelect](./阅读文档/mSelect.md)
窗体 `mSelect` 用于做选择。
### [mShowHideSheet](./阅读文档/mShowHideSheet.md)
窗体 `mShowHideSheet` 用于显示/隐藏工作表。
## 为我买一杯咖啡
你们的鼓励与支持是我创作的最大动力。
