6 Star 18 Fork 9

JunYii / 大黄人的VBA代码库

Create your Gitee Account
Explore and code with more than 12 million developers,Free private repositories !:)
Sign up
Clone or Download
mFile.md 10.91 KB
Copy Edit Raw Blame History
junyi authored 2022-05-23 14:27 . 更新内容

mFile

类模块 mFile 用于文件和文件夹的查询和操作。

版本号 Version:1.2
最终更新日期 Last Update Date:2022-05-26
作者 Author:JunYi
网址 Link:https://gitee.com/junyii/vba-code-base


更新内容 Updates 1.2 2022-05-23:

  1. 新增方法:CopyFile

更新内容 Updates 1.1 2022-05-06:

  1. 新增删除 ini 键值的方法:DeleteIniKey
  2. 新增读取ini 整个Section数据的方法:ReadIniSection

全面革新:

一年多以来,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(修改思想:该参数可以跟路径写在一起)

更新内容 Updates 0.6 2022-03-26:

  1. 新增方法:检查路径是否存在 CheckPath
  2. 新增方法:创建文件夹 CreateFolder
  3. 新增方法:创建文件 CreateFile

更新内容 Updates 0.5 2022-03-26:

  1. 新增读写 ini 文件的方法:ReadIni & WriteIni

更新内容 Updates 2021-01-21:

  1. 新增通过 Dialog 获取文件夹的方法:GetPath

更新内容 Updates 2021-01-15:

  1. SearchFileName:将没有找到文件的返回值又一句话更改为空字符串。

更新内容 Updates 2021-01-09:

  1. GetSubFolders:添加了 mSeparator 参数,用于自定义分隔符。并修正了递归参数传递不完全的BUG。
  2. GetFileName、SearchFileName:添加了 mSeparator 参数,用于自定义分隔符。

更新内容 Updates 2020-12-26:

  1. 新增1个方法:CheckFileExists

更新内容 Updates 2020-12-23:

  1. 新增获得子文件夹的方法




简介

类模块 mFile 用于文件和文件夹的查询和操作。

下边是一些在测试时,需要在外部定义的公共变量和对象。

Option Explicit

Dim mFile As New mFile
Dim Str As String

下边是一些测试中用到的自定义函数和公共常量。

Public Const EngMode As Boolean = True ' 英文模式
Public Const mName As String = "JunYi Code Base"

' 坏消息
Public Function BadMsg(Message As String)
		MsgBox Message, vbCritical, mName
End Function

' 好消息
Public Function GoodMsg(Message As String)
		MsgBox Message, vbInformation, mName
End Function

1. 文件夹操作


1.1 GetSubFolders

获得某路径下的所有文件夹。由 Property Get 创建,通过递归的方法获得文件夹名称。返回一个字符串 SubFolder1,SubFolder2, ... ,可以通过 Split 函数将结果拆分(分隔符默认是英文状态的逗号)。

Property Get GetSubFolders(mPath As String, Optional SubLevel As Integer = 0, Optional mKeyWord As String = "", Optional mSeparator As String = ",") As String
  • mPath:需要查找文件夹名称的路径。
  • SubLevel:可选参数,搜索文件夹的层级。默认是0,即:只搜索母文件夹。
  • mKeyWord:可选参数,搜索文件夹的关键字。默认为空,即:搜索全部文件夹。
  • mSeparator:可选参数,分隔符,默认是 ,
Sub File_GetSubFolder()
        Dim mFolderName() As String
        Dim i As Integer
        mFolderName = Split(mFile.GetSubFolders("D:\迅雷下载\test", 3, "1"), ",") ' 将文件名拆分到数组
        Sheets("File").Range("E:E").Clear
        For i = LBound(mFolderName) To UBound(mFolderName)
                Str = Str & i & " - " & mFolderName(i) & vbCrLf
                'Sheets("File").Cells(i + 1, 5) = mFolderName(i)
        Next i
        GoodMsg Replace(Str, "D:\迅雷下载\test", "")
        Str = ""
End Sub

执行结果: ![[Pasted image 20201226122010.png]]


1.2 GetFolderDialog

Dialog获取文件夹。由 Property Get 创建,返回一个字符串。

Property Get GetFolderDialog() As String
Sub File_GetFolderDialog()
        GoodMsg mFile.GetFolderDialog
End Sub

执行结果: ![[Pasted image 20210121143652.png]] ![[Pasted image 20210121143701.png]]


1.3 CheckFolderExists

检查文件夹是否存在。由 Property Get 创建,返回一个布尔值。

Property Get CheckFolderExists(mPath As String) As Boolean
  • mPath:检查的文件夹完整路径。
Sub File_CheckFolderExists()
        Str = ThisWorkbook.path & "\测试"
        GoodMsg mFile.CheckFolderExists(Str)
End Sub

1.4 CreateFolder

创建文件夹。

Sub CreateFolder(mFolderPath As String, Optional ShowMsg As Boolean = False)
  • mFolderPath:创建的文件夹完整路径。
  • ShowMsg:可选参数,创建完成后提示。默认 False 不提示。
Sub File_CreateFolder()
        Str = ThisWorkbook.path & "\测试\test\"
        mFile.CreateFolder Str, True
End Sub

2. 文件操作


2.1 GetFileName

