2024年4月10日发(作者:)

单元格在VBA的表示方法:

1、Range("单元格地址") 如Range("a1") 即为A1单元格

2、CELLS(行,列) 如CELLS(1,1)也为A1单元格,CELLS(2,1)为 A2单元格

工作表在VBA中表示方法:sheets("工作表名")

每个函数前都要加eetFunction.?

答:如果是单个调用必须加

如果是多个调用就可以用WITH语句省去后面的

如Sub 矩形1_单击()

Dim i As Integer

For i = 1 To 20

Sheets("sheet1").Cells(i, 1) = i

Next

With eetFunction

Range("a21").Value = .Sum(Range("a1:a20")) 注意SUM前面要有个点才行

Range("a22").Value = .Average(Range("a1:a20"))

End With

End Sub

COLUMN是指列,COLUMNS是指列的集合

ROW是表示行,ROWS是行的集合

如果用Sheets("sheet1"). 会选定所有列即整个工作表

SUB 语句,需要有个事件触发它,才能执行,就比如一个箱子,只有去搬、推等外力施加与它时,它才会

动。设置个按纽目的就是为了执行SUB语句

Range("A1:A22").ClearContents该语句是清除内容的语句

Private 的中文意思是私有的,Private Sub中的程序只能在本程序内部运行而不能被其他程序调用,而S

UB语句则可以

如:

SUB BB()

END SUB

SUB AA()

BB

END SUB

Range("B65536").End(xlUp).Row

是指B列最后一个非空单元格,END(XLUP)是向上数第一个非空单元格,为了准备找到最下面的非空单元

格,当然要从RANGE("B65536")开始向上找了

MSGBOX 有时带()

比如AAA=MSGBOX()

这种情况下可以取到用户点击对话框按纽的返回值,以确定下一步该怎么做

而不带括号只是提示的作用,不能取得返回的值

如MSGBOX ......

以下是引用

playgirl

在2004-10-5 15: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-5 16:30:00的发言:

a = f(Range("b:b"), ">106")

If a > 1 Then

MsgBox "大于106的数有" & a & "个", 1

最后这个,1 怎么解释;a 这个变量是不是省略了dim的声明,不声明也行吗?

兰老师的最后一句中的 1+64,怎么解释

其实这个程序是加了个判断,如果统计的结果有>106的值(即A>1)就显示提示对话框,否则就不显示,

1+64参考下面的贴子:

/?boardid=5&star=13&replyid=297359&id=62008&skin=0&page=

1

变量在程序中如果事先约定,就必须声明,如果没有约定,就根据实际情况而定,一般来说声明最好,这样可

以减少运行程序所占用的内存.

注:约定:相关图片如下(VBE编辑器---工具---选项)

此主题相关图片如下:

Function panduan(aa As Range)

If > 0 Then

panduan = "大于零"

ElseIf = 0 Then

panduan = "等于零"

Else

panduan = "小于零"

End IfEnd Function

Function panduan(aa As Range) panduan即是你定义的函数名称,就如IF,MATCT等函数名

称一样

(aa As Range) aa是该函数的参数,aa As Range是定义该参数为单元格,在本例中是要判断正负或

零的引用单元格即=panduan(A1)中的A1

If > 0 Then

panduan = "大于零"

是对引用单元格aa的值进行判断,把判断的结果返回给该函数所在单元格

在下面两句中间输入Workbooks后再输入个点("."),就会出现一个下拉框,框中的带小手指的就

是工作薄集合的属性,带飞行的小书本的是方法,比如:新建(ADD),关闭(CLOSE),打开(OPEN)就是方法

MsgBox是VBA中的一个函数.可以以对话框形式显示或返回信息,如:当你在关闭工作薄时的提示

当你在删除工作表时出现的提示

一次新建多个工作薄:

For i = 10 To 13

Filename:="c:" & i & ".xls"

Next

可以了.新建四个工作表 名字分别为(10-13).XLS .SaveAs 什么意思?

对工作簿的修订保存到另一个不同的文件。

是关闭所有打开的工作薄

Workbooks("123,XLS").close是关闭指定的工作薄

以上讨论了工作薄的新建,保存和统计,做个练习

怎么知道文件是隐藏后缀?

我目前有两打开的文件,一个直接显示BOOK6没有扩展名,一个是是怎么回事?

ByVal是通常用来表示某个自变量将以传值(一种以传递自变量值给程序的方式,让程序取得变量的值,注:

变量的值将不会被程序所更改)的方式传值

上例中:

