菜鸟也懂VBA-excle2007VBA入门教程(8)

2019-09-02 00:46

Excel 2007 VBA 教程

End '退出 End Sub

Private Sub RefEdit1_Change()

TextBox1.Text = RefEdit1.Value '当RefEdit1.Value选完后,直接把它的值赋给文本框1,其实这个代码没有作用,便于显示出来,看选区 End Sub

Private Sub UserForm_Initialize() '加载窗体时 Dim i As Byte '定义变量

Me.OptionButton1.Value = 1 '加载窗体时把第一个单选按钮设置为默认的 For i = 1 To 5

Me.ComboBox1.AddItem i '给组合框赋值1,2,3,4,5 Next

Me.ComboBox1.ListIndex = 0 '让1显示为组合框的默认值 End Sub Sub test()

Myf1.Show 1 '显示窗体 End Sub

最后的效果图如图 22

图 22

第十一讲 窗体与控件实例——开发隐藏工作表工具

这一讲,相对前面来说,有一定的难度了,但是大家也要明白,你总有一天要步入这个程序开发中,如果你没有达到这一步,也就是总是VBA的门外汉,所以大家要坚持,不要退缩,其实那时学的时候也和你们一样,也放弃过,就是现在我还是有太多太多的不明白,看到一些高手写的程序,只要你天天学习,不放弃,那么你不懂就少一些,呵呵。说了一大堆话,老师也是为大家打打气,坚持 ,加油。 开发批量隐藏工作表工具的方法与步骤

一. 插入窗体与添加控件

二. 编写代码(因为代码后面都有解释,我这里就不多说了)

1. 普通模块里的代码

Sub test()

隐藏工具.Show 1 '打开隐藏工作表工具 End Sub

Sub auto_open() '一打开工作簿就执行下面的代码 如图24所示

MsgBox \记得打开---隐藏工作表工具的快捷是Ctrl+D\佛山小老鼠提醒你,不要忘记了!\温馨提示\ 'Chr(10)是换行

第 33 页 共 52 页

Excel 2007 VBA 教程

Call 打开快捷键 '呼叫“打开快捷”过程 ,然后运行它 End Sub

Sub 打开快捷键()

Application.OnKey \记得一定要小写字母,且不要加大括号,快捷键Ctrl+D执行test过程 End Sub

Sub 关闭快捷键()

Application.OnKey \记得一定要小写字母,且不要加大括号,把关联的过程名为空就删除了

'为了让其自动关闭,用了工作簿关闭事件,当然打开快捷键也就可以放在工作簿打开事件里 End Sub

2. 窗体模块里代码

Private Sub CommandButton1_Click() '执行隐藏

Dim i As Integer, k As Integer, s As Integer '定义变量

For k = 0 To Me.ListBox1.ListCount - 1 '遍历列表框中的所有成员

If Me.ListBox1.Selected(k) = True Then '判断列表框中那一行是选中的,如果有,那么 s = s + 1 '累加S 目的为了在后面判断是不是所有的工作表是否被选中 End If Next k

If Sheets.Count = s Then MsgBox \不能删除所有工作表,只少要留一张可见工作表\ '如果所有的工作表被选中,因为隐藏至少要保留一张,那么就结束程序

If Me.OptionButton1.Value = True Then '如果单选按钮1被选中,那么就要执行一般隐藏 For i = 0 To Me.ListBox1.ListCount - 1 '遍历列表框所有成员 If Me.ListBox1.Selected(i) = True Then '如果被选中

Worksheets(Me.ListBox1.List(i)).Visible = 0 '那么相对应的工作表就要一般隐藏,Me.ListBox1.List(i)得到是工作表名 End If ' Next i '

Else '否则就执行下面的代码

For i = 0 To Me.ListBox1.ListCount - 1 ''遍历列表框所有成员 If Me.ListBox1.Selected(i) = True Then '如果被选中'

Worksheets(Me.ListBox1.List(i)).Visible = xlSheetVeryHidden ''那么相对应的工作表就要深度隐藏 End If ' Next i ' End If End Sub

Private Sub CommandButton2_Click() '显示 Dim i As Integer '定义变量

For i = 0 To Me.ListBox1.ListCount - 1 '遍历列表框所有成员 If Me.ListBox1.Selected(i) = True Then ''如果被选中'

Worksheets(Me.ListBox1.List(i)).Visible = 1 '那么相对应的工作表就要显示 End If ' Next i ' End Sub

Private Sub CommandButton3_Click() '全选

第 34 页 共 52 页

Excel 2007 VBA 教程

Dim i As Integer '定义变量

For i = 0 To Me.ListBox1.ListCount - 1 '遍历列表框里所有成员

Me.ListBox1.Selected(i) = True '把一个一个依次选中,Selected(i) = True是表示选中,反之为False是不选中 Next i End Sub

Private Sub CommandButton4_Click() '反选 Dim i As Integer '定义变量

For i = 0 To Me.ListBox1.ListCount - 1 '遍历列表框里所有成员 If Me.ListBox1.Selected(i) = True Then '如果被选中'' Me.ListBox1.Selected(i) = False '取消选中 Else '否则,如果没有被选中的,那么

