ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2735|回复: 4

[原创] VBA编程之一:Excel的可视对象

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-6-18 23:17 | 显示全部楼层 |阅读模式
[广告] 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 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-6-19 03:20 | 显示全部楼层
期待你的第二章。。。
继续努力。

TA的精华主题

TA的得分主题

发表于 2012-9-2 20:52 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-9-3 23:05 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-9-9 20:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
感谢楼主,期待第二部份
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-5 16:49 , Processed in 0.029133 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表