获得文件名称。由 Property Get 创建。

  • 如果找到一个匹配文件:返回文件名。
  • 如果找不到文件,返回空字符串 。
  • 如果找到多个文件:返回字符串 FileName1,FileName2, ... ,可以通过 Split 函数将结果拆分(分隔符默认是英文状态的逗号)。
Property Get GetFileName(mPath As String, mKeyWord As String, Optional mFileExtention As String = "*", Optional mSeparator As String = ",") As String
  • mPath:需要查找文件的路径。
  • mFileExtention:可选参数,查找文件的扩展名。默认是 *,即:查找所有类型的文件。
  • mSeparator:可选参数,分隔符,默认是 ,
Sub File_GetFileName()
        Dim mFileName() As String
        Dim i As Integer
        mFileName = Split(mFile.GetFileName("D:\迅雷下载\", "HD", "mkv", "&&"), "&&") ' 将文件名拆分到数组
        For i = LBound(mFileName) To UBound(mFileName)
                Str = Str & i & " - " & mFileName(i) & vbCrLf
        Next i
        GoodMsg Str
        Str = ""
End Sub

执行结果:

![[Pasted image 20201226122227.png]]


2.2 CheckFileExists

检测文件是否存在。由 Property Get 创建,返回一个布尔值。

Property Get CheckFileExists(mPath As String) As Boolean
  • mPath:需要查找文件的路径+文件名。
Sub File_CheckFileExists()
        Dim CheckResult As Boolean
        Str = ThisWorkbook.path & "\测试.xlsx"
        CheckResult = mFile.CheckFileExists(Str)
        If CheckResult Then GoodMsg "文件存在:" & Str
        If Not CheckResult Then BadMsg "文件不存在:" & Str
        Str = ""
End Sub

执行结果:

![[Pasted image 20201226123647.png]]


2.3 ReadIni

读取 ini 文件。由 Property Get 创建,返回一个字符串。

Property Get ReadIni(FileFullName As String, SectionName As String, KeyName As String) As String
  • FileFullName:完整路径。
  • SectionName:分区名称。
  • KeyName:键值名。
Sub File_ReadIni()
        Dim mPath As String
        mPath = ThisWorkbook.path & "\test.ini"
        GoodMsg mFile.ReadIni(mPath, "Test", "test1")
End Sub

2.4 ReadIniSection

读取 ini 文件下整个Section数据。由 Property Get 创建,返回一个字符串。

Property Get ReadIniSection(FileFullName As String, SectionName As String, Optional mSeparator As String = "&&") As String
  • FileFullName:完整路径。
  • SectionName:分区名称。
  • mSeparator:可选参数。分隔符。
Sub File_ReadIniSection()
        Dim mPath As String
        mPath = ThisWorkbook.path & "\测试\test.ini"
        GoodMsg mFile.ReadIniSection(mPath, "Test")
End Sub

2.5 WriteIni

写入 ini文件。

Sub WriteIni(FileFullName As String, SectionName As String, KeyName As String, KeyValue As String)
  • FileFullName:完整路径。
  • SectionName:分区名称。
  • KeyName:键值名。
  • KeyValue:键值。

示例:

Sub Test()
		mFile.WriteIni ThisWorkbook.Path & "\settings.ini", "test2", "testkey", "哈哈~"
		GoodMsg mFile.ReadIni(ThisWorkbook.Path & "\settings.ini", "test2", "testkey")
End Sub

![[Pasted image 20220326164800.png]]


2.6 DeleteIniKey

删除 ini 键值。

Sub DeleteIniKey(FileFullName As String, SectionName As String, KeyName As String)
  • FileFullName:完整路径。
  • SectionName:分区名称。
  • KeyName:键值名。

示例:

Sub File_DeleteIni()
		Dim mPath As String
		mPath = ThisWorkbook.path & "\测试\test.ini"
		mFile.DeleteIniKey mPath, "Test", "test1"
		GoodMsg "删除成功。"
End Sub

2.7 CreateFile

创建文件。

Sub CreateFile(mFileFullPath As String, Optional ShowMsg As Boolean = False)
  • mFileFullPath:创建的文件的完整路径。
  • ShowMsg:可选参数,创建完成后提示。默认 False 不提示。
Sub File_CreateFile()
        Dim mPath As String
        mPath = ThisWorkbook.path & "\测试\test.ini"
        mFile.CreateFile mPath, True
End Sub

2.8 CopyFile

复制文件。返回一个是否复制成功的布尔值。

Function CopyFile(mSourceFilePath As String, mDestinyFilePath As String, Optional mShowMsg As Boolean = True)
  • mSourceFilePath:源文件路径。
  • mDestinyFilePath:目标路径。
  • ShowMsg:可选参数,目标文件已存在时是否提示。默认 True 提示。
Sub File_CopyFile()
        Dim mPath As String, mPathAfter As String
        mPath = ThisWorkbook.path & "\测试\test.ini"
        mPathAfter = ThisWorkbook.path & "\测试\test~~.ini"
        mFile.CopyFile mPath, mPathAfter, False
        GoodMsg "Done"
End Sub
Visual Basic
1
https://gitee.com/junyii/vba-code-base.git
git@gitee.com:junyii/vba-code-base.git
junyii
vba-code-base
大黄人的VBA代码库
master

Search