单元格在VBA的表示方法.docx
《单元格在VBA的表示方法.docx》由会员分享,可在线阅读,更多相关《单元格在VBA的表示方法.docx(13页珍藏版)》请在冰豆网上搜索。
![单元格在VBA的表示方法.docx](https://file1.bdocx.com/fileroot1/2023-2/23/6c73b29f-1508-41fb-8328-0e17ab7826a3/6c73b29f-1508-41fb-8328-0e17ab7826a31.gif)
单元格在VBA的表示方法
单元格在VBA的表示方法:
1、Range("单元格地址") 如Range("a1") 即为A1单元格
2、CELLS(行,列) 如CELLS(1,1)也为A1单元格,CELLS(2,1)为A2单元格
工作表在VBA中表示方法:
sheets("工作表名")
每个函数前都要加Application.WorksheetFunction.?
答:
如果是单个调用必须加
如果是多个调用就可以用WITH语句省去后面的
如Sub矩形1_单击()
DimiAsInteger
Fori=1To20
Sheets("sheet1").Cells(i,1)=i
Next
WithApplication.WorksheetFunction
Range("a21").Value=.Sum(Range("a1:
a20")) 注意SUM前面要有个点才行
Range("a22").Value=.Average(Range("a1:
a20"))
EndWith
EndSub
COLUMN是指列,COLUMNS是指列的集合
ROW是表示行,ROWS是行的集合
如果用Sheets("sheet1").columns.select 会选定所有列即整个工作表
SUB语句,需要有个事件触发它,才能执行,就比如一个箱子,只有去搬、推等外力施加与它时,它才会动。
设置个按纽目的就是为了执行SUB语句
Range("A1:
A22").ClearContents该语句是清除内容的语句
Private的中文意思是私有的,PrivateSub中的程序只能在本程序内部运行而不能被其他程序调用,而SUB语句则可以
如:
SUBBB()
ENDSUB
SUBAA()
BB
ENDSUB
Range("B65536").End(xlUp).Row
是指B列最后一个非空单元格,END(XLUP)是向上数第一个非空单元格,为了准备找到最下面的非空单元格,当然要从RANGE("B65536")开始向上找了
MSGBOX有时带()
比如AAA=MSGBOX()
这种情况下可以取到用户点击对话框按纽的返回值,以确定下一步该怎么做
而不带括号只是提示的作用,不能取得返回的值
如MSGBOX......
以下是引用playgirl在2004-10-515:
18:
00的发言:
那为为什么要用K=K+1。
如果向下数第一个非空单元格就是range("b1").end(xldown).row
向左数第一个非空单元格:
range("iv1").end(xlleft).column
向右数第一个非空单元格:
range("a1").end(xlright).column
是这样吗?
谢谢!
向右是End(xltoright) 向左End(xltoleft)
K=K+1是在原来的基础加1
如选取Sheet1第一行有内容单元格区域(假设A1不为空):
sheets("sheet1").range("a1",range("a1").end(xltoright)).select
选取B列有内容单元格区域:
(假设B1不为空):
sheets("sheet1").range("B1",range("B65536").end(XLUP)).select
以下是引用老荷才露在2004-10-516:
30:
00的发言:
a="b:
b"),">106")
Ifa>1Then
MsgBox"大于106的数有"&a&"个",1
最后这个,1怎么解释;a这个变量是不是省略了dim的声明,不声明也行吗?
兰老师的最后一句中的1+64,怎么解释
其实这个程序是加了个判断,如果统计的结果有>106的值(即A>1)就显示提示对话框,否则就不显示,
1+64参考下面的贴子:
变量在程序中如果事先约定,就必须声明,如果没有约定,就根据实际情况而定,一般来说声明最好,这样可以减少运行程序所占用的内存.
注:
约定:
相关图片如下(VBE编辑器---工具---选项)
此主题相关图片如下:
Functionpanduan(aaAsRange)
Ifaa.Value>0Then
panduan="大于零"
ElseIfaa.Value=0Then
panduan="等于零"
Else
panduan="小于零"
EndIfEndFunction
Functionpanduan(aaAsRange) panduan即是你定义的函数名称,就如IF,MATCT等函数名称一样
(aaAsRange) aa是该函数的参数,aaAsRange是定义该参数为单元格,在本例中是要判断正负或零的引用单元格即=panduan(A1)中的A1
Ifaa.Value>0Then
panduan="大于零"
是对引用单元格aa的值进行判断,把判断的结果返回给该函数所在单元格
在下面两句中间输入Workbooks后再输入个点("."),就会出现一个下拉框,框中的带小手指的就是工作薄集合的属性,带飞行的小书本的是方法,比如:
新建(ADD),关闭(CLOSE),打开(OPEN)就是方法
MsgBox是VBA中的一个函数.可以以对话框形式显示或返回信息,如:
当你在关闭工作薄时的提示
当你在删除工作表时出现的提示
一次新建多个工作薄:
Fori=10To13
Workbooks.Add
ActiveWorkbook.SaveAsFilename:
="c:
\"&i&".xls"
Next
可以了.新建四个工作表名字分别为(10-13).XLS .SaveAs什么意思?
对工作簿的修订保存到另一个不同的文件。
Workbooks.close是关闭所有打开的工作薄
Workbooks("123,XLS").close是关闭指定的工作薄
以上讨论了工作薄的新建,保存和统计,做个练习
怎么知道文件是隐藏后缀?
我目前有两打开的文件,一个直接显示BOOK6没有扩展名,一个是BOOK2.XLS是怎么回事?
ByVal是通常用来表示某个自变量将以传值(一种以传递自变量值给程序的方式,让程序取得变量的值,注:
变量的值将不会被程序所更改)的方式传值
上例中:
PrivateSubWorkbook_NewSheet(ByValShAsObject)
Application.DisplayAlerts=False
Sh.Delete
Application.DisplayAlerts=True
EndSub
把新增加的工作表作为变量传给程序(ByValShAsObject),程序中Sh.Delete才能运行,Sh即为新插入的工作表,(ByValShAsObject)是系统自动提供的,不能更改
工作表SHEETS的属性和方法很多,介绍几个常用的
Sheets.Count 工作薄中工作表的数量
Sheets
(1).name 返回第一个工作表的名子
sheets("sheet1").activate 设置sheet1为活动工作薄
sheets("sheet1").Delete 删除sheet1
Sheets("SHEET1").MoveAFTER:
=Sheets(Sheets.Count) 把Sheet1移到最后
sheets("sheet1").ProtectPASSWORD:
=123 保护工作表
sheets("sheet1").unProtectPASSWORD:
=123 解除工作表保护
sheets("sheet1").usedrange 工作表中已使用的单元格区域
sheets("sheet1").visible=true(false) 工作表是否隐藏
sheets("sheet1").ScrollArea="$A$1:
$A$10" 工作表的控制区域为A1:
A10
请教一下,用VB的OPEN可以打开其他可执行文件么?
比如*.mp3,*.bmp……
答:
不能
路过,看着挺好!
兰色幻想辛苦了!
补充一下:
有两个方法,是在对工作簿open、saveas操作时非常有用的:
getopenfilename、getsaveasfilename。
这两个方法是用于打开“打开”、“另存为”对话框,获取要open、saveas的工作簿路径名称。
前面兰色幻想老师说的打开、另存为的方法都是在代码中直接指定路径和文件名,对自己用可以了,但一旦文件名或路径有了变化,就要修改代码,因此与用户的交互性不是很好。
使用这两个方法,可以在需要打开或另存的时候跳出对话框,由用户直接选取打开文件或另存文件的路径、文件名。
fileToOpen=Application.GetOpenFilename("ExcelFiles(*.xls),*.xls")
IffileToOpen<>FalseThen
MsgBox"Open"&fileToOpen
EndIf
这是帮助中的一段代码,可以将它放入sub中测试一下,注意运行后并不真正打开选取的文件,只是取得该文件的路径、文件名,真正打开还要使用workbooks.open方法。
补充一点:
Application.Dialogs(5).Show是调用另存为对话框,
Application.Dialogs
(1).Show是调用打开对话框
如果想了解更多对话框对应的参数
设置一个按纽运行下面的宏(看下一个时按ESC)
Sub矩形1_单击()
onerrorresumenext
ForI=1To100
MsgBox"下面的对话框参数将对应参数"&I
Application.Dialogs(I).Show
Next
EndSub
下是引用lpdcd在2004-10-159:
50:
00的发言:
请问:
程序放错地方了,什么程序应该在Thisworkbook中,什么程序应在模块中。
如果你想让EXCEL自动为你服务(如打开、关闭文件、单击单元格、更换工作表就自动执行你设置的程序,而不需要去点击按纽或宏--执行宏来触发宏的运行)就考虑用事件程序,也就是放到MIRCROSOFTEXCEL对象中,如果程序要用手工控制,如点击某个按纽或通过宏选项执行宏才让程序运行,这种情况下用宏按纽方便。
举个例子:
填充非空单元格颜色
PrivateSubWorkbook_SheetChange(ByValShAsObject,ByValTargetAsRange)
IfTarget.Value<>""Then
=3
EndIf
EndSub
上面是一个事件程序,当工作表内容改变时就运行=3
如果这用宏来完成则很不方便,如果这样则,在单元格中每填入一个数字都要点一下按纽运行下面的宏
Sub矩形1_单击()
IfActiveCell.Value<>""Then
=3
EndIf
EndSub
在VBA中,单元格常用的表示方法有两种,
一种是RANGE
如A1在VBA的表示方法是Range("a1")
A1:
100的表法方法是:
Range("A1:
A100")
和以前一样,大家先在工作表中插入一个矩形作为执行宏的按纽
在按纽上单击右键,单击指定宏,再单击新建,在VBE窗口中的代码窗口会出现
Sub矩形1_单击()
EndSub
在两句中间输入
Range("a1")=1000
Range可以代表一个单元格区域,也可以代表一个单元格,通过
Range("a1")=1000也可以看出,它的用法是Range后括号中带上"A1" 就可以表示我们平时在工作表用到的中的A1单元格了,
它在表示一个连续区域时是这个的,Range("区域的左上角单元格:
区域的右下角单元格")
请把刚才的代码再加上一句:
Range("a1:
a10")=1000
如果是不连续的单元格多个区域,它是这样表示的:
Range("单元格区域1,单元格区域2.....")
把刚才的代码替换为:
Range("a1:
a10,c1:
c10,e1:
e10")=100
[A1]是Range("A1")的简写.二者在用法上没有什么区别,但在输入时有点不同,如当你输入[A1]后加点时,后面不会出现属性和方法列表,而输入Range("A1")加点后则会出现属性列表供你选取
Union是求多个单元格区域的并集,用法是Union(单元格区域1,单元格区域2.....)
它返回的是所有区域的所有单元格集合
Range("C16").Select
ActiveCell.FormulaR1C1="100"
Range("C11").Select
其实我只是在C16单元格中填入数值100,就会出现这么一大堆代码,这此代码可以优化为:
Range("C16").="100"
Application.Intersect(Range("a1:
a10"),Range("a3:
c4")).Select
这一句的意思是选中区域A1:
A10和A3:
C4重叠的区域,即两个区域共有的区域,此名代码运行的结果是选中区域A3:
A4
注意Intersect方法是一个非常实用的一个方法,比如我们在动态选取工作表Sheet1A列中已存在数据的区域时,就会用到它。
在介绍这个用法前还要介绍一下另一个工作表中非常实用的属性:
Usedrange
你可以选试着运行一下:
运行,在当前工作表中的所有用过的区域全被选中了。
你明白了吗,其实usedrange就是工作表中所有已存在内容的矩形区域,为什么不说是存在内容的单元格呢?
原因是比如你在一个空工作表中的B3和C5单元格任意输入一个数值,运行,而是B3:
C5单元格区域
2003,不支持
可以了!
我们平时在程序中会看到
Activesheet
worksheets("sheet1")
sheet1
sheets("sheet1")
Sheets
(1)
顺便说一说他们的区别
Activesheet是指当前活动工作表,即你正在操作的工作表
worksheets("sheet1")等同于sheets("sheet1")是特指工作表Sheet1,注意这时的Sheet1是工作表的名子,就如同"员工工资表"一样是工作表的名称,而Sheet1和Sheets
(1),不管你如何命名,Sheet1和Sheets
(1)就只代表第一个工作表,Sheet2和Sheets
(2)代表第二个工作表。
。
。
。
Intersect(Range("a:
a"),Sheets("sheet1").UsedRange).Select
Range("a:
a")是A列,Sheets("sheet1").UsedRange是工作表sheet1已使用的所有单元格区域,用Intersect求二者的共有区域,结果就是我们所要的A列已用所有区域
其实这中间有个规律:
如果你输入的是非数字的字符,即使你删除了,也被当做已用区域(已用过的区域),而当你删除的是你输入的数字时则不受这个限制)
兰老师:
还是不明白?
输入非数字的字符时,确实是这样。
但是当输入的数字时,有时还是受这个限制的,如附件中的A3删掉后,怎么还选呢?
应该是受“Sheets("sheet1").UsedRange是工作表sheet1已使用的所有单元格区域”的影响吧,结果只是二者的共有区域,并不是我们所要的A列已用所有区域。
答;因为这个区域是矩形区域,在其他列第三行已填有内容,所以A3即使删除也属已用区域。
你可以再试着在C20填入任意一个内容,A列选取的也是到20行
CellS(行数,列数)
如A1:
Cells(1,1) 用range表示:
range("a1")
b2:
cells(2,2) 用range表示:
range("b2")
c100:
cells(100,3) 用range表示:
range("c100")
cells也是一个常用的单元格表示方法,它和Range在表示单元格时有什么共同点和区别呢?
Range可以表示单元格,也可以表示单元格区域cells也是这样,但除了cells作为一外集合对象外其他只能表示一个独立的单元格,如:
Cells.select 选取工作表所有单元格
Cells(2,2).select 选取B2单元格
所以在表示单元格区域时,除表示全部单元格外,其他均需用Range来表示如:
range("a1:
b20").
offset是单元格或单元格区域的移动 offset(移动行数,移动列数)
resize是单元格或单元格区域的行数和列数重新设置后范围大小 resize(变动后行数,变动后列数)
例:
Range("A1:
B2").Select
选取A1:
B2区域
Range("A1:
B2").Offset(3,0).Select
A1:
B2区域向下移动三行,结果是选中A4:
B5区域
Range("A1:
B2").Resize(2,4).Select
A1:
B2区域重新设置,行数为2,列数为4,结果为选取A1:
D2
Range("A1:
B2").Resize(Range("A1:
B2").Rows.Count+2,Range("A1:
B2").Columns.Count+4).Select
A1:
B2区域重新设置,在原来行数的基础上加2行,在原来列数的基础上加4列,运行结果为:
结果是选取A1:
F4
问:
比如我在SHEET1中放置一个按扭,单击就选定没有数据的行,当然了要VBA自己判断到底到哪一行有数据,然后选择剩下没有数据的空白行.
答:
Range("A1:
A1000").SpecialCells(xlCellTypeBlanks).EntireRow.Select
SpecialCells方法
此对象代表与指定类型及值相匹配的所有单元格。
语法
expression.SpecialCells(Type,Value)
expression 必选。
该表达式返回一个Range对象。
Type Long类型,必选。
要包含的单元格。
可为以下XlCellType常量之一。
xlCellTypeAllFormatConditions
任意格式的单元格
xlCellTypeAllValidation
具有有效条件的单元格
xlCellTypeBlanks
空单元格
xlCellTypeComments
包含注释的单元格
xlCellTypeConstants
包含常量的单元格
xlCellTypeFormulas
包含公式的单元格
xlCellTypeLastCell
已用区域的最后一个单元格
xlCellTypeSameFormatConditions
具有相同格式的单元格
xlCellTypeSameValidation
具有相同有效条件的单元格
xlCellTypeVisible
所有可见单元格
Value Variant类型,可选。
如果Type为xlCellTypeConstants或xlCellTypeFormulas之一,此参数可用于确定结果中应包含哪几类单元格。
将某几个值相加可使此方法返回多种类型的单元格。
默认情况下将选定所有常量或公式,对其类型则不加区别。
可为以下XlSpecialCellsValues常量之一:
xlErrors、xlLogical、xlNumbers或xlTextValues。