Private Sub Workbook_NewSheet(ByVal Sh As Object)

yAlerts = False

yAlerts = True

End Sub

把新增加的工作表作为变量传给程序(ByVal Sh As Object),程序中才能运行,Sh

即为新插入的工作表,(ByVal Sh As Object)是系统自动提供的,不能更改

S

S

H

H

E

E

E

E

T

T

S

S

,

,

工作薄中工作表的数量

Sheets(1).name 返回第一个工作表的名子

sheets("sheet1").activate 设置sheet1为活动工作薄

sheets("sheet1").Delete 删除sheet1

Sheets("SHEET1").Move AFTER:=Sheets() 把Sheet1移到最后

sheets("sheet1").Protect PASSWORD:=123 保护工作表

sheets("sheet1").unProtect PASSWORD :=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 = nFilename("Excel Files (*.xls), *.xls")

If fileToOpen <> False Then

MsgBox "Open " & fileToOpen

End If

这是帮助中的一段代码,可以将它放入sub中测试一下,注意运行后并不真正打开选取的文件,只是取得

该文件的路径、文件名,真正打开还要使用方法。

补充一点:

s(5).Show是调用另存为对话框,

s(1).Show是调用打开对话框

如果想了解更多对话框对应的参数

设置一个按纽运行下面的宏(看下一个时按ESC)

Sub 矩形1_单击()

on error resume next

For I = 1 To 100

MsgBox "下面的对话框参数将对应参数" & I

s(I).Show

Next

End Sub

下是引用

lpdcd

在2004-10-15 9:50:00的发言:

请问:程序放错地方了,什么程序应该在Thisworkbook中,什么程序应在模块中。

如果你想让EXCEL自动为你服务(如打开、关闭文件、单击单元格、更换工作表就自动执行你设置的程序,

而不需要去点击按纽或宏--执行宏来触发宏的运行)就考虑用事件程序,也就是放到 MIRCROSOFT EXCEL

对象中,如果程序要用手工控制,如点击某个按纽或通过宏选项执行宏才让程序运行,这种情况下用宏按

纽方便。

举个例子:填充非空单元格颜色

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

If <> "" Then

ndex = 3

End If

End Sub

上面是一个事件程序,当工作表内容改变时就运行ndex = 3

如果这用宏来完成则很不方便,如果这样则,在单元格中每填入一个数字都要点一下按纽运行下面的宏

Sub 矩形1_单击()

If <> "" Then

ndex = 3

End If

End Sub

在VBA中,单元格常用的表示方法有两种,

一种是RANGE

如A1在VBA的表示方法是Range("a1")

A1:100的表法方法是: Range("A1:A100")

和以前一样,大家先在工作表中插入一个矩形作为执行宏的按纽

在按纽上单击右键,单击指定宏,再单击新建,在VBE窗口中的代码窗口会出现

Sub 矩形1_单击()

End Sub

在两句中间输入

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

aR1C1 = "100"

Range("C11").Select

其实我只是在C16单元格中填入数值100,就会出现这么一大堆代码,这此代码可以优化为:

Range("C16").="100"

ect(Range("a1:a10"), Range("a3:c4")).Select

这一句的意思是选中区域A1:A10 和 A3:C4重叠的区域,即两个区域共有的区域,此名代码运行的结果是

选中区域A3:A4

注意

Intersect 方法

是一个非常实用的一个方法,比如我们在动态选取工作

表Sheet1A列中已存在数据的区域时,就会用到它。在介绍这个用法前还要介绍一下另一个工作

表中非常实用的属性:Usedrange

你可以选试着运行一下:

运行你会发现,在当前工作表中的所有用过的区域全被选中了。你明白了吗,其

usedrange

就是工作表中所有已存在内容的矩形区域,为什么不说是存在内容的单元格呢?原因是比

如你在一个空工作表中的B3和C5单元格任意输入一个数值,运行后选取的不

只是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已使用的所有单元格区域,用Inte

rsect求二者的共有区域,结果就是我们所要的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(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"). + 2, Range("A1:B2"). + 4).Selec

t

A1:B2区域重新设置,在原来行数的基础上加2行,在原来列数的基础上加4列,运行结果为:结果是选取A1:

F4

问:比如我在SHEET1中放置一个按扭,单击就选定没有数据的行,当然了要VBA自己判断到底到哪一行有数

据,然后选择剩下没有数据的空白行.

答:Range("A1:A1000").SpecialCells(xlCellTypeBlanks).

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 常量之一:xlErro

rs、xlLogical、xlNumbers 或 xlTextValues。