ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: zhoujibin1

[原创]Excel VBA 快速上手之宝典

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-7-22 14:11 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:开发帮助和教程

第二节
   
工作表操作

在文件操作一节已经讲了Excel工作簿文件的打开、新建、保存和关闭了,这里再讲文件下的表格操作。

 1) 新建与删除

新建工作表、图表或宏表。新建的工作表将成为活动工作表。

Sheets.Add (Before, After, Count, Type)  说明:

Before   Variant 类型,可选。指定工作表对象,新建的工作表将置于此工作表之前。

After   Variant 类型,可选。指定工作表对象,新建的工作表将置于此工作表之后。

Count   Variant 类型,可选。要新建的工作表的数目。默认值为 1

Type   Variant 类型,可选。指定工作表类型。可为以下 XlSheetType 常量之一:xlWorksheetxlChartxlExcel4MacroSheet xlExcel4IntlMacroSheet。默认值为 xlWorksheet

如果 Before After 两者均省略,则新建的工作表将插入到活动工作表之前。

示例:Sheets.Add after:=Sheets(Sheets.Count)  该语句可以在最后一个工作表后增加一个新表

删除工作表

Sheets(“工作表名”).Delete

示例:在工作表末新建一个和删除倒数第二个表。

Sub MySht()

    Application.DisplayAlerts = False   '关闭删除确认对话框

    Sheets.Add after:=Sheets(Sheets.Count)

    Sheets(Sheets.Count - 1).Delete

    Application.DisplayAlerts = True    '开启确认对话框

End Sub 

2) 隐藏与显示

使用工作表的visible属性来设置工作表是否隐藏或显示

隐藏
   Sheets ("sheet2").Visible = False

显示
     Sheets ("sheet2").Visible =True

3)保护与撤销

保护工作表使其不至被修改。

Sheets(“工作表名”).Protect (Password)
   

撤销工作表保护使其被修改。

Sheets(“工作表名”).Unprotect (Password)

Password   Variant 类型,可选。为一个字符串,该字符串为工作表或工作簿指定区分大小写的密码。如果省略本参数,不用密码就可以取消对该工作表或工作簿的保护。否则,必须指定密码,通过密码来取消对该工作表或工作簿的保护。

示例:Sheets(“sheet1”).Protect “123456”  Sheets(“sheet1”).Unprotect “123456”

如果要对工作进行详细保护设置,可参考Excel VBA参考,这里仅讲简单的参数设置。
[此贴子已经被作者于2006-7-22 14:13:04编辑过]

TA的精华主题

TA的得分主题

发表于 2006-7-22 15:22 | 显示全部楼层

又等到了,收藏学习,继续等待...

辛苦辛苦:

[em26][em26][em26][em26][em26][em24][em24][em23][em23][em23][em23]

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-7-22 15:58 | 显示全部楼层

                                      第三节 单元格和区域操作

Excel数据的计算归根到底还是对表的单元进行的,所以单元格和区域操作非常重要的,这一节就详细介绍这方面的内容。

一、如何引用单元格和区域
1)用Range属性引用单元格和单元格区域
使用 Range 属性来引用 A1 引用样式中的单元格或单元格区域及进行属性更改和赋值。如例句:
Sheets("Sheet1").Range("A1:D5").Font.Bold = True
Sheets("Sheet1").Range("A1:D5").Value = 10000
Range 对象既可表单个单元格,也可表单元格区域。下面说明Range 对象最常用方法。

引用                   含义
Range("A1")            单元格 A1
Range("A1:B5")         从单元格 A1 到单元格 B5 的区域
Range("C5:D9,G9:H16")  多块选定区域
Range("A:A")           A 列
Range("1:1")            第一行
Range("1:5")            从第一行到第五行的区域
Range("1:1,3:3,8:8")      第 1、3 和 8 行
Range("A:C")           从 A 列到 C 列的区域
Range("A:A,C:C,F:F")    A 、C 和 F 列
Range("单元格区域名称")   命名的单元格区域

2)用Cells属性引用单元格
可用 Cells 属性通过行列编号来引用单个单元格。下例中Cells(6,1) 返回 Sheet1 上的单元格 A6,然后将 Value 属性设置为 10。如:Worksheets("Sheet1").Cells(6, 1).Value = 10
因为可用变量替代行列编号,所以 Cells 属性非常适合单元格区域中循环且速度很快。如下例所示:
Sub CC ()
    Dim Counter As Integer
    For Counter = 1 To 20
        Worksheets("Sheet1").Cells(Counter, 3).Value = Counter
    Next Counter
End Sub

