精彩文章免费看

VBA-JC第9节|工作簿、单元格以及Application对象

最近更新:'2019-05-16'

  • Workbook和Workbooks对象
  • Range对象
  • Application对象
  • 1. Workbook和Workbooks对象

    1.1Workbooks.open(文件路径)

    打开指定路径的Exce文件,并返回一个 Workbook对象。

    Sub 打开工作簿示例()
        '定义一个指向 workbook类对象的变量wb
        Dim wb As Workbook
        '打开C盘的4月.xlsx文件
        Set wb = Workbooks.Open("C:\Users\Administrator\Desktop\19\4月.xlsx")
        '在该工作簿的第一张工作表的A1单元格写入"HELLO"
        wb.Worksheets(1).Cells(1, 1) = "HELLO"
    End Sub
    

    代码显示的最终结果如下截图:

    1.3Workbook.SaveAs“路径及文件名”(保存指定路径和名称的excel文件)

    将该 Workbook对象代表的工作表的工作簿保存为指定路径和名称的Excel文件。

    注意事项:
    特别注意:Workbook.SaveAs,在不需要将返回值赋值给变量时,该过程或函数不能写括号!

    1.4Workbooks.Close(关闭excel文件)

    关闭这个 Workbook对象所代表的excel文件

    1.5知识点汇总案例(打开,关闭)

    Option Explicit
    Sub 季度汇总()
        Dim wAll As Worksheet, wPer As Worksheet, filename, wb As Workbook
        Dim i, k
        Set wAll = Worksheets("季度汇总")
        '循环生成每个月份的文件名,然后打开这些文件
        For i = 4 To 6
            filename = i & "月.xlsx"
            Set wb = Workbooks.Open("C:\Users\Administrator\Desktop\19\" & filename)
            Set wPer = wb.Worksheets(1)
            '循环扫描该月报表的第3-10行,依次添加到汇总表的同一行
            For k = 3 To 10
                '以下四行代码可以用循环的方式改下,更加方便
                wAll.Cells(k, 3) = wAll.Cells(k, 3) + wPer.Cells(k, 3)
                wAll.Cells(k, 4) = wAll.Cells(k, 4) + wPer.Cells(k, 4)
                wAll.Cells(k, 5) = wAll.Cells(k, 5) + wPer.Cells(k, 5)
                wAll.Cells(k, 6) = wAll.Cells(k, 6) + wPer.Cells(k, 6)
            Next k
            wb.Close
        Next i
    End Sub
    

    代码及其相关的解析如下:

    'ActiveWorkbook.Path属性可以返回本工作簿所在的文件夹, '因此当其他待处理工作簿跟本工作簿在同一文件夹下时,可以用Path找到它们。 wkPath = ActiveWorkbook.path '循环生成每个月的文件名,并打开相应工作簿 For i = 4 To 6 filename = i & "月.xlsx" Set wb = Workbooks.Open(wkPath & "\" & filename) '让 w 指向该月文件的第一张工作表(即月报表) Set w = wb.Worksheets(1) '循环扫描该工作表的第3-10行,依次加到汇总表的同一行 For k = 3 To 10 '以下四行代码可以用循环的方式改写,更加方便 r.Cells(k, 3) = r.Cells(k, 3) + w.Cells(k, 3) r.Cells(k, 4) = r.Cells(k, 4) + w.Cells(k, 4) r.Cells(k, 5) = r.Cells(k, 5) + w.Cells(k, 5) r.Cells(k, 6) = r.Cells(k, 6) + w.Cells(k, 6) Next k '关闭该月的工作簿文件,保持桌面清洁 wb.Close Next i '新建一个工作簿文件,并让 wb 指向该工作簿 Set wb = Workbooks.Add '将季报汇总的工作表复制到新的工作簿中第一张工作表之前 r.Copy before:=wb.Worksheets(1) '将新工作簿即 wb 命名保持,然后关闭。 '在大多数版本的Excel中,不指定文件夹时,文件默认保存到当前目录下。 wb.SaveAs wkPath & "\季度报表.xlsx" wb.Close End Sub

    注意事项如下:
    部分技巧没有介绍,但很容易理解,包括:用ActiveWorkbook.Path打开同一文件夹下的文件;将工作表复制到新建的工作簿中并保持等。执行代码后,可以在同一文件夹下发现新建的“季报汇总.xlsx”结果文件。

    2. Range对象

    2.1Range属性

    cells(行,列)一种找到单元格对象的方法,而不是单元格对象本身。

    2.4Range.Interior属性:

    单元格的内部特点,比如颜色( Range.Interior.Color)、填充模式( Range.Interior.Pattern)等等。

    Sub rangeTest()
        Dim r As Range
        Set r = Range("a3:b7,d6,a2:f4")
        r.Value = 5
        r.Font.Size = 15
        r.Font.Color = RGB(255, 0, 0)
        r.Font.Bold = True
        r.Font.Italic = True
        r.Interior.Color = RGB(255, 255, 0)
    End Sub
    

    代码显示的最终结果如下截图:

    取消本 Range中的单元格合并,将其全部拆分。

    3. Application对象

    单元格归工作表所有,工作表归工作簿所有,工作簿归excel这个程序进行管理.而application就是代表excel这个程序对象.

    3.1 Aplication.Cells属性

    当前正处于激活状态的工作表(即“活动工作表”)的单元格。
    application.cells(3,5)=7可以写成cells(3,5)=7,因为cells归application管理,代表的是当前excel表排在最前面,处于激活状态的工作表.cells归application管理,因此可以忽略application.

    application.cells(3,5)可以写成application.activesheet.cells(3,5)

    application相关的激活状态(最前面,处于编辑修改状态),具体可以参见如下截图:

  • application.activeworkbook代表的是处于激活状态的工作簿
  • application.activesheet代表的是处于激活状态的工作表
  • application.activesheet.cells代表的是处于激活状态的单元格
  • Set w2 = Workbooks.Add w2.Worksheets(1).Cells(2, 2) = "新文件!" w1.Worksheets(1).Cells(3, 5) = 7 End Sub

    代码及其结果如下:

    3.3 Aplication.WorksheetFunction

    在VBA代码中直接调用Exce表格公式

    有一些Exce公式没有被包在Aplication.WorksheetFunction属性中,因为VBA已经提供了类似的系统函数.比如cos等等.

    Sub 最高销量()
        Dim r As Range, m
       Set r = Range("B2:D7")
        m = Application.WorksheetFunction.Max(r)
        Cells(9, 4) = m
    End Sub
    

    代码显示的最终结果如下截图: