讲再多都不如直接使用来的快,今天使用1个具体的例子来使用Workbook 、Worksheet、Range对象。
1、需求:
有1个工作簿,包含3个工作表,每个工作表的A列有内容,现要求根据工作表的名称来创建文件夹,再根据每个工作表的A列内容创建Workbook,并保存在对应的文件夹内。
2、代码实现
我们先来分析一下程序的大概流程:
- 使用循环读取每个Worksheet的名称,创建文件夹
- 读取每个Worksheet的A列的内容,需要准确定位范围,再读取Range的Value
- 然后根据Range的Value创建Workbook,并保存
再理一下需要用到的功能:
- 定位Range范围,这个经常使用Excel应该会这么一个操作:选中1个单元格后,按住Alt加方向键,会快速定位,这个不好描述,自己可以试着操作一下,可以通过录制宏记录下来。我们需要定位A列最后1个非空白的单元格,使用Cells(Cells.Rows.Count, 1).End(xlUp).Row。Cells这种和Range都是单元格对象的表示方法,Cells是以行、列来定位的。
- Range是一个范围,所以会用到循环For语句
- 创建Workbook,在对象模型里已经提到过,是Application.Workbooks.Add,保存的话,看过帮助文档的应该知道,保存的方法名是SaveAs,也可以通过录制宏记录下来。
- 创建文件夹MkDir
完整代码:
代码语言:javascript复制Sub vba_main()
Dim i As Long
'循环每一个工作表
For i = 1 To Worksheets.Count
AddWorkBook Worksheets(i)
Next
End Sub
Function AddWorkBook(sht As Worksheet)
Dim i_row As Long
'定位数据的范围
i_row = Cells(Cells.Rows.Count, 1).End(xlUp).Row
'将单元格数据储存到数组中
Dim arr() As Variant
arr = sht.Range("A1").Resize(i_row, 1).Value
'创建文件夹
VBA.MkDir ThisWorkbook.Path & "" & sht.Name
Dim i As Long
Dim wk As Workbook
For i = 1 To i_row
'新建工作簿
Set wk = Workbooks.Add
'保存工作簿
wk.SaveAs ThisWorkbook.Path & "" & sht.Name & "" & VBA.CStr(arr(i, 1))
'关闭工作簿并保存修改
wk.Close True
Next
'释放对象变量
Set wk = Nothing
'释放数组
Erase arr
End Function