3)用Rows或Columns属性引用行列
可用 Rows 属性或 Columns 属性来处理整行或整列。下例中,用 Rows(1) 返回 Sheet1 上的第一行,然后将单元格区域的 Font 对象的 Bold 属性设置为 True。如:Worksheets("Sheet1").Rows(1).Font.Bold = True

下表举例说明了使用 Rows 和 Columns 属性的一些行和列的引用。
引用              含义
Rows(1)           第一行
Rows             工作表上所有的行
Columns(1)        第一列
Columns("A")      第一列
Columns          工作表上所有的列

4)用Union方法合并区域后引用
若要同时处理若干行或列及区域,请创建一个对象变量并使用 Union 方法,将对多个区域组合起来。下例将活动工作簿中第一张工作表上的第一行、第三行和第五行的字体设置为加粗。
Sub SeveralRows()
    Worksheets("Sheet1").Activate
    Dim myUnion As Range
    Set myUnion = Union(Rows(1), Rows(3), Rows(5))
    myUnion.Font.Bold = True
End Sub

5)用括号[ ]引用单元格和区域
可用方括号将 A1 引用样式或命名区域括起来,作为 Range 属性的快捷方式。这样就不必键入单词“Range”或使用引号,如下例所示:Worksheets("Sheet1").[A1:B5].ClearContents
[MyRange].Value = 30

6) 用Offset相对其他单元格来引用单元格
处理相对于另一个单元格的某一单元格的常用方法是使用 Offset 属性。下例中,将位于活动工作表上活动单元格下一行和右边三列的单元格的内容设置为双下划线格式。
如:ActiveCell.Offset(1, 3).Font.Underline = xlDouble

7) 用Selection 属性引用活动区域
Select 方法激活工作表和工作表上的对象;而 Selection 属性返回代表活动工作簿中活动工作表上的当前选定区域的对象。在成功使用 Selection 属性之前,必须先激活工作簿,并激活或选定工作表,然后用 Select 方法选定单元格区域(或其他对象)。

宏录制器经常创建使用 Select 方法和 Selection 属性的宏。下述 Sub 过程是用宏录制器创建的,该过程演示了 Select 方法和 Selection 属性在一起使用的方法。

Sub Macro1()
    Sheets("Sheet1").Select
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "Name"
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "Address"
    Range("A1:B1").Select
    Selection.Font.Bold = True
End Sub

7)区域中循环引用单元格方法
使用VBA时,经常需要对某一单元格区域内的每个单元格运行同一段语句。为达到这一目的,可组合循环语句和一个或多个方法来标识每个单元格,一次针对一个单元格,并执行该操作。

7.1 For...Next 循环语句与 Cells 属性配合使用
使用 Cells 属性时,可用循环计数器(或其他变量或表达式)来替代单元格索引编号。下例中变量 counter 代替行号。此过程在单元格区域 C1:C20 中循环,将绝对值小于0.01的单元都置为 0。

Sub RoundToZero1()
    For Counter = 1 To 20
       If Abs(Cells(counter,3).value) < 0.01 Then Cells(counter,3) = 0
    Next
End Sub

7.2 For Each...Next 循环语句和Range 属性配合使用
示例如下:
Sub RoundToZero2()
    For Each c In Worksheets("Sheet1").Range("A1:D10").Cells
        If Abs(c.Value) < 0.01 Then c.Value = 0
    Next
End Sub

二、如何处理单元格和区域
1 处理三维区域
如果要处理若干工作表上相同位置的单元格区域,可用 Array 函数选定两张或多张工作表。下例设置三维单元格区域的边框格式。
Sub FormatSheets()
    Sheets (Array("Sheet2", "Sheet3", "Sheet5")).Select
    Range("A1:H1").Select
    Selection.Borders(xlBottom).LineStyle = xlDouble
End Sub

2 处理活动单元格
ActiveCell 属性返回代表活动单元格的 Range 对象。可对活动单元格应用 Range 对象的任何属性和方法,如下例所示。

Sub SetValue()
    Worksheets("Sheet1").Activate
    ActiveCell.Value = 35
End Sub
注意   只有活动单元格所在的工作表处于活动状态时,才能处理该活动单元格。

3 选择活动单元格周围的单元格
CurrentRegion 属性返回由空白行和空白列所包围的单元格区域。下例中,选定区域扩充到与活动单元格相邻的包含数据的单元格中,然后用“货币”样式设置该区域的格式。
Sub Region()
    Worksheets("Sheet1").Activate
    ActiveCell.CurrentRegion.Select
    Selection.Style = "Currency"
End Sub

4 单元格和区域赋值
用赋值号 = 赋值,如给A1赋值为10:Range(A1).Value=10 (由于Value是默认属性,所以可以直接省略)
区域赋值,如Range(A1:D5)=10

