c.Excel-VBA(工作簿-工作表-单元格-行列)

最近学习VBA,发现之前的我太过于追求技术上的成功而忘记了学习的本质,是真正解决实际问题。学习了如何录制宏,了解到工程、对象等,接下来研究VBA工作簿、工作表及单元格:

工作簿、工作表图示

VBA工作簿

  1. 第N个工作簿 Workbooks(N)
  2. 指定名称的工作簿 Workbooks("工作簿名")
  3. 当前所在的工作簿 thisWorkbook
  4. 当前激活的工作簿 ActiveWorkbook

新建工作簿

'1:新增工作簿'
Sub AddNewWorkbooks()
      Workbooks.add
End Sub
'2:创建工作簿的一种更好方式是将其分配给一个对象变量'
Option Explicit    
Sub AddNewWorkbooks()
Set NewBook = Workbooks.Add
   With NewBook
   .Title = "标题"
   .Subject = "未知属性"
   .SaveAs Filename:="我是新建的工作簿名"
   End With
   MsgBox(ActiveWorkbook.Path)  '返回当前激活工作簿路径'
End Sub

Option Explicit的作用为:声明所有变量都需要先定义才能使用,否则程序在使用了未经定义的变量时就会报错'。 因VB中并不要求显示定义变量,即变量可以不经定义直接使用.

打开工作簿

Sub OpenWorkbooks()
   Workbooks.Open("C:\users\Documents\我是新建的工作簿名.xlsx")   '可以使用Open方法打开指定的工作簿,注意路径要填写完整'
End Sub     '运行完成后将打开该工作簿'

返回当前工作簿的路径

Sub GetWorkbooksPath()
   Application.ActiveWorkbook.Path           '返回当前激活工作簿路径'  
   Application.ActiveWorkbook.FullName       '返回当前激活工作簿路径及名称'  
   pplication.ActiveWorkbook.Name            '返回当前激活工作簿文件名'  
End Sub

VBA工作表

  1. 第N个工作表 Worksheets(N)
  2. 指定名称的工作表 Sheets("工作表名")
  3. 第N个工作表 SheetN
  4. 活动工作表 Activesheets
  5. Worksheets与Sheets的区别:Sheets集合代表当前工作簿中的所有工作表,包括图表工作表、对话框工作表和宏表。Worksheets集合仅代表当前工作簿中的所有工作表。
    Sheets和Worksheets区别

    判断工作表是否存在
Sub TestSheetYesNo()
    Dim mySheetName As String, mySheetNameTest As String
    mySheetName = "Sheet4"       '输入需测试的工作表名称'
    On Error Resume Next   
    mySheetNameTest = Worksheets(mySheetName).Name
    If Err.Number = 0 Then
        MsgBox "The sheet named ''" & mySheetName & "'' does exist in this workbook."
    Else
        Err.Clear
        MsgBox "The sheet named ''" & mySheetName & "'' does NOT exist in this workbook."
    End If
End Sub

On Error Resume Next的作用为:随后的程序即便出现"运行时错误"时,也不
会显示"出错信息",并且会继续运行下去。

VB提供两个语句和一个对象来处理"运行时错误",即:

  1. On Error Resume Next 语句 该语句后面程序出现"运行时错误"时,会继续运行程序,仅只对当前函数有用。如果出错,那么Err对象中将放置最近一次出错的信息。
  2. On Error Goto 0 语句 该语句后面程序出现"运行时错误"时,会显示"出错信息"并停止程序的执行。
  3. Err对象 使用Err对象来得到错误信息。有重要的属性有三个:Number(错误号-设置或返回指定一个错误的值;Err.Number=0指的是还没有出现错误), Source(错误来源-设置或返回产生错误的对象的名称), Description(错误描述-设置或返回一个描述错误的字符串)。分别是错误号,错误来源,错误描述。

创建工作表

Sub TestSheetCreate()
    Dim mySheetName As String, mySheetNameTest As String
    mySheetName = "Sheet4"
    '[可增加判断语句,判断Sheet4是否存在]'
    Worksheets.Add.Name = mySheetName    '该句创建工作表并命名为sheet4'
    MsgBox "The sheet named ''" & mySheetName & "'' did not exist in this workbook but it has been created now."
End Sub

引用工作表

' 1 - 引用1个以上工作表'
Sub Several() 
 Worksheets(Array("Sheet1", "Sheet2", "Sheet4")).Select     '选中表1、2、3'
End Sub
'2 - 按索引号引用工作表 
如果移动、添加或删除工作表, 则索引顺序可能会更改'
Sub FirstOne() 
    Worksheets(1).Activate    '引用第一个工作表'
    Sheets(4).Activate        '所有类型的工作表 (工作表、图表、模块和对话框工作表)第四张'
End Sub
'3 - 通过名称引用工作表'
Sub ActivateChart() 
  Worksheets("Sheet1").Activate         '激活名称为“Sheet1”工作表'
  Charts("Chart1").Activate             '激活名称为“Sheet1”图表'
  DialogSheets("Dialog1").Activate      '激活名称为“Dialog1”对话框工作表'
Sheets("Chart1").Activate 
End Sub

VBA单元格

  1. Range 引用单元格和单元格区域
    Range('A1')=Cells(1,'A') =[A1] 单元格A1三种表示方法
    Range('A1:B5') 从单元格A1到B5区域
    Range('A1:B5,B1:B7') 多块的选定区域
  2. Cells (行号,列号)
    Range(cell(1,1),cells(30,1))=Range('A1:A30') 从单元格A1到A30区域
  3. Seletion 当前被选取的区域

引用单元格

'1 - 引用工作表上的所有单元格'
Sub ClearSheet() 
  Worksheets("Sheet1").Cells.ClearContents     '清除Sheet1所有单元格'
End Sub
'2 - 使用 A1 表示法引用单元格和区域'
Sub FormatRange() 
 Workbooks("Book1").Sheets("Sheet1").Range("A1:D5") _ 
 .Font.Bold = True 
End Sub
'3 - 使用 Range 对象引用单元格'
Sub Random() 
 Dim myRange As Range 
 Set myRange = Worksheets("Sheet1").Range("A1:D5") 
 myRange.Formula = "=RAND()" 
 myRange.Font.Bold = True 
End Sub
'4 - 使用索引编号来引用单元格'
Sub EnterValue() 
 Worksheets("Sheet1").Cells(6, 1).Value = 10 
End Sub

VBA整行、整列

  1. Rows('1:1')=Range('1:1')=Row(1) 第一行
    Rows('2:10')=Range('2:10') 第2-10行
  2. Columns('A:A')=Range('A:A')=Columns(1) 第一列,A列
  3. Range('A:F')=Columns('A:F') A:F列
'将活动工作簿中第一张工作表上的第一行、第三行和第五行的字体设置为加粗'
Sub SeveralRows() 
    Worksheets("Sheet1").Activate 
    Dim myUnion As Range 
    Set myUnion = Union(Rows(1), Rows(3), Rows(5)) 
    myUnion.Font.Bold = True 
End Sub

思考:
1.怎样将多个工作簿合并成一个工作簿?
2、怎样实现跨表链接数据?

你可能感兴趣的:(c.Excel-VBA(工作簿-工作表-单元格-行列))