Me.ListBox1.Selected(i) = True '被选中 End If Next i ' End Sub

Private Sub UserForm_Initialize() '窗体加载时

Dim i As Integer, Mycount As Integer '定义变量

Mycount = Sheets.Count '统计工作簿里有多少个工作表,且把值赋给Mycount For i = 1 To Mycount '遍历所有工作表

Me.ListBox1.AddItem Sheets(i).Name '把工作表名一一加载到列表框中 Next i '

Me.ListBox1.MultiSelect = 1 'MultiSelect = 2 表示可以借助控件键Shift Ctrl进行多选, 'MultiSelect = 0 表示只能选选择一行。'MultiSelect = 1也能选多行,但是不能配合着Ctrl和Shift键进行多选

Me.OptionButton1.Value = True '使单元按钮1为默认值

Me.ListBox1.Selected(0) = True '使列表框中的第一个被选中 End Sub

三. 批量隐藏工作表的效果图如23

图 23 图 24

第 35 页 共 52 页

Excel 2007 VBA 教程

第十二讲自定义函数

一. 为什么要自定义函数(Function过程)

一说到函数,大家都说会Excel博大精深,确是,可以给我们工作上带来许多方便,Excel本身的函数有几百个了,那我们为什么还要自定义函数呢?

1. 简化求解过程,用其它公式做出来公式长且复杂 2. 弥补Excel内置函数的不足 二. 创建自定义函数过程

1. 方法一 Alt+F11——>>插入模块——>>插入过程——>>类型——>>函数。结果如图图 25

图 25

2. 方法二 手动输入

Function 函数名() …… End Function

三. 自定义函数实例

1. 自定义提取活动工作表名的函数

Function 提取活动工作表名() '函数名是\提取活动工作表名\ Application.Volatile '声明为易失性函数

提取活动工作表名 = ActiveSheet.Name '把活动工作表赋值给函数名\提取活动工作表名\End Function

2. 自定义提取工作表名函数

Public Function 提取工作表名(i As Integer) '提取工作表名为中文函数名 Application.Volatile '声明为易失性函数

If i <= Sheets.Count Then '条件,不能让i的值超过工作表数目,如果超过就显示为空

提取工作表名 = Sheets(i).Name '按位置顺序把工作表名依次赋给函数名“提取工作表名” Else '

提取工作表名 = \ End If End Function

3. 自定义按颜色求和函数

Public Function SumColor(MyRg As Range, Col As Range) '定义函数名为SumColor Dim rg As Range, S As Long '定义相关的变量

第 36 页 共 52 页

Excel 2007 VBA 教程

Application.Volatile '声明为易失性函数

ColIndex = Col.Interior.ColorIndex '提取单元格Col的底纹颜色值赋值给ColIndex

For Each rg In Application.Intersect(ActiveSheet.UsedRange, MyRg) '遍历参数MyRg里的有数据区域

If rg.Interior.ColorIndex = ColIndex Then '如果MyRg区域里的单元格有底纹颜色和CoIdndex相同的,那么

S = S + rg.Value '单元格Rg的值到累加到S上 End If ' Next rg '

SumColor = S '最后把S的值赋给函数SumColor End Function

四. VBA中调用工作表函数

1. 在VBA中调用工作表函数需要在工作表函数前加上WorksheetFunction属性。应用于Application对象

的WorksheetFunction属性返回WorksheetFunction对象,作为VBA中调用工作表函数的容器,在实际应用中可省略Application对象识别符

2. 完整的表达式:Application.WorksheetFunction.工作表函数名 3. 要注意的是,函数参数一定要用VBA里引用方式 4. 实例 标示重复值

Private Sub CommandButton1_Click()

Dim Myarray As Range, mgr As Range, i As Integer '定义相关的变量

If RefEdit1.Value = \请选择你要标示的区域\佛山小老鼠提醒\

'如果控件RefEdit1没有选择区域,那么就退出,且提示,注意一行简写形式,你记住就可以了 'vbCritical你也可以改为数值16,显示警告的图标

Set Myarray = Range(RefEdit1) '把控件的选区赋给Myarray,因为是对象,所以用了Set,另外把控件RefEdit1选区转为单元格,一定要在前面加Range

Myarray.ClearFormats '清除选区原有颜色,目的是区分为了再标示,如果不清除如果原有字体也有红色,那样就和结果混了

For Each mgr In Application.Intersect(ActiveSheet.UsedRange, Myarray) '遍历选区有数据的单元格

'Intersect(ActiveSheet.UsedRange, Myarray)这一句,我不再多解释了,目的了防止整行整列选中,导致程序被卡死。

If Application.WorksheetFunction.CountIf(Myarray, mgr) > 1 Then '这一句就是举个例子的目的

'我们可以引用工作表里的内置函数,不过要注意的用法,单元格,单元格区域的引用方式。如果有重复

mgr.Font.ColorIndex = 3 '字体的颜色为红色 End If Next mgr '

Unload Me '关闭窗体 End Sub

Private Sub CommandButton2_Click() Unload Me ''关闭窗体 End Sub

第 37 页 共 52 页


菜鸟也懂VBA-excle2007VBA入门教程(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:经济学发展简史

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: