VBA对象:Application、Workbooks、Worksheets、Range

Application 

ScreenUpdating属性

执行过程:

可是很多时候我们并不需要看表格执行代码中间的一系列变化,中间的结果我们并不关心,只需要最后的结果。

运行过程:

DisplayAlerts属性

借助WorksheetFunction属性使用Excel工作表的函数

Application的子对象

// ------------------------分 隔 符------------------------

Workbooks

引用工作簿

方法1:

方法2:利用工作簿名引用工作簿

注:

使用名称引用工作簿时,要注意以下几点:
1、如果是新建的工作簿,在不保存(即该文件不存在)的情况下,引用时工作簿的名称不能加扩展名。
2、如果是已经存在的文件,当系统设置不显示文件的扩展名时,引用时的工作簿名称可以使用扩展名,也可以不使用。
3、如果是已经存在的文件,当系统设置显示文件的扩展名时,使用工作簿名称引用工作簿时,工作簿的名称必须带上扩展名。
所以,对于一个已经存在的文件,为避免代码出错,使用带扩展名的名称去引用它是一种更准确、规范的做法。

引用对象的属性,获得工作簿的文件信息

Tips:获取当前工作簿的信息除了ThisWorkbook.Path 和 ThisWorkbook.FullName 还可以使用FileSystemObject对象的GetParentFolderName方法
e.g:

Sub GetCurrentWorkbookPath()
    Dim filePath As String
    Dim folderPath As String
    
    ' 获取当前工作簿的完整路径
    filePath = ThisWorkbook.FullName
    
    ' 使用 FileSystemObject 获取文件夹路径
    folderPath = CreateObject("Scripting.FileSystemObject").GetParentFolderName(filePath)
    
    ' 输出文件夹路径
    MsgBox folderPath
End Sub

ThisWorkbook与ActiveWorkbook区别:

将下列代码写在个人工作簿中执行

Sub wb()
Debug.Print "代码所在的工作薄为:" & ThisWorkbook.Name
Debug.Print "当前活动工作簿为:" & ActiveWorkbook.Name
ActiveWorkbook.Close False
End Sub

效果:

由此我们可知:ThisWorkbook和ActiveWorkbook都是Application对象的属性,都返回Workbook对象。但是,它们之间并不是等同的,ThisWorkbook是对代码所在工作簿的引用,ActiveWorkbook是对活动工作簿的引用

打开工作簿

使用 VBA 可以打开指定位置的目标工作簿,使用 Workbooks 集合的 Open 方法。

新建工作簿

 

保存工作簿

关闭工作簿

关闭所有工作簿 Close 方法。

Sub WB()
    Workbooks.Close
End Sub

关闭指定的工作簿,使用工作簿的 Close 方法:

Sub WB()
    Workbooks("工作簿1.xlsx").Close
End Sub

上述方法会弹出提示框,询问是否保存更改即将关闭的工作簿。为了不弹出提示框,可以指定是否保存:

Workbooks("工作簿1.xlsx").Close savechanges := True '自动保存更改
    ' 可以忽略参数名称savechanges,将代码写为:
Workbooks("工作簿1.xlsx").Close True                 '不保存更改

// ------------------------分 隔 符------------------------

首先声明,sheets和worksheets是两个不同的集合。前者提到excel一共有4种不同类型的工作表,sheets表示工作簿中所有类型的工作表组成的集合,而worksheets只表示普通工作表组成的集合。

Worksheets

打开工作表

使用 VBA 可以打开(激活)指定工作表,使用 Worksheets 集合工作表名的 Activate 方法。

Sub WS()
    Worksheets("工作表1").Activate
End Sub

使用工作表的序号的Activate方法。根据从左到右的排列顺序,Excel 会自动为每个工作表设定序号,从1开始。

Sub WS()
    '激活第一个工作表
    Worksheets.Item(1).Activate
    'Item 可以省略
    Worksheets(1).Activate
End Sub

新建工作表

