VAB学习之我见Word文件下载.docx
- 文档编号:16211456
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:37
- 大小:67KB
VAB学习之我见Word文件下载.docx
《VAB学习之我见Word文件下载.docx》由会员分享,可在线阅读,更多相关《VAB学习之我见Word文件下载.docx(37页珍藏版)》请在冰豆网上搜索。
就是我编vba的时候,通过录制发现Range("
A1:
B4,D1:
E4"
).Select可以选取不连续的单元格区域。
但是我实际上单元格区域是不定的,比如A1:
B4中的行4是不定的,我用i=range("
A65536"
).end(xlup).row计算的。
所以当我现在选取这些不连续单元格区域的时候,就有变量了
首先我把4改成i,那么就变成了range("
Bi,D1:
Ei"
),当然这句话肯定是错的,于是又改成range("
"
B"
&
i,"
D1:
E"
i"
),还是错的,又改成range("
'
B'
i,'
E'
),但变量在"
中似乎不能识别。
于是去掉外面的"
后就成了range("
i),这样又成了连续的单元格区域,我实在晕死,不知道怎么办了,我的区域很多,操作的变量不止i一个,而且后面操作的代码一大串。
所以请问高手如何解决插入变量,选择不连续单元格区域的问题啊
最佳答案
你的意思是想在range中插入变量对吧?
你的原来写法是:
range("
)
你把它改成:
Range("
a1:
b"
&
i&
"
d1:
e"
)看看
你一定要分清这串字符串中的变量和字符
要了解双分号和&
的用法
记得要在&
和i中间加入空格
3、Worksheet_SelectionChange
a.PrivateSubWorksheet_SelectionChange(ByValTargetAsRange)Target=100EndSub
‘利用Worksheet_SelectionChange输入数据,Target指的是你鼠标所选的单元格,Worksheet_SelectionChange()事件的参数。
可以是一个也可以是好几个单元格。
Range是Excel特有的变量形态,叫范围。
TargetAsRang是把Target这个参数设定为Range变量形态。
Target=100是把你点选的单元格输入数字100。
b.PrivateSubWorksheet_SelectionChange(ByValTargetAsRange)IfTarget.Row>
=2AndTarget.Column=2ThenTarget=100EndIfEndSub
‘Target.Row>
=2,指的是鼠标选定的单元格的行数大于或等于2。
Target.Column=2,指的是鼠标选定的单元格的列数等于2。
IfTarget.Row>
=2AndTarget.Column=2Then指的是(Target.Row>
=2)为True及(Target.Column=2)为True时,才执行B栏第二行及以下行用鼠标被点选时,才会被输入100,其它单元格则不被输入数据。
等同方法:
利用CommandButton1_Click()
PrivateSubCommandButton1_Click()
IfActiveCell.Row>
=2AndActiveCell.Column>
=3Then
ActiveCell=100
EndIf
EndSub
4、Worksheet_Change()
PrivateSubWorksheet_Change(ByValTargetAsRange)
DimiRow,iColAsInteger
iRow=Target.Row
iCol=Target.Column
IfiRow>
=2AndiCol=2AndTarget<
>
Then
Application.EnableEvents=False
Cells(iRow,iCol+1)=Cells(iRow,iCol)*2
Application.EnableEvents=True
ElseIfiRow>
=2AndiCol=2AndTarget="
Then
Cells(iRow,iCol+1)="
Else
Application.EnableEvents=False与Application.EnableEvents=True,这是个成双的程序,当你用了前者记得在执行其他程序後要写上後面的程序。
它的目的在抑制事件连锁执行。
简单的说就是,在B字段所触发的事件,不愿在其它单元格再触发另一个Worksheet_Change()事件。
5、Worksheet_Activate()
6、Worksheet_Calculate()
7、Worksheet_BeforeRightClick()
PrivateSubWorksheet_BeforeRightClick(ByValTargetAsRange,CancelAsBoolean)
IfNotApplication.Intersect(Target,Range("
D8"
))IsNothingThenCancel=True
MsgBox("
TargetisRangeD8andCancelisTrue!
)
Cancel=False
‘在D12按鼠标右键将呈现正常的右键菜单;
在D8按鼠标右键将呈现一个对话框并且屏闭掉右键菜单。
8、Worksheet_FollowHyperlink()
9、Worksheet_BeforeDoubleClick()
10、语句和语法
A、if----then-------
else
endif
B、selectcase
SelectCaseActiveCell.Value
CaseIs<
60
Cells(ActiveCell.Row,ActiveCell.Column+1)="
不及格"
Case60To89.9
良"
CaseElse
优"
EndSelect
C、DoUntil
Loop
11、设置忽略错误
语句1:
OnErrorResumeNext
表示:
若发生错误,则忽略它,跳到下一条语句继续执行。
语句2:
OnErrorGoTo行号(或标号)
若运行有错,则跳到标号指定位置,转去执行错误处理例程。
获取错误信息在宏执行过程中,可以通过专用调试对象Err的属性值来了解是否发生实时错误以及发生了什么样的错误。
若Err.Number值为0,则表明没有产生错误,反之有错误。
下面通过两个例子说明如何使用错误捕获技术。
例1,假设有一学生档案工作簿StudentBook,其中已有若干学生档案工作表Student1、Student2……以及其它一些工作表。
现需要建立一个新的Student学生档案工作表,但又不想删除已有的Student工作表,如同Excel增加新工作表一样,只将工作表名称的后缀加1。
SubMakeNextStudent()
DimSheetAsWorksheet
DimBaseAsString
DimSuffixAsInteger
SetSheet=WorkSheets.Add
Base=“Student”
Suffix=1
OnErrorResumeNext
Sheet.Name=Base&
Suffix
DoUntilErr.number=0
Err.Clear
Suffix=Suffix+1
EndSub
MakeNextStudent宏的执行过程是:
先建立一个新工作表,再试着以Student为基本名、1为后缀构成的名称给新工作表命名。
OnErrorResumeNext语句的作用是:
若已有同名工作表存在,Excel不能给新工作表命名时,VisualBaisc并不终止所执行的程序,而是自动给Err对象的Number属性赋值,设置出错信息代码,执行DoUntil循环。
DoUntil循环首先检查命名是否成功,若不成功,则增加后缀值,再试着重新命名,再检查……直到没有产生错误(即重新命名成功Err.Number=0),才结束循环。
Do语句后面的Err.Clear语句的作用是将出错信息代码重新置为0,让VisualBaisc忘记曾经发生的错误。
例2,下面宏的功能是:
当试图删除打开的文件时,错误处理例程先调用MsgBox函数提示用户文件正在使用,让用户确认是否要删除该文件,再作相应的处理。
SubKillFile()
OnErrorGoToKillFile_Err
Open"
MyFile"
ForOutputas#1
Kill"
ExitSub
KillFile_Err:
myCheck=MsgBox("
MyFile文件正在使用,是否要删除?
,vbYesNo)
IfmyCheck=vbYesThen
Close#1
EndIf
12、数值调节钮和滚动条控件
从“视图”菜单中选“工具栏”命令,单击“控件工具箱”。
单击“控件工具箱”中的“数值调节钮”控件,然后在周期单元格的右侧拖拽出一个大小合适的“数值调节钮”。
单击“控件工具箱”上的“属性”按钮,在出现的属性窗口中设置Max属性值为30,Min属性值为5,LinkCell属性值为C4(它使得单击“数值调节钮”时,C4单元格的内容会相应变动),SmallChange属性值为5(它使得每单击“数值调节钮”一次,C4单元个的值增加或减少5)。
如果数值增减幅度很小,再使用数值调节钮不太方便。
故使用滚动条控件。
同样可以设置Max、Min、SmallChange的属性值。
如果在C4单元格输入一个数,将清除单元格中的公式,导致相应的滚动条失效。
如果简单地将将工作表保护起来,虽然会避免用户输入无效值,但工作表被保护起来的同时,连ActiveX控件也不能改变相应单元格的值了。
现采用另一种方法,既可以保护工作表,又能用VisualBasic程序改变单元格的值,这就是用事件控制程序。
首先,把与控件相连的单元格清除,即不用控件往单元格内填值,转而用事件控制程序往单元格内填写值。
进入“设计模式”。
选定第一个滚动条,将其的LinkCell属性清空。
再单击“查看代码”按钮,在名为PrivateSubScrollBar1_Change()的事件控制程序中,添加下述语句:
).Value=ScrollBar1.Value/10000
类似地清除“数字调节钮”和第二个滚动条的LinkCell属性,在ScrollBar2_Change()事件过程中添加语句:
C5"
).Value=ScrollBar2.Value
在SpinButton1_Change()事件过程中添加语句:
C4"
).Value=SpinButton1.Value
这些事件控制程序使得单元格中的值随着控件的变化而变化。
这时可以保护工作表了。
在“工程”窗口中双击“ThisWorkbook”对象,进入“代码”窗口。
在Workbook_Open()事件控制程序中加入下述语句:
Sheets(“Sheet1”).ProtectUserInterfaceOnly:
=True
Workbook_Open事件过程是工作簿的默认事件,每当工作簿打开时执行。
该语句的UserInterfaceOnly参数使得宏可以改变那些用户和控件不能改变的单元格。
这样用户就不能往工作表中输入内容了,实际上也不必输入,只要用鼠标简单操作哪些控件就可以了。
图形用户界面最大的好处是将可选功能限制于那些有效功能之间,因此减少,甚至杜绝了用户出错的机会。
13、添加新菜单
例子1.
PrivateSubWorkbook_Open()
'
CreatemainmenuontheCommandBar
MenuBars(xlWorksheet).Menus.AddCaption:
="
Creat文件"
WithMenuBars(xlWorksheet).Menus("
Addsubmenuandsubmenuitems
.MenuItems.AddCaption:
打开文件"
OnAction:
Userform1show"
需要在模块中添加相应的宏subuserform1show()
EndWith
14、选择类
选择带有数的连续区域
Rows("
3:
3"
).Select
Range(Selection,Selection.End(xlDown)).Select
选择第三行向下所有的连续带数值的行。
如何选择当前工作表中的单元格?
例如,可以使用下面的代码选择当前工作表中的单元格D5:
ActiveSheet.Cells(5,4).Select或:
ActiveSheet.Range("
D5"
如何选择同一工作簿中其它工作表上的单元格?
例如,要选择同一工作簿中另一工作表上的单元格E6,可以使用下面的代码:
Application.GotoActiveWorkbook.Sheets("
Sheet2"
).Cells(6,5)
或:
Application.Goto(ActiveWorkbook.Sheets("
).Range("
E6"
))
也可以先激活该工作表,然后再选择:
Sheets("
).Activate
ActiveSheet.Cells(6,5).Select
如何选择不同工作簿中的单元格?
例如,要选择另一工作簿中的一个工作表上的单元格F7,可以使用下面的代码:
Application.GotoWorkbooks("
BOOK2"
).Sheets("
Sheet1"
).Cells(7,6)
F7"
也可以先激活该工作簿中的工作表,然后再选择:
Workbooks("
BOOK2.XLS"
ActiveSheet.Cells(7,6).Select
如何选择当前工作表中的单元格区域?
例如,要选择当前工作表中的单元格区域C2:
D10,可以使用下面的代码:
ActiveSheet.Range(Cells(2,3),Cells(10,4)).Select
C2:
D10"
C2"
"
如何选择同一工作簿中另一工作表上的单元格区域?
例如,要选择同一工作簿中另一工作表上的单元格区域D3:
E11,可以使用下面的代码:
Sheet3"
D3:
E11"
D3"
ActiveSheet.Range(Cells(3,4),Cells(11,5)).Select
如何选择不同工作簿中工作表上的单元格区域?
例如,要选择另一工作簿中某工作表上的单元格区域E4:
F12,可以使用下面的代码:
E4:
F12"
BOOK2"
ActiveSheet.Range(Cells(4,5),Cells(12,6)).Select
如何在当前工作表中选择命名区域?
例如,要选择当前工作表中名为“Test”的区域,可以使用下面的代码:
Test"
Application.Goto"
如何选择同一工作簿中另一工作表上的命名区域?
例如,选择同一工作簿中另一工作表上名为“Test”的区域,可使用下面的代码:
Application.GotoSheets("
也可以先激活工作表,再选择:
如何选择与当前单元格相关的单元格?
例如,要选择距当前单元格下面5行左侧4列的单元格,可以使用下面的代码:
ActiveCell.Offset(5,-4).Select
要选择距当前单元格上方2行右侧3列的单元格,可以使用下面的代码:
ActiveCell.Offset(-2,3).Select
注意:
一定要保证当前单元格与所选单元格之间的距离在工作表范围内,否则会出错。
如何选择与另一单元格(不是当前单元格)相关的单元格?
例如,要选择距单元格C7下方5行右侧4列的单元格,可以使用下面的代码:
ActiveSheet.Cells(7,3).Offset(5,4).Select
C7"
).Offset(5,4).Select
如何选择一个指定的区域并扩展区域的大小?
例如,要选择当前工作表中名为“Database”区域,然后将该区域向下扩展5行,可以使用下面的代码:
Database"
Selection.Resize(Selection.Rows.Count+5,Selection.Columns.Count).Select
如何选择一个指定的区域,再偏离,然后扩展区域的大小?
例如,选择名为“Database”区域下方4行右侧3列的一个区域,然后扩展2行和1列,可以使用下面的代码:
Selection.Offset(4,3).Resize(Selection.Rows.Count+2,Selection.Columns.Count+1).Select
如何选择两个或多个指定区域?
例如,为了同时选择名为“Test”和“Sample”的两个区域,可以使用下面的代码:
Application.Union(Range("
),Range("
Sample"
)).Select
注意,这两个区域须在同一工作表中,如下面的代码:
Sety=Application.Union(Range("
Sheet1!
B2"
C3:
D4"
但Union方法不能处理不同工作表中的区域,可下面的代码:
Sheet2!
将会出错。
如何选择两个或多个指定区域的交叉区域?
例如,要选择名为“Test”和“Sample”的两个区域的交叉区域,可以使用下面的代码:
Application.Intersect(Range("
注意,两个区域必须在同一工作表中。
下面的示例使用了如下图所示的工作表。
如何选择连续数据列中的最后一个单元格?
例如,要选择一个连续列中的最后一个单元格,可以使用下面的代码:
a1"
).End(xlDown).Select
该代码使用在上面的工作表中,单元格A4被选择。
如何选择连续数据列底部的空单元格?
例如,要选择连续单元格区域下面的单元格,可以使用下面的代码:
).End(xlDown).Offset(1,0).Select
该代码使用在上面的工作表中,单元格A5被选择。
如何选择某列中连续数据单元格区域?
例如,要选择一列中的连续数据单元格区域,可以使用下面的代码:
ActiveSheet.Range("
).End(xlDown)).Select
ActiveSheet.Range("
).End(xlDown).Address).Select
该代码使用在上面的工作表中,单元格区域A1:
A4将被选择
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VAB 学习 我见
![提示](https://static.bdocx.com/images/bang_tan.gif)