5 单元格和区域赋予公式进行计算
把公式字符串赋予给单元格或区域的Formula属性,如下例: 注意一点是公式字符串中要有开头的等号=。
Sub EnterFormula()
    Worksheets("Sheet1").Range("D6").Formula = "=SUM(D2:D5)"
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-7-22 16:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

三、单元格和区域的定位

1 使用单元格的End属性来定位边界
如:
数据区域的最下行的确定: Sheets(1).cells(65536,1).End(xlup).Row
数据区域的最右列的确定: Sheets(1).cells(1,1).End(xltoright).Column
选定包含单元格“B4”的区域在 B 列中顶端的单元格:    Range("B4").End(xlUp).Select
选定包含单元格“B4”的区域在第 4 行中最右端的单元格: Range("B4").End(xlToRight).Select
将选定区域从单元格“B4”延伸至第四行最后一个包含数据的单元格:
Range("B4", Range("B4").End (xlToRight)).Select

2 善用已用区域UsedRange对象来获得区域范围
如:需要获得先前表格已用区域的最右下角单元格位置
Sub Loc ()
  temp = [a1] :[a1] = 1                      ‘使用A1单元格,保证已用区域从A1开始 
  irow = ActiveSheet.UsedRange.Rows.Count     ‘右下单元格行
  icol = ActiveSheet.UsedRange.Columns.Count  ‘右下单元格列
  [a1] = temp                                 ‘还原A1的值
  Cells(irow, icol).Select                    ‘选中右下角单元格
End sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-7-22 17:13 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

四、单元格和区域的保护与锁定

1)工作表选择改变事件过程中保护,如下:不许可用户选择及改动保护单元格区域,示例中保护B1:B10

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim rng As Range

    Set rng = Range("b1:b10")

    If Intersect(Target, rng) Is Nothing Then Exit Sub    选择单元不在保护区内就退出

    MsgBox "不可以选取单元格!" & Target.Address  选择单元在保护区内就改变选择

    ActiveSheet.Range("a1").Select

End Sub

 

2)通过行列的隐藏来保护

本示例隐藏工作表“Sheet1”的第5行和C

Sub SetHide()

With Worksheets("Sheet1")              使用With …End With语句块,提高效率

.Unprotect                                      撤销保护,如果原先未保护则不需该句

.Rows(5).Hidden = True                  隐藏第5

.Columns("C").Hidden = True           隐藏C

.Protect                                          启动保护,如果原先未保护则不需该句

End with

End Sub

 

3)通过锁定区域来保护,可限定未锁定区域内输入

Sub SetLock()

    ActiveSheet.Unprotect

    Cells.Locked = True                          锁定全表

   Range("a1:b10").Locked =false        解锁区域A1:B10,限定该区域为可输入区

    ActiveSheet.Protect

End Sub

[此贴子已经被作者于2006-7-22 17:19:14编辑过]

TA的精华主题

TA的得分主题

发表于 2006-7-22 17:24 | 显示全部楼层

今天看了一下午,收获挺大的,感谢楼主的大度和辛勤劳动。

 

[em24][em24][em25][em25][em26][em26][em27][em27][em17]

TA的精华主题

TA的得分主题

发表于 2006-7-22 21:10 | 显示全部楼层
太好了,言简意赅,很有启发性,对大家学习和研究都有一定的指导意义,谢谢楼主,您辛苦了。

TA的精华主题

TA的得分主题

发表于 2006-7-22 21:15 | 显示全部楼层

致楼主:

    太感谢你无私的写出这些给我们共享,这也是我看到的最容易看懂的有关VBA的系统的文章。向您辛勤的劳动表示最崇高的敬意!

     但同时也要向你提一个小小的建议:能否多一些示例。从我是VBA初学者的角度来看,虽然楼主写的相当通俗易懂,但缺乏相应的示例。我们即使看懂了,却不知道怎么使用或用在什么地方。这个建议希望楼主考虑考虑,我们希望楼主在完成该书后,该书能够成为VBA初学者的最经典、最实用的入门书籍之一。让更多的VBA爱好者受益。

     

[em17][em23][em24]
[此贴子已经被作者于2006-7-22 21:18:24编辑过]

TA的精华主题

TA的得分主题

发表于 2006-7-22 21:38 | 显示全部楼层

[em23][em23][em23]

谢谢!支持楼主“事业”

TA的精华主题

TA的得分主题

发表于 2006-7-22 21:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

通俗易懂,的确是宝典,谢谢楼主的大公无私,楼主辛苦了.

[em24][em26][em23]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-19 07:44 , Processed in 0.036302 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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