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

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

  1. Workbook和Workbooks对象
  2. Range对象
  3. 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.文件路径用反斜杠“\”分隔,而非“/”
2.给对象赋值,必须用set
3.文件打开的其他方式,如下截图:



假设格式和名单顺序完全相同的表格.如何批量打开.

1.2Workbooks.add(新建一个excel文件)

新建一个Excel文件,并将其作为一个Workbook对象返回

案例:
新建一个excel文件,将E3单元格改为2016,并保存在c盘的测试.xlsx


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

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


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

自动将某一文件下所有名字为“X月.xlsx”的文件进行汇总到本工作簿中,并将结果保存。

Sub 季度汇总()
    
    Dim i, k, filename, wkPath
    Dim w As Worksheet, r As Worksheet, wb As Workbook
    
    '首先,让 r 代表当前工作簿(“季报.xlsm”)的汇总表
    Set r = ActiveWorkbook.Worksheets("季度汇总")
    
    '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(行,列)一种找到单元格对象的方法,而不是单元格对象本身。


以前cells(3,5)是简写了,其实cells(3,5)是个range对象.


因此修改单元格的属性就应该修改range的相关属性.

range在excel可以代表一个单元格,也可以代表整张excel表格所有的单元格.是代表指定区域的单元格.


range("A3")与cells(3,1)代表的单元格是一样的.一般都是使用cells(3,1)这种表达方式.



用range表示单元格的范围,可以有如下几种方式:

2.2Range.Value属性

2.3Range.Font属性

可以使用Font的各种属性,控制该Range内所有单元格的字体

  • Range.Font.Italic:是否斜体?

  • Range.Font.Bold:是否粗体?

  • Range.Font Color:文字颜色

  • Range.Font.Size:文字大小

  • 让r范围内的单元格都是粗体:
    r.Font.Bold=YES

  • 让r范围内的单元格都不是粗体
    r.Font.Bold=NO

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
End Sub

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



RGB相关拓展知识,如下截图:

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

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



以上代码可以用with...end with进行改进


2.5Range.ClearContents & Range.ClearFormats & Range.Clear

  • Range.ClearContents :
    清除内容,保留格式
  • Range.ClearFormats :
    清除格式,保留内容
  • Range.Clear:
    内容和格式全部清除

2.6Range.Merge

将该 Range对象中所有单元格合并为一个单元格。(如果 Range形状特殊,则无法合并)

2.7Range.UnMerge

取消本 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.

3.2 Aplication.ActiveWorkbook & Aplication.ActiveSheet


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

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

  • application.activeworkbook代表的是处于激活状态的工作簿
  • application.activesheet代表的是处于激活状态的工作表
  • application.activesheet.cells代表的是处于激活状态的单元格

相关案例如下截图:

Option Explicit

Sub 活动工作簿示例()
    Dim w2 As Workbook, w1 As Workbook
    Set w1 = Application.ActiveWorkbook
    
    Set w2 = Workbooks.Add
    w2.Worksheets(1).Cells(2, 2) = "新文件!"
    w1.Worksheets(1).Cells(3, 5) = 7
    
End Sub

代码及其结果如下:



注意事项:
如果没有表明w1是活动的工作簿,则Cells(3, 5) = 7则会直接赋值在新建的工作表上.

Option Explicit

Sub 活动工作簿示例()
    Dim w2 As Workbook

    Set w2 = Workbooks.Add
    w2.Worksheets(1).Cells(2, 2) = "新文件!"
   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

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



注意事项:

1.m也可以写成,m = Application.WorksheetFunction.Max(Range("B2:D7"))是等价的.

  1. m= Application.WorksheetFunction.Max(Range("B2:D7"))不可以写成m= Application.WorksheetFunction.Max("B2:D7")


3.4 Aplication. DisplayAlerts

相关案例如下截图:

Sub 活动工作簿示例()
    Dim w2 As Workbook, w1 As Workbook
    Set w1 = Application.ActiveWorkbook
    
    Set w2 = Workbooks.Add
    
    w2.Worksheets(1).Cells(2, 2) = "新文件!"
    
    Application.DisplayAlerts = False
    
    w2.SaveAs "C:\Users\Administrator\Desktop\测试.xlsx"
    
    Application.DisplayAlerts = True
     
    w2.Close
    
End Sub

3.5 Aplication. Quit

应用程序退出.


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,188评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,464评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,562评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,893评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,917评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,708评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,430评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,342评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,801评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,976评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,115评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,804评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,458评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,008评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,135评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,365评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,055评论 2 355

推荐阅读更多精彩内容