跳转至

01 对象和数值

在表格中,我们至少要清楚理解三类对象,工作簿对象,工作表对象和单元格对象

一、工作簿对象

对于工作簿对象,我们主要有以下几种不同的引用方式:

  • 方式1:根据工作簿路径引用,workbooks("工作簿路径"),这种情况适用于工作簿本身未通过EXCEL打开
  • 方式2:根据工作簿名称引用,workbooks("工作簿名称"),这种情况适用于工作簿已打开
  • 方式3:activeworkbook:选取活动窗口的工作簿
  • 方式4:thisworkbook:选取代码所在的工作簿

sub test()
    dim wb as workbook
    '方式1: 根据路径选取
    set wb = workbooks.Open("C:\Users\22330\Desktop\进行中\Data.xlsx") ' 打开指定的工作簿
    '方式2: 根据文件名选取
    set wb = workbooks("Data.xlsx") 
    '方式3: 选取活动窗口的工作簿
    set wb = activeworkbook
    '方式4: 选取代码所在的工作簿
    set wb = thisworkbook
    msgbox wb.name ' 显示打开的工作簿的名称
End sub
在上面的程序中,通过dim定义了一个工作簿对象,注意这个是对象,因此赋值的时候除了 = 还需要通过set来指定


二、工作表对象

对于工作表对象,我们也有不同的情况,主要包括以下几类:

  • sheets(n): 表示按工作表顺序定位的第n个工作表,从下标1开始

  • sheetn:系统命名的工作表,每次你新建一个表,系统都会给一个编号,比如开始有sheet1,sheet2,sheet3三个表,就算你后面删除了sheet2这个表,系统内部的编号还是不变,sheet1和sheet3还在那里,这个编号在VBA编程界面查看

  • sheets("工作表名"):按工作表名定位,比如上面的1号,2号,3这些都是工作表的名字
  • activesheet: 活动工作表,也就是目前显示的这个工作表

一般我们对工作表的完整写法是worksheets,但是也可以像我上面这样简写为sheets

Sub test()
    Dim ws As Worksheet
    '方式1: 根据索引选取
    Set ws = Worksheets(1) ' 打开指定的工作表
    '方式2: 根据系统默认工作表索引选取
    Set ws = Sheet1
    '方式3: 根据名字选取
    Set ws = Worksheets("1号")
    '方式4: 选取活动窗口的工作表
    Set ws = ActiveSheet
    MsgBox ws.Name ' 显示工作表的名称
End Sub
上面的程序中,通过dim定义了一个工作表对象,一样需要通过set来指定,一般是需要写Activeworkbook.Worksheets(1),代表当前活动工作簿下的工作表,但是省略不写默认是当前工作簿,这个问题在你进行工作簿切换的时候尤其需要注意,如果切换之后不是对当前工作簿操作,就需要指定具体的工作簿


三、区域和单元格

3.1 单元格

对于单元格的引用,我们通常有以下几种方式:

  • range("a1"):通过range方法,表示A1单元格
  • cells(1,1):通过cells方法,给定行和列,指定对应单元格,也可以用字母代替列,比如 cells(5,"d")
  • [A1]:通过[ ]方法,给定具体的单元格

1
2
3
4
5
6
7
8
sub test()
    '方式1: 根据range赋值
    range("A1").value = "你好1"
    '方式2: 根据[ ]赋值
    [A2].value = "你好2"
    '方式3: 根据cells赋值
    cells(3,1).value = "你好3"
End sub
这里单元格的引用方式比较简单,通过上面的代码,就可以对对应的单元格进行赋值,注意按理来说需要给定sheet的范围,由于我们没有写,所以默认是ActiveSheet.range("A1"),表示当前的活动sheet

3.2 区域

区域其实就是单元格的集合,因此也有共通之处,主要有以下几种不同的方式

  • range("a5:c10"):通过range实现,表示从A5到C10这一块表格区域
  • range("a5","c10"):一样通过range实现,不过可以通过逗号隔开
  • selection: 代表当前光标所选取的区域
  • Range(Cells(1, 1), Cells(2, 2)):可以和Cells混合进行使用,表示从A1到B2单元格这块区域
  • Range(Cells(1, 1), [B2]),等同于上方,是三种不同方式的混合,表示从A1到B2单元格这块区域
sub test()
    '设置A2到C3单元格的值为"你好2"
    range("a2:c3").value = "你好2"
    '设置A1到C3单元格的值为"你好3"
    range("a1","c3").value = "你好3"
    '设置A4到C4单元格的值为"你好4"
    range("a4",cells(4,3)).value = "你好4"
    '设置选区的值为"你好5"
    selection.value = "你好5"
End sub

四、数值类型

那通过上面的了解,我们已经知道了三个主要的概念,以及如何在VBA代码中表示它们,那接下来,我们重点讲一下数据类型,在之前的代码里面,我们通过dim定义了workbookworksheet类型,分别表示工作簿和工作表,这些可以称作对象,而对于一个具体的数值,我们有以下这些最常用的:

VBA写法 含义 范围 简写
integer 整型 -32768 到 32767 %
byte 字节 0 到 255
long 长整型 -2147483648 到 2147483647 &
single 单精度浮点数 保留6位精度 !
double 双精度浮点数 保留10位精度 #
string 字符串 - $
date 日期 100年1月1日 到 9999年12月31日
Variant 变量 -
Boolean 布尔值 -
Currency 货币型 - @
Decimal 小数 只能在变体中使用

通过dim我们可以把一个变量定义为以上的类型,可以参考下方的具体写法:

sub test()
    dim a as string '定义a为字符串变量
    dim a$ '定义a为字符串变量,这个地方采用的简写
    dim b as integer '定义b为整数变量
    dim b% '定义b为整数变量,这个地方采用的简写
    dim c as double '定义c为双精度变量
    dim c# '定义c为双精度变量,这个地方采用的简写
    dim d as long '定义d为长整数变量
    dim d& '定义d为长整数变量,这个地方采用的简写
End sub