使用 Worksheets 集合的 Add 方法创建新的工作表:

Sub WS()
    Worksheets.Add
    '打印新工作簿的名称
    Debug.Print ActiveSheet.Name
End Sub

e.g:

'在当前活动工作簿的最后一个工作表之后插入两个工作表
ActiveWorkbook.Worksheets.Add after:=Worksheets(Worksheets.Count), Count:=2
'在第1张工作表前插入1张名称为"工资表"的工作表
Worksheets.add(before:=Worksheets(1)).Name="工资表"

删除工作表

使用 Worksheets 集合的 Delete 方法删除指定的工作表:

Sub WS()
    Worksheets("工作表1").Delete
End Sub

重命名工作表

使用工作表的 Name 属性修改名称:

Sub WS()
    Worksheets("工作表1").Delete
End Sub

// ------------------------分 隔 符------------------------

Range

不同单元格区域对象的引用

  • 一个单元格
    range对象在表示单元格的时候不可以像cells(i,j)一样range("ij")或range("i,j"),range(i,j)表示  
Range("C1")   
'也可以用Cells属性
'工作表对象.Cells(行号, 列号)
'行号是数字,列号既可以是数字,也可以是列字母。省略工作表对象时,表示当前工作表。
Cells(1,3)    
Cells(1,"C")    '为什么不是Cells(1,C),因为A不是个变量    
  • 一次性引用两个单元格
    Range("起始单元格,结束单元格") 
Range("A1,C10")         '分别引用A1和C10这两个单元格 
  • 一次性引用连续范围单元格
    range("起始单元格","结束单元格") 等价于 range("起始单元格:结束单元格")  
    Range("A1" , "D10") 
    Range("A1 : D10")                       '推荐这种
    Range("A1:A4" , "D2:D10")               '从A1到D10结束为止的这一整个连续的区域
    Range(" A1:A4 : D2:D10")                'Range(" "A1:A4 " :"D2:D10" ") 会报错
    Range( Range("A1"), Range("D10") )      '两个参数为左上角和右下角单元格对象,Range(" Range("A1"), Range("D10") ")
  • 一次性引用不连续的范围单元格
    range("起始单元格1:结束单元格1 , 起始单元格2:结束单元格2")
    Range("A1:A4 , D2:D10")  '分别引用B2:B4和D2:D4这两个区域 
  • 引用整行或列
    '引用整行
    Range("1:1")
    '引用连续的整行
        range("1:8")           '等同于Rows("1:8")
    '引用不连续的整行
    Range("1:1 , 3:3 , 8:8")    'Rows("1:1 , 3:3 , 8:8")会报错
    
    '引用整列
    Range("A:A")
    '引用连续的整列
    range("A:D")                '等同于Colunms("A:D")
    '引用不连续的整列
    Range("A:A , C:C, D:D")    'Colunms("A:A , C:C, D:D")会报错

     

修改单元格值

使用 Range 对象的 Value 属性修改单元格的内容。

Range("A1").Value = "Excel VBA"    '等同于Range("A1")="Excel VBA"

清除单元格内容

使用 Range 对象的 Clear 和相关方法清除单元格内容或格式。

Sub RNG()
    
    Range("A1:B10").Clear             '清除全部,包括内容、格式、批注
    Range("A1:B10").ClearContents     '只清除内容
    Range("A1:B10").ClearFormats     '只清除格式
    Range("A1:B10").ClearComments     '只清除批注

End Sub

复制、剪切单元格

expression.Copy/Cut (Destination)

使用 Copy 或 Cut 方法赋值或剪切单元格,指定粘贴目标单元格。若省略参数Destination,VBA将区域复制到剪贴板。

Sub RNG()

    Range("A1:B10").Copy Range("D1") '复制
    Range("A1:B10").Cut Range("D1") '剪切

End Sub

 

posted @ 2023-06-24 11:51  iZJ"Qq4577105  阅读(542)  评论(0编辑  收藏  举报