VAB学习之我见.docx

上传人:b****6 文档编号:3305919 上传时间:2022-11-21 格式:DOCX 页数:37 大小:67KB
下载 相关 举报
VAB学习之我见.docx_第1页
第1页 / 共37页
VAB学习之我见.docx_第2页
第2页 / 共37页
VAB学习之我见.docx_第3页
第3页 / 共37页
VAB学习之我见.docx_第4页
第4页 / 共37页
VAB学习之我见.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

VAB学习之我见.docx

《VAB学习之我见.docx》由会员分享,可在线阅读,更多相关《VAB学习之我见.docx(37页珍藏版)》请在冰豆网上搜索。

VAB学习之我见.docx

VAB学习之我见

VAB学习之我见

1、单元格附值

a.[A1]=100'在A1单元格输入100。

b.[A2:

A4]=10'在A2:

A4单元格输入10。

c.Range("B1")=200'在B1单元格输入200.

d.Range("C1:

C3")=300'在C1:

C3单元格输入300。

e.Cells(1,4)=400'在D1单元格输入400.

f.Range(Cells(1,5),Cells(5,5))=50'在E1:

E5单元格输入50。

2、读取其他单元格数值

a.Cells(1,4)=Sheet4.Cells(1,4)'把Shee4工作表(只能是原始名字,sheet改名后不可用)单元格D1数据,读到D1单元格。

b.Cells(1,4)=worksheets

(2).Cells(1,4)'把第2个sheet(从左向右数)工作表单元格D1数据,读到D1单元格。

也可以写成Cells(1,4)=sheets

(2).Cells(1,4)

c.Cells(1,4)=Sheet4.Cells(1,4)'把Shee4工作表单元格D1数据,读到D1单元格。

d.Range(Cells(1,5),Cells(5,5))=Sheets("name").Cells(1,1)'读取名字为name工作表单元格A1数据。

e.i=activecell.Row’是把当前单元格的行数,指定给变量i。

j=activecell.Column’是把当前单元格的栏数,指定给变量j。

f.vba中range(cells,cells)插入变量,选择不连续单元格区域的问题

就是我编vba的时候,通过录制发现Range("A1:

B4,D1:

E4").Select可以选取不连续的单元格区域。

但是我实际上单元格区域是不定的,比如A1:

B4中的行4是不定的,我用i=range("A65536").end(xlup).row计算的。

所以当我现在选取这些不连续单元格区域的时候,就有变量了

首先我把4改成i,那么就变成了range("A1:

Bi,D1:

Ei"),当然这句话肯定是错的,于是又改成range(""A1:

B"&i,"D1:

E"&i"),还是错的,又改成range("'A1:

B'&i,'D1:

E'&i"),但变量在""中似乎不能识别。

于是去掉外面的""后就成了range("A1:

B"&i,"D1:

E"&i),这样又成了连续的单元格区域,我实在晕死,不知道怎么办了,我的区域很多,操作的变量不止i一个,而且后面操作的代码一大串。

所以请问高手如何解决插入变量,选择不连续单元格区域的问题啊

最佳答案

你的意思是想在range中插入变量对吧?

你的原来写法是:

range(""A1:

B"&i,"D1:

E"&i")

你把它改成:

Range("a1:

b"&i&",d1:

e"&i&"")看看

你一定要分清这串字符串中的变量和字符

要了解双分号和&的用法

记得要在&和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

Cells(iRow,iCol+1)=""

EndIf

EndSub

   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!

")

Else

Cancel=False

EndIf

EndSub

‘在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

Cells(ActiveCell.Row,ActiveCell.Column+1)="良"

CaseElse

Cells(ActiveCell.Row,ActiveCell.Column+1)="优"

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

Sheet.Name=Base&Suffix

Loop

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"MyFile"

ExitSub

KillFile_Err:

myCheck=MsgBox("MyFile文件正在使用,是否要删除?

",vbYesNo)

IfmyCheck=vbYesThen

Close#1

Kill"MyFile"

EndIf

EndSub

12、数值调节钮和滚动条控件

从“视图”菜单中选“工具栏”命令,单击“控件工具箱”。

单击“控件工具箱”中的“数值调节钮”控件,然后在周期单元格的右侧拖拽出一个大小合适的“数值调节钮”。

单击“控件工具箱”上的“属性”按钮,在出现的属性窗口中设置Max属性值为30,Min属性值为5,LinkCell属性值为C4(它使得单击“数值调节钮”时,C4单元格的内容会相应变动),SmallChange属性值为5(它使得每单击“数值调节钮”一次,C4单元个的值增加或减少5)。

如果数值增减幅度很小,再使用数值调节钮不太方便。

故使用滚动条控件。

同样可以设置Max、Min、SmallChange的属性值。

如果在C4单元格输入一个数,将清除单元格中的公式,导致相应的滚动条失效。

如果简单地将将工作表保护起来,虽然会避免用户输入无效值,但工作表被保护起来的同时,连ActiveX控件也不能改变相应单元格的值了。

现采用另一种方法,既可以保护工作表,又能用VisualBasic程序改变单元格的值,这就是用事件控制程序。

首先,把与控件相连的单元格清除,即不用控件往单元格内填值,转而用事件控制程序往单元格内填写值。

进入“设计模式”。

选定第一个滚动条,将其的LinkCell属性清空。

再单击“查看代码”按钮,在名为PrivateSubScrollBar1_Change()的事件控制程序中,添加下述语句:

Range("C3").Value=ScrollBar1.Value/10000

类似地清除“数字调节钮”和第二个滚动条的LinkCell属性,在ScrollBar2_Change()事件过程中添加语句:

Range("C5").Value=ScrollBar2.Value

在SpinButton1_Change()事件过程中添加语句:

Range("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("Creat文件")

'Addsubmenuandsubmenuitems

.MenuItems.AddCaption:

="&打开文件",OnAction:

="Userform1show"

'需要在模块中添加相应的宏subuserform1show()

EndWith

EndSub

14、选择类

选择带有数的连续区域

Rows("3:

3").Select

Range(Selection,Selection.End(xlDown)).Select

选择第三行向下所有的连续带数值的行。

如何选择当前工作表中的单元格?

例如,可以使用下面的代码选择当前工作表中的单元格D5:

ActiveSheet.Cells(5,4).Select或:

ActiveSheet.Range("D5").Select

如何选择同一工作簿中其它工作表上的单元格?

例如,要选择同一工作簿中另一工作表上的单元格E6,可以使用下面的代码:

Application.GotoActiveWorkbook.Sheets("Sheet2").Cells(6,5)

或:

Application.Goto(ActiveWorkbook.Sheets("Sheet2").Range("E6"))

也可以先激活该工作表,然后再选择:

Sheets("Sheet2").Activate

ActiveSheet.Cells(6,5).Select

如何选择不同工作簿中的单元格?

例如,要选择另一工作簿中的一个工作表上的单元格F7,可以使用下面的代码:

Application.GotoWorkbooks("BOOK2").Sheets("Sheet1").Cells(7,6)

或:

Application.GotoWorkbooks("BOOK2").Sheets("Sheet1").Range("F7")

也可以先激活该工作簿中的工作表,然后再选择:

Workbooks("BOOK2.XLS").Sheets("Sheet1").Activate

ActiveSheet.Cells(7,6).Select

如何选择当前工作表中的单元格区域?

例如,要选择当前工作表中的单元格区域C2:

D10,可以使用下面的代码:

ActiveSheet.Range(Cells(2,3),Cells(10,4)).Select

或:

ActiveSheet.Range("C2:

D10").Select

或:

ActiveSheet.Range("C2","D10").Select

如何选择同一工作簿中另一工作表上的单元格区域?

例如,要选择同一工作簿中另一工作表上的单元格区域D3:

E11,可以使用下面的代码:

Application.GotoActiveWorkbook.Sheets("Sheet3").Range("D3:

E11")

或:

Application.GotoActiveWorkbook.Sheets("Sheet3").Range("D3","E11")

也可以先激活该工作表,然后再选择:

Sheets("Sheet3").Activate

ActiveSheet.Range(Cells(3,4),Cells(11,5)).Select

如何选择不同工作簿中工作表上的单元格区域?

例如,要选择另一工作簿中某工作表上的单元格区域E4:

F12,可以使用下面的代码:

Application.GotoWorkbooks("BOOK2").Sheets("Sheet1").Range("E4:

F12")

或:

Application.GotoWorkbooks("BOOK2").Sheets("Sheet1").Range("E4","F12")

也可以先激活该工作表,然后再选择:

Workbooks("BOOK2").Sheets("Sheet1").Activate

ActiveSheet.Range(Cells(4,5),Cells(12,6)).Select

如何在当前工作表中选择命名区域?

例如,要选择当前工作表中名为“Test”的区域,可以使用下面的代码:

Range("Test").Select

或:

Application.Goto"Test"

如何选择同一工作簿中另一工作表上的命名区域?

例如,选择同一工作簿中另一工作表上名为“Test”的区域,可使用下面的代码:

Application.GotoSheets("Sheet1").Range("Test")

也可以先激活工作表,再选择:

Sheets("Sheet1").Activate

Range("Test").Select

如何选择与当前单元格相关的单元格?

例如,要选择距当前单元格下面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

或:

ActiveSheet.Range("C7").Offset(5,4).Select

如何选择一个指定的区域并扩展区域的大小?

例如,要选择当前工作表中名为“Database”区域,然后将该区域向下扩展5行,可以使用下面的代码:

Range("Database").Select

Selection.Resize(Selection.Rows.Count+5,Selection.Columns.Count).Select

如何选择一个指定的区域,再偏离,然后扩展区域的大小?

例如,选择名为“Database”区域下方4行右侧3列的一个区域,然后扩展2行和1列,可以使用下面的代码:

Range("Database").Select

Selection.Offset(4,3).Resize(Selection.Rows.Count+2,Selection.Columns.Count+1).Select

如何选择两个或多个指定区域?

例如,为了同时选择名为“Test”和“Sample”的两个区域,可以使用下面的代码:

Application.Union(Range("Test"),Range("Sample")).Select

注意,这两个区域须在同一工作表中,如下面的代码:

Sety=Application.Union(Range("Sheet1!

A1:

B2"),Range("Sheet1!

C3:

D4"))

但Union方法不能处理不同工作表中的区域,可下面的代码:

Sety=Application.Union(Range("Sheet1!

A1:

B2"),Range("Sheet2!

C3:

D4"))

将会出错。

如何选择两个或多个指定区域的交叉区域?

例如,要选择名为“Test”和“Sample”的两个区域的交叉区域,可以使用下面的代码:

Application.Intersect(Range("Test"),Range("Sample")).Select

注意,两个区域必须在同一工作表中。

下面的示例使用了如下图所示的工作表。

 

如何选择连续数据列中的最后一个单元格?

例如,要选择一个连续列中的最后一个单元格,可以使用下面的代码:

ActiveSheet.Range("a1").End(xlDown).Select

该代码使用在上面的工作表中,单元格A4被选择。

如何选择连续数据列底部的空单元格?

例如,要选择连续单元格区域下面的单元格,可以使用下面的代码:

ActiveSheet.Range("a1").End(xlDown).Offset(1,0).Select

该代码使用在上面的工作表中,单元格A5被选择。

如何选择某列中连续数据单元格区域?

例如,要选择一列中的连续数据单元格区域,可以使用下面的代码:

ActiveSheet.Range("a1",ActiveSheet.Range("a1").End(xlDown)).Select

或:

ActiveSheet.Range("a1:

"&ActiveSheet.Range("a1").End(xlDown).Address).Select

该代码使用在上面的工作表中,单元格区域A1:

A4将被选择

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1