|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
'VBA编程之一:Excel的可视对象
'声明:1.本教程旨在引领初学者入门 2.由于本人水平所限,本教程无可避免会有错误,恳请高手指正为谢!
'目录
'Ⅰ、集的概念
'Ⅱ、单元格(Cells)
'Ⅲ、行(Rows)、列(Columns)
'Ⅳ、域(Range)
'Ⅴ、工作表(WorkSheets)
'Ⅵ、工作薄(Workbooks)
'Ⅶ、综述
'by hhh5460
'All rights reserved
'***********************************************
'Ⅰ、集的概念
'Excel中有很多种不同的对象,每一种对象又不止一个,同一种对象可以形成一个对象集。是的,对象集!
'我们知道,同时打开编辑的文档(workbook)可以很多,形成了一个文档集(Workbooks);而每一个文档中又有很多表(worksheet),同样构成表集(Worksheets);每一张表中又有很多行(row)、很多列(column)、很多单元格(cell),分别构成行集(Rows)、列集(Columns)、单元格集(Cells),
'在用VBA编程时,我们时时都要有"集合"概念,因为这些文档集(Workbooks)、表集(Worksheets)、行集(Rows)、列集(Columns)、单元格集(Cells)可以帮我们精确定位要操作的对象
'***********************************************
Workbooks(1).Worksheets(2).Cells(3, 4) = 5000 '(用序号)定位于:文档集中的第一个. 表集中的第2个. 单元格集中第3行的第4个. 之单元格
Workbooks("工资表").Worksheets("一月").Cells("李四") = 5000 '(用名字)定位于:文档集中的名为"工资表"的. 表集中名为"一月"的. 单元格集中名为"李四"的.之单元格
Workbooks(1).Worksheets(2).Rows(3).Cells(4) = 5000 '(用序号)定位于:文档集中的第一个. 表集中的第2个. 行集中第3个. 单元格集中的第4个. 之单元格
Workbooks(1).Worksheets(2).Columns(4).Cells(3) = 5000
ActiveWorkbook.ActiveSheet.ActiveCell = 5000 '定位于:当前文档. 当前表. 当前单元格 ===>> 注意此时无集合的概念!!'
'***********************************************
'Ⅱ、单元格(Cells)
'单元格可理解为一个个的“小箱子”,里面可以装数字、文字、日期等数据
'***********************************************
'一、单元格的定位
'当我们从单元格中取数字、文字等内容时,我们心里要清楚是针对哪一个单元格
'Cells 表示全体单元格之集合(凡是集合,都是可以用for each语句遍历的,后面会有例子)
'所以
Cells.Select
'表示选中了所有单元格
'我们知道平面上一点有横坐标与纵坐标,单元格也有
Cells(1, 2) = Cells(1, 1).Offset(0, 1)
'行参数与列参数也可以是变量,变量的好处是可以动态选取别的单元格
Cells(rowNum, 2+columnNum)
'二、单元格的存、取操作
'单元格的最基本功能,就是可以用于存、取数据
'1、把数字、文字等放入单元格"存"起来,且该单元格中原有之数据被丢弃
Cells(1, 1) = 3.14159
Cells(2, 1) = "中国"
Cells(3, 1) = "#2011/06/18"
'2、从单元格中"取出"数字、文字等内容
Pi = Cells(1, 1)
GuoJia = Cells(2, 1)
RiQi = Cells(3, 1)
'3、综合的例子,先"取",再运算,最后"存"
Cells(1, 2) = Cells(1, 1) + Cells(2, 1)
Cells(1, 2) = Cells(1, 1) & Cells(2, 1)
'三、单元格的其它操作
'单元格既然可以看作一个个的“箱子”,那么除了数据以外,也还有其它的“东西”
Cells(1, 1).Interior.ColorIndex = 5
Cells(2, 1).Font.ColorIndex = 20
Cells(3, 1).Font.Bold = True
Cells(4, 1).Formula = "=SUM(B1:B10)"
Cells(5, 1).Select
Selection.Interior.ColorIndex = 5
Cells(6, 1).HasFormula
Cells(7, 1).IsNumber
Cells(8, 1).IsText
Cells(9, 1).IsEmpty
Cells(10, 1).IsNull
Cells.Clear
Cells(1, 1) = ""
'四、有时要对全体单元格遍历
For Each c In Cells
If IsEmpty(c) Then
'做指定的操作
End If
Next
'***********************************************
'Ⅲ、行(Rows)、列(Columns)
'行与列可理解为由一个个的单元格横向或纵向排列成一行(列)
'***********************************************
'rows 表示全体 行之集合
Rows.Select
Columns.Select
'一、行(列)的定位
Rows (1)
Columns (4)
'行(列)参数也可以为变量,便于动态选取行(列)
Rows (r)
Columns (c)
'二、行(列)的常见操作
Rows(1).Select
Rows(2).Interior.ColorIndex = 5
Rows(3).Borders.LineStyle = "Solid"
Rows(4).Delete
Rows.Count
Columns.Count
'三、获取已使用的最大行(列)
r = [a65535].End(3).Row
c=[iv1].End(1).Column
'有时用下面代码实现取最末行的行数
r = 0
Do While IsEmpty(Cells(r + 1, 1))
r = r + 1
Loop
'四、有时需要对全体行(列)遍历
'1、用单元格对行遍历
For Each c In Rows(1)
If IsEmpty(c) Then
'指定之操作
End If
Next
'2、用行对所有行遍历
For Each r In Rows
If IsEmpty(r) Then
r.Delete
End If
Next
For Each col In Columns
If IsEmpty(col) Then
col.Delete
End If
Next
'***********************************************
'Ⅳ、域(Range)
'域可理解为由一个个的单元格横向及纵向排列而成的区域,一般是一个矩形区域,特殊地、可以只是一排或一列。(不考虑更特殊的)
'应当明白:域 (Range)为单元格(cells)之集合
'当然,很多个域(Range)可以构成更高层次的集合,即域集(Ranges),这点不常用
'***********************************************
'一、域的定位
'以下各区域完全相同
Range(Cells(1, 1), Cells(100, 3))
Range ("a1:c100")
[a1:c100]
[a1].Resize(100, 3)
Range("C5:D9,G9:H16") '多块选定区域
Range("A:A") 'A 列
Range("1:1") ' 第一行
Range("A:C") ' 从 A 列到 C 列的区域
Range("1:5") '从第一行到第五行的区域
Range("1:1,3:3,8:8") '第 1、3 和 8 行
Range("A:A,C:C,F:F") 'A 、C 和 F 列
'二、域的存、取操作
'取出域的数据给数组
Dim arr(1 To 100, 1 To 3)
arr = Range(Cells(1, 1), Cells(100, 3))
Dim rng As Range
Set rng = Range(Cells(1, 1), Cells(100, 3))
'保存数组的数据至域
Dim arrT(1 To 10)
arrT = [1,2,3,4,5,6,7,8,9,10]
Range(Cells(1, 1), Cells(1, 10)) = arrT
Range(Cells(1, 1), Cells(10, 1)) = Application.Transpose(arrT)
[a1].Resize(1, arrT.ubound + 1) = arrT
[a1].Resize(arrT.ubound + 1, 1) = Application.Transpose(arrT)
'三、域的常见操作
Range("a1:c100").Select
Range("a1:c100").Borders.LineStyle = "Solid"
Range("a1:c100").Interior.ColorIndex = 20
Range("a1:c100").Resize (200,6)
Range("a1:c100").Cells.Count
Range("a1:c100").Rows.Count
Range("a1:c100").Columns(2).Delete
'四、域的遍历
'用单元格遍历域
For Each c In [a1:c100]
If IsEmpty(c) Then
'指定的操作
End If
Next
'用行遍历域(当然,列也是一样的道理)
For Each r In [a1:c100].Rows
If IsEmpty(r) Then
'指定的操作
End If
Next
'***********************************************
'Ⅴ、工作表(WorkSheets)
'若我们要对某个工作表(worksheet)进行操作,则需将其从工作表集(Worksheets)中取出来
'***********************************************
'一、确定是哪个工作表
Worksheets (2)
Worksheets ("Sheet2")
ActiveSheet
'二、工作表的常用操作
Worksheets(2).PrintOut
Worksheets("Sheet2").Select
Worksheets("临时表").Delete
Worksheets("保密表").Visible = False
Worksheets("Sheet2").Name = "三月份工资"
Worksheets(2).Protect
Worksheets(2).Copy
Worksheets.Add
'三、工作表集的遍历
'用工作表遍历工作表集
For Each wsh In Worksheets
With wsh
'指定的操作
End With
Next
'***********************************************
'Ⅵ、工作薄(Workbooks)
'若我们要对某个工作薄(workbook)进行操作,则需将其从工作薄集(Workbooks)中取出来
'***********************************************
'一、确定是哪个工作薄
Workbooks (2)
Workbooks ("工资表.xls")
Activebook
'二、工作薄的常用操作
Workbooks.Add
Workbooks(2).Protect
Workbooks.Open ("C:\temp\工资表.xls")
Workbooks("工资表.xls").Password = "123456"
Workbooks("工资表.xls").Close
Workbooks.Close
'三、工作薄集的遍历
'用工作薄遍历工作薄集
For Each wbk In Workbooks
With wbk
'指定的操作
End With
Next
'***********************************************
'Ⅶ、综述
'以上各对象都是Excel中"可视"的对象,随文档的保存而存于文档之中,我们也可于内存之中临时定义这些对象,文档关闭则消失。这种做法在有些场合很有用
'***********************************************
Dim rng As Range
Dim wsh As Worksheet
Dim wsb As Workbook
'VBA编程之二:VBA自身之对象(待续)
'Ⅰ、变量
'Ⅱ、数组
'Ⅲ、函数
'Ⅳ、集合
'Ⅴ、字典
'Ⅵ、窗体及控件
'Ⅶ、HTTP
'Ⅷ、类
[ 本帖最后由 hhh5460 于 2011-7-6 03:38 编辑 ] |
|