6 Star 18 Fork 9

JunYii / 大黄人的VBA代码库

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
mBook.md 8.33 KB
一键复制 编辑 原始数据 按行查看 历史
junyi 提交于 2022-04-05 14:24 . 发布mSheet 1.0 mADO 1.0

mBook

类模块 mBook 用于工作簿的操作。

版本号 Version:1.0
最终更新日期 Last Update Date:2021-04-01
作者 Author:JunYi
网址 Link:https://gitee.com/junyii/vba-code-base


全面革新:

一年多以来,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

更新内容 Updates 0.7 2021-03-27:

  1. 更新了 OpenWorkbookDialog 方法:可以打开 csv 文件了。

更新内容 Updates 0.6 2021-06-07:

  1. 更新了 SaveAsWorkbook 方法:
  • 修正了有些情况下无法保存的问题。
  • 考虑到有些表格复制事件较长,添加 mProcess 窗体至该方法。

更新内容 Updates 0.5 2021-5-29:

  1. 修改了 SaveAsWorkbook 方法:
    • 现在可以一次另存任意多个工作表。
    • 新工作簿另存后即关闭,另存后并不会切换到新的工作簿。
    • xlsm格式文件可以保存为xlsx格式了。
    • 若需要另存的文件已存在,可以将其覆盖了。

更新内容 Updates 0.4 2021-3-3:

  1. 修改了CopyFromWorkbook、OpenWorkbook、OpenWorkbookDialog方法中禁止更新链接的方式:从外部设置 Application.AskToUpdateLinks = False 再还原换成了 Workbooks.Open(mPath, 0),这样可以解决打开有链接的文件会很卡的问题。

更新内容 Updates 2020-12-29:

  1. 新增了3个方法:
    • OpenWorkbookDialog - 通过GetOpenFileName打开Workbook工作簿
    • GetSheetName - 获得工作表名称
    • CopyFromWorkbook - 自由获取数据表数据

更新内容 Updates 2020-12-26:

  1. 新增了两个方法:OpenWorkbook和CloseWorkbook。

更新内容 Updates 2020-12-23:

  1. 新增了两个工作簿方法。




简介

类模块 mBook 用于工作簿的操作。

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

Option Explicit

Dim mBook As New mBook
Dim FilePath As String
Dim WB As Workbook
Dim Sht As Worksheet
Dim Rng As Range

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

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 CreateWorkbook

新建Workbook工作簿。由 Property Get 创建,返回一个工作簿对象。

Property Get CreateWorkbook(mPath As String, Optional ShowMsg As Boolean = False, Optional CloseAfterCreate As Boolean = False, Optional mShowScreen As Boolean = False) As Workbook
  • mPath:需要新建工作簿的路径。
  • ShowMsg:可选参数,是否显示消息,默认 False
  • CloseAfterCreation:可选参数,创建完成后是否关闭工作表,默认 False
  • mShowScreen:可选参数,是否显示刷新屏幕,默认 False
Sub Book_CreateWorkbook()
        FilePath = ThisWorkbook.path & "\测试" & "\测试.xlsx"
        Set WB = mBook.CreateWorkbook(FilePath, True, , True)
End Sub

创建成功: ![[Pasted image 20201226124326.png]]

创建失败(文件已存在): ![[Pasted image 20201226124246.png]]


1.2 SaveAsWorkbook

另存为Workbook工作簿,可用于备份重要的表格。

Sub SaveAsWorkbook(mPath As String, mWorkbook As Workbook, Optional mSheetIndex As String = "", Optional mSeparator As String = ",", Optional ShowMsg As Boolean = True)
  • mPath:需要另存工作簿的路径。
  • mWorkBook:需要被另存的工作簿对象。
  • mSheetIndex:可选参数,需要被另存的工作簿中哪一个工作表。默认为空,即保存工作簿内全部的工作表。只能填字符串表示工作表名称,多个工作表名称之间用 mSeparator 分开,mSeparator默认是英文状态下的逗号","。
  • mSeparator:可选参数,多个工作表名称之间的分隔符,默认是英文状态下的逗号","。
Sub Book_SaveAsWorkbook()
        FilePath = ThisWorkbook.path & "\测试" & "\另存为测试.xlsx"
        Set WB = ThisWorkbook
        mBook.SaveAsWorkbook FilePath, WB
End Sub

另存成功: ![[Pasted image 20201226130039.png]]


1.3 OpenWorkbook

打开Workbook工作簿。由 Property Get 创建,返回一个Workbook工作簿对象。

Property Get OpenWorkbook(mPath As String, Optional mShowScreen As Boolean = True) As Workbook
  • mPath:需要打开的工作簿的路径+文件名。
  • mShowScreen:可选参数,表示是否显示出来。默认显示。
Sub Book_OpenWorkbook()
        FilePath = ThisWorkbook.path & "\测试" & "\测试.xlsx"
        Set WB = mBook.OpenWorkbook(FilePath)  ' 因为OpenWorkbook有返回值,必须这么写
End Sub
  • 因为OpenWorkbook有返回值,必须写成 set 工作簿对象变量 = mBook.OpenWorkbook(路径) 的形式。

1.4 OpenWorkbookDialog

通过对话框打开Workbook工作簿。由 Property Get 创建,返回一个Workbook工作簿对象。

Property Get OpenWorkbookDialog() As Workbook
  • mShowScreen:可选参数,表示是否显示出来。默认显示。
Sub Book_OpenWorkbookDialog()
        Set WB = mBook.OpenWorkbookDialog
End Sub

![[Pasted image 20201229132245.png]]

  • 因为OpenWorkbook有返回值,必须写成 set 工作簿对象变量 = mBook.OpenWorkbook(路径) 的形式。
  • 只能打开Excel文件。

2. 工作簿数据操作


2.1 GetSheetName

获得所有数据表名。由 Property Get 创建,返回字符串: SheetName1,SheetName2, ... ,可以用 Split 函数拆分。

Property Get GetSheetName(mWorkbook As Workbook) As String
  • mWorkbook:需要获取表名的工作簿对象。
Sub Book_GetSheetName()
        GoodMsg mBook.GetSheetName(ThisWorkbook)
End Sub

执行结果:

![[Pasted image 20201229191844.png]]


2.2 CopyFromWorkbook

自由获取数据表数据。从其他工作簿中复制数据到当前工作簿。

Property Get 创建,返回字符串: SheetName1,SheetName2, ... ,可以用 Split 函数拆分。

Sub CopyFromWorkbook(Optional mPath As String = "", Optional mSheetIndex = "", Optional mPasteRange As Range = Nothing, Optional mShowScreen As Boolean = True, Optional mCopyValue As Boolean = True)
  • mPath:可选参数,要获取数据的工作簿路径+文件名。
  • mSheetIndex:可选参数,要获取数据的工作簿的工作表索引。
  • mPasteRange:可选参数,黏贴到当前工作簿的单元格区域。
  • mShowScreen:可选参数,是否显示屏幕刷新。默认 True
  • mCopyValue:可选参数,是否贴值。默认 True
Sub Book_CopyFromWorkbook()
        mBook.CopyFromWorkbook
End Sub

执行结果:

![[Pasted image 20201229192215.png]] ![[Pasted image 20201229192233.png]] ![[Pasted image 20201229192316.png]] ![[Pasted image 20201229192459.png]]

注意:

  • 以上是什么参数都不填的状态。
  • 需要配合窗体 mSelect
  • 需要公共函数 NumberToLetter
  • 需要当前类模块的方法 GetSheetName
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

搜索帮助