跳转至

03 属性和方法

一、常用属性

在之前的介绍中,我们已经了解了如何定义一个VBA过程,也明白了三大对象类型和11大数值类型,本期我们主要关注EXCEL中用到的主要属性,首先是常用属性

主要包括:Count(数量),Name(名称),path(路径),Address(地址),Row(行号),Column(列号),FullName(路径+文件名称,也就是完整路径)等

这里需要注意的是 path 是不包含文件名的,比如 C:\Users\22330\Desktop\EXCEL\VBA,而fullname会跟上文件名

另外还要重点提一下Valuetext的区别:

  • Value:返回值,如果单元格是错误值则会报错,如果是正常值则返回正常值
  • text:返回文本,如果单元格是错误值则返回显示的错误文本(如 #div/0!,#value! 等),不会报错
Sub test()
    MsgBox (ThisWorkbook.Worksheets.Count) '弹出当前工作簿的工作表数量
    MsgBox (ThisWorkbook.Worksheets(1).Name) '弹出当前工作簿第一个工作表的名称
    MsgBox (ActiveWorkbook.Path) '弹出当前活动工作簿的路径
    MsgBox (Range("A1").Value) '弹出A1单元格的值
    MsgBox (ActiveCell.Text) '弹出当前活动单元格的文本
    MsgBox (ActiveCell.Address) '弹出当前活动单元格的地址
    MsgBox (ActiveCell.Row) '弹出当前活动单元格的行号
    MsgBox (ActiveCell.Column) '弹出当前活动单元格的列号
    MsgBox (ThisWorkbook.FullName) '弹出当前工作簿的完整路径
End Sub

二、颜色属性

在EXCEL中主要有两种不同的上色方式,一种是通过color指定,配合此color属性进行使用的有直接通过vb接颜色,比如vbBlackvbRed等,也可以直接用十进制RGB值代替,详细可以参考下表

VBA常量名 十进制RGB值 颜色 VBA常量名 十进制RGB值 颜色
vbBlack 0 黑色 vbWhite 16777215 白色
vbRed 255 红色 vbGreen 65280 绿色
vbYellow 65535 黄色 vbBlue 16711680 蓝色
vbMagenta 16711935 洋红 vbCyan 16776960 青色
vbGray 8421504 中灰 vbDarkGray 4210752 深灰
vbLightGray 12632256 浅灰 vbOrange 33023 橙色
vbPurple 8388736 紫色 vbBrown 33023 棕色
vbPink 13353215 粉红 vbDarkRed 128 暗红
vbDarkGreen 32768 暗绿 vbDarkYellow 32896 暗黄
vbDarkBlue 8388608 深蓝 vbDarkCyan 8421376 深青
vbDarkMagenta 8388736 深洋红

同样也可以直接使用RGB进行定义,如下面所示的写法都是支持的

1
2
3
Range("a1").Interior.Color = vbBlack '黑色
Range("a1").Interior.Color = 0 '黑色
Range("a1").Interior.Color = RGB(0,0,0) '黑色

除了使用color属性进行定义,也可以使用colorindex实现,写法为:

Range("a1").Interior.Colorindex = 1 '黑色
这里的数字具体填几,可以参考底下这个色卡:

在这里插入图片描述 主要我们给EXCEL表格中两种情况配色,一个是单元格的底色,一个是字体的颜色,如果是前者,我们使用Interior.Color,而对于后者,我们使用Font.Color,具体用法可以参考底下的代码:

Sub test()
    '设置单元格背景颜色
    Range("a1").Interior.Color = vbGreen '绿色
    Range("a2").Interior.Color = RGB(255, 0, 0) '红色
    Range("a3").Interior.ColorIndex = 6 '黄色
    '设置单元格字体颜色
    Range("a1").Font.Color = vbWhite '白色
    Range("a2").Font.Color = RGB(255, 0, 0) '红色
    Range("a3").Font.ColorIndex = 1 '黑色
End Sub

三、可操作属性

3.1 常见可操作属性

什么叫做可操作属性,顾名思义,就是我们可以修改属性的值,修改它的具体呈现方式,比如在worksheet中,我们就可以根据visible属性操作其是否隐藏: - 当为-1或者1的时候,为显示状态 - 0的时候为隐藏,和手动的隐藏类似,可以通过手动取消隐藏重新显示出来 - 2的时候为绝对隐藏,只能通过代码的方式取消隐藏

1
2
3
4
5
Sub test()
    thisworkbook.worksheets(1).visible = 1 '显示工作表1
    thisworkbook.worksheets(1).visible = 0 '隐藏工作表1
    thisworkbook.worksheets(1).visible = 2 '工作表1设置为非常见工作表
End Sub
其他的比如表格每一行的行高和列宽,都可以设置: - rowheight: 调整行高,可以搭配 rows 进行使用,选取多行统一调整 - columnwidth: 调整列宽,可以搭配 columns 进行使用,选取多列统一调整

另外还可以通过autofit 方法实现自适应的行高列宽调整

1
2
3
4
5
Sub test()
    rows("1:2").rowheight = 30 '设置第一行和第二行的高度为30
    columns("a:b").columnwidth = 20 '设置A列和B列的宽度为20
    columns("c:d").autofit '自适应C列和D列的宽度
End Sub

3.2 单元格边框属性

对于单元格边框的调整,主要需要区分 位置linestyleweight颜色这四步,表达形式为:borders(位置).属性 = XXX,后面的属性可以跟linestyleweight颜色,具体的位置主要可以分为以下这些,如果是所有边框就省略位置不写:

VBA常量名 含义 VBA常量名 含义
xlEdgeLeft 左框线 xlEdgeRight 右框线
xlEdgeTop 上框线 xlEdgeBottom 下框线
xlInsideVertical 内部垂直框线 xlInsideHorizontal 内部水平框线

而对于linestyle,可以分为以下这些,打了括号写了数字的表示,可以用数字代替这个常量,比如 1 就代表是 实线

VBA常量名 含义 VBA常量名 含义
xlThin 细线 xlThick 粗线
xlDot 点线(3) xlDash 虚线 (2)
xlContinuous 实线(1) xlNone 无边框(0)

颜色的设置和之前讲的一样,而weight的范围在 1≤x<5 中,设置的时候要注意

1
2
3
4
5
Sub test()
    Range("a1:c10").Borders.LineStyle = xlContinuous '设置边框为实线
    Range("a1:c10").Borders.Weight = 2 '设置边框磅值为2磅
    Range("a1:c10").Borders.Color = vbBlack  '设置边框颜色为黑色
End Sub

3.3 字体常用属性

除了上面我们提到的可以通过colorcolorindex对字体颜色进行赋值,VBA还支持设置字体的其他格式,比如name(字体名称),size(大小),bold(粗体),italic(斜体),underline(下划线),strikethrough(删除线)

Sub test()
    range("a1").font.name = "宋体" '设置字体为宋体
    range("a1").font.size = 12 '设置字体大小为12
    range("a1").font.bold = true '设置字体为粗体
    range("a1").font.italic = true '设置字体为斜体
    range("a1").font.underline = true '设置字体为下划线
    range("a1").font.strikethrough = true '设置字体为删除线
    range("a1").font.color = vbRed '设置字体为红色
    range("a1").font.colorindex = 3 '设置字体为黄色
End Sub


四、VBA常用方法

4.1 工作簿和工作表常用方法

对于工作簿和工作表,常见的就是

  • activate: 激活某个工作表,常见于需要切换ActiveSheet的情况
  • open:打开某个工作簿,给定路径就可以打开
  • Delete: 删除某个工作表常用,删除的时候表格会提示,如果要隐藏此提示,可以用Application.displayalerts = false 来进行提示消息的隐藏,执行完操作后,再将状态改成True
  • add: 可以新建工作簿或者工作表,如果是工作表,可以通过after参数指定其插入的位置
  • select:选取某张表,也可以同时选中多张表,但是不可以选中隐藏的表
  • move: 移动某张表,可以通过beforeafter参数指定具体的位置
  • close:关闭工作簿文件,可以通过 0 指定关闭时不保留修改,1 表示保留修改
sub test()
    dim wb as workbook '定义wb为工作簿变量
    dim ws as worksheet '定义ws为工作表变量
    thisworkbook.sheets(1).activate '激活第一个sheet
    set wb = workbooks.open("C:\Users\22330\Desktop\进行中\Data.xlsx") '打开Data.xlsx文件
    wb.sheets(1).Delete '删除Data.xlsx文件的第一个sheet
    set ws = wb.sheets.add '添加一个sheet并赋值给ws
    '添加一个sheet并赋值给ws,并将其插入到最后一个sheet之后
    set ws = wb.sheets.add(After:=wb.sheets(wb.sheets.count)) 
    wb.sheets(2).select '选择第二个sheet
    wb.sheets(1).move After:=wb.sheets(2) '将第一个sheet移动到第二个sheet之后
    wb.close '关闭Data.xlsx文件
End sub

对工作簿和工作表进行了若干修改和操作之后,我们会将其进行保存或者另存,这个部分涉及的主要方法包括以下三种:

  • save:保存,如果是新建的工作簿,不给定路径,就是默认放在用户文档文件夹下,例如 C:\Users\22330\Documents,而如果是从某个文件夹下打开的工作簿,则默认保存到原路径
  • saveas:如果我们要指定保存的路径,可以使用这个方法,后面跟上路径,这个是对源文件进行保存
  • savecopyas:新建一个副本,并跟上路径,保存为副本文件
  • kill:删除指定的文件
1
2
3
4
 wb.Save '默认保存到原目录
 wb.SaveAs"C:\Users\22330\Desktop\EXCEL\VBA\1.xlsx" '保存到指定文件夹
 ActiveWorkbook.SaveCopyAs "C:\Users\22330\Desktop\EXCEL\VBA\2.xlsx" '保存副本到指定文件夹
 Kill "C:\Users\22330\Desktop\EXCEL\VBA\2.xlsx" '删除指定文件

4.2 单元格常用方法

对于单元格,常用的有以下方法:

  • activate:激活某个单元格
  • copy:复制,可以直接这样写 range("a1").copy range("b1"),也可以结合下方的pastespecial方法来选择需要粘贴的
  • pastespecial:后面跟paste参数,用于指定需要粘贴的是什么
    • xlPasteValues:仅粘贴值
    • xlPasteFormulas:仅粘贴公式
    • xlPasteFormats:仅粘贴格式
    • xlPasteColumnWidths:仅粘贴列宽
    • xlPasteComments:仅粘贴注释
  • delete:删除某个单元格,可以通过shift参数指定单元格的调整方式,有xlToLeftxlUp两种常见方式
  • clear: 清空,分为ClearContents(清空内容),ClearFormats(格式),ClearComments(批注)和clear(全部)

sub test()
    range("a1").Activate '激活a1单元格
    range("a1").Copy '复制a1单元格
    range("b1").PasteSpecial Paste:=xlPasteValues
    '也可以写作如下这样一句话,默认会保留值,保留格式等
    range("a1").copy range("b1")

    range("c1").Delete shift:=xlToLeft '删除c1单元格,并将其左侧的单元格向左移动
    range("c1").Delete shift:=xlUp '删除c1单元格,并将其下侧的单元格向上移动

    'clear方法的展示
    Range("b1").ClearContents '清除d1单元格的内容
    Range("b1").ClearFormats '清除d1单元格的格式
    Range("b1").ClearComments '清除d1单元格的批注
End sub
另外如果需要快速定位某块区域,或者某块区域的最后一行或者最后一列,可以使用end方法,除此之外还有:

  • UsedRange: 快速获取当前sheet已经被修改过的表格区域,是一个矩形区域
  • CurrentRegion:获取某个单元格附近的连续区域,类似于选中一个单元格,然后按Ctrl+A
VBA代码 类似于快捷键 功能描述
End(xlDown) Ctrl + ↓ 从当前单元格向下找到最后一个非空单元格
End(xlUp) Ctrl + ↑ 从当前单元格向上找到第一个非空单元格
End(xlToLeft) Ctrl + ← 从当前单元格向左找到第一个非空单元格
End(xlToRight) Ctrl + → 从当前单元格向右找到最后一个非空单元格

本期就帮大家系统整理了一些常用属性和方法,如果忘记的时候可以回来查阅,不需要把每个值都记得清清楚楚,只需要知道大概的用法即可