VBA学习笔记之工作簿

Workbook工作簿的常用功能:

1. 新建工作簿


  1. Dim wb As Workbook
  2. Application.SheetsInNewWorkbook = 1     ‘设置初始工作簿中的工作表数
  3. Set wb = Application.WorkBooks.Add
  4. wb.Worksheets(1).name = "表1"                ‘给第一个工作表设置名称
  5. Application.SheetsInNewWorkbook = 3


2.用Excel对话框打开Excel文件


  1. Dim fileInfo As String
  2. fileInfo = Application.GetOpenFilename("Excel 工作簿(*.xlsx), *.xlsx")
  3. MsgBox fileInfo


如果用户选择了一个Excel文件,则fileInfo为该文件的全路径。若未选择,则fileInfo为False

3. 备份(另存为)Excel文件

 

  1. Dim wb As Workbook
  2. Set wb = Application.WorkBooks(1)     ‘原文件名为vba.xlsx
  3. wb.Activate
  4. wb.SaveCopyAs wb.path & "\" & "Bak_" & wb.name    ‘备份文件名为Bak_vba.xlsx


4. 用Excel对话框保存Excel文件


  1. Dim fileInfo As String
  2. fileInfo = Application.GetSaveAsFilename("excelFile", "Excel 工作簿(*.xlsm),*.xlsm")
  3. If Not fileInfo = "False" Then
  4. ActiveWorkbook.SaveAs Filename:=fileInfo
  5. End If
  6. MsgBox "文件未保存"
  7. Else


5. 设置工作簿的大小(并非Excel窗口的大小)虽然使用的是Application的属性ActiveWindow,但该属性对应的却是一个Workbook窗口


  1. Dim win As Window
  2. Dim winState As Long
  3. Dim winWidth As Double
  4. Dim winHeight As Double
  5. Set win = Application.ActiveWindow
  6. win.Activate
  7. With win
  8. .WindowState = xlMinimized           ‘最小化工作簿,但是Excel程序窗口没有最小化
  9. End With
  10. With win
  11. winState = .WindowState
  12. winWidth = .Width
  13. winHeight = .Height
  14. End With
  15. Debug.Print "WinState: " & winState
  16. Debug.Print "WinWidth: " & winWidth
  17. Debug.Print "WinHeight: " & winHeight


6. 冻结窗格。和上述一样依然使用Application.ActiveWindow来操作工作簿


  1. Dim win As Window
  2. Set win = Application.ActiveWindow
  3. With win
  4. .Split = True
  5. .SplitColumn = 1         ‘若设置为0,表示不冻结列
  6. .SplitRow = 3
  7. .FreezePanes = True     ‘如果不设置FreezePanes将会在工作表中出现粗分割线
  8. End With

7. 修改工作簿文件名


  1. Dim fileName As String
  2. fileName = "C:\book.xlsx"           ‘文件不存在会报错
  3. Name fileName As "C:\book1.xlsx"    ‘工作簿应处于关闭状态,而且路径应当一致
  4. Debug.Print "Renamed OK!"

Workbook主要事件:

Workbook事件比起之前的Application事件写起来方便些。我们直接使用ThisWorkbook对象的事件(也是一个Workbook对象)

如下图,双击ThisWorkbook,在右侧的代码区上方直接选择需要实现的事件,然后在自动生成的事件函数中编写代码

1.BeforeClose事件


  1. Private Sub Workbook_BeforeClose(Cancel As Boolean)
  2. MsgBox "关不掉了"
  3. Cancel = True
  4. End Sub

该事件在关闭工作簿前触发

2.BeforeSave事件

  1. Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  2. If Not SaveAsUI Then
  3. MsgBox "保存不了了"
  4. Cancel = True
  5. End If
  6. End Sub


在单击保存按钮或者Ctrl+S时触发

3.WindowActive事件

  1. Private Sub Workbook_WindowActivate(ByVal Wn As Window)
  2. MsgBox "激活工作簿"
  3. Wn.width = 100
  4. End Sub
时间: 2024-10-15 01:13:17

VBA学习笔记之工作簿的相关文章

VBA学习笔记之工作表

