对象Workbook Worksheet Range的使用

2020-07-28 10:26:48 浏览数 (3)

讲再多都不如直接使用来的快,今天使用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

0 人点赞