Sub 遍历sheets下的所有对象() For Each shs In Sheets k = k + 1 Cells(k, 1) = shs.Name Next End Sub Sub 遍历worksheets下的所能对象() For Each shs In Worksheets k = k + 1 Cells(k, 2) = shs.Name Next End Sub 两段代码的区别在于一个是sheets下的所有对象,一个是worksheets下的所有工作表对象 判断工作表存在与否: Sub

VBA学习笔记之VBA学习思路

进阶的知识点 1. SQL查询语句和ADO2. 正则表达式和网抓3. 窗体与控件4. API 类模块 等等 作者:SOROSay链接:https://www.zhihu.com/question/26078625/answer/132542043来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 1小时 熟悉数据类型.变量.常量和运算符 1.了解VBA有哪些数据类型 2.知道如何定义变量,了解public/dim/private定义变量时的区别 3.知道如何定义常量

[VBA]汇总多个工作簿的指定工作表到同一个工作簿的指定工作表中

sub 汇总多个工作簿() Application.ScreenUpdating = False Dim wb As Workbook, f As String, l As String, n As String, m As String, j As Integer f = ThisWorkbook.Path & "\" l = f & "*.xls" m = Dir(l) Do While m <> "" If m

VBA学习笔记之单元格

'单元格对象在VBA中一个非常基础,同时也很重要的. '它的表达方式也是非常的多样化. '---------------------------------------------------- 'Range 对象 '代表某一单元格.某一行.某一列.某一选定区域(该区域可包含一个或若干连续单元格区域),或者某一三维区域. 'Range ("文本型装单元格地址") 'range的常见写法 Sub rng() Range("a1").Select '单元格 Range(

VBA学习笔记之随机数&amp;数组redim

发现更简单的: a=Application.RandBetween(-10, 10) 直接生成-10到10之间的随机整数 关于二维数组Redim Preserve: 如果使用了 Preserve 关键字,就只能重定义数组最末维的大小,且根本不能改变维数的数目. 具体参考 1 如果使用了 Preserve 关键字,就只能重定义数组最末维的大小,且根本不能改变维数的数目.例如,如果数组就是一维的,则可以重定义该维的大小,因为它是最末维,也是仅有的一维.不过,如果数组是二维或更多维时,则只有改变其最末

VBA学习笔记之循环

VBA 中Do while Loop用法如下:VBA中如果不知道重复多少次,使用 Do...Loop 语句.Do...Loop 语句重复执行某段代码直到条件是 true 或条件变成 true.重复执行代码直到条件是 true使用 While 关键字来检查 Do... Loop 语句的条件. 1 2 3 Do While i>10   'some code Loop 如果 i 等于 9,上述循环内的代码将终止执行. 1 2 3 Do   'some code Loop While i>10 这个

VBA学习笔记之粘贴方法

Option Explicit 'Worksheet.Paste 方法 '将"剪贴板"中的内容粘贴到工作表上. '表达式.Paste(Destination, Link) '表达式 一个代表 Worksheet 对象的变量. Sub 粘贴() Range("B1:B6").Copy Range("c9") '这一句等于下面两句,但下面两句也有用处 Range("B1:B6").Copy '复制区域无公式 Sheet1.Past

VBA学习笔记(8)--遍历所有文件夹和文件

说明(2017.3.26): 1. 采用的是兰色幻想教学视频中的"父子转换法" 2. 这种VBA的遍历文件夹方法非常难理解,主要是因为dir这个函数,第一次带参数调用,返回的是此目录下的第一个文件,第二次无参数调用,返回的是此目录下一个第二个文件,这就很操蛋了,还要配合do循环. 3. VBA的各种do..until..loop, do..while..loop, if..then..end if, for 1 to 10..next尼玛这么多关键字要死啊!不骂不痛快!本来思考的就很累

VBA学习笔记(7)-经典例子

例:VBA获取shape position Public Sub LocationTable() 'This routine will create a text file of the location and size of all 2-d shapes ' on the current page Dim shpObj As Visio.Shape, celObj As Visio.Cell Dim ShpNo As Integer, Tabchr As String, localCent