1、单元格在 VBA的表示方法:1、Range(“单元格地址“) 如 Range(“a1“) 即为 A1单元格2、CELLS(行,列) 如 CELLS(1,1)也为 A1单元格,CELLS(2,1)为 A2 单元格工作表在 VBA中表示方法:sheets(“工作表名“)每个函数前都要加 Application.WorksheetFunction.?答:如果是单个调用必须加如果是多个调用就可以用 WITH语句省去后面的如 Sub 矩形 1_单击()Dim i As IntegerFor i = 1 To 20Sheets(“sheet1“).Cells(i, 1) = iNextWith Appli
2、cation.WorksheetFunctionRange(“a21“).Value = .Sum(Range(“a1:a20“) 注意 SUM前面要有个点才行Range(“a22“).Value = .Average(Range(“a1:a20“)End WithEnd SubCOLUMN是指列,COLUMNS 是指列的集合ROW是表示行,ROWS 是行的集合如果用 Sheets(“sheet1“).columns.select 会选定所有列即整个工作表SUB 语句,需要有个事件触发它,才能执行,就比如一个箱子,只有去搬、推等外力施加与它时,它才会动。设置个按纽目的就是为了执行 SUB 语句
3、Range(“A1:A22“).ClearContents该语句是清除内容的语句Private 的中文意思是私有的,Private Sub 中的程序只能在本程序内部运行而不能被其他程序调用,而SUB语句则可以如:SUB BB() END SUBSUB AA()BB END SUBRange(“B65536“).End(xlUp).Row是指 B列最后一个非空单元格,END(XLUP)是向上数第一个非空单元格,为了准备找到最下面的非空单元格,当然要从 RANGE(“B65536“)开始向上找了MSGBOX 有时带()比如 AAA=MSGBOX()这种情况下可以取到用户点击对话框按纽的返回值,以确
4、定下一步该怎么做而不带括号只是提示的作用,不能取得返回的值如 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第一行有内容单元格区域
5、(假设 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 = Application.WorksheetFunction.CountIf(Range(“b:b“), “106“)If a 1 ThenMsgBox “大于 106的数有“ & a & “个“, 1最后这
6、个,1 怎么解释;a 这个变量是不是省略了 dim的声明,不声明也行吗?兰老师的最后一句中的 1+64,怎么解释其实这个程序是加了个判断,如果统计的结果有106 的值(即 A1)就显示提示对话框,否则就不显示,1+64参考下面的贴子:http:/ 编辑器-工具-选项)此主题相关图片如下:Function panduan(aa As Range) If aa.Value 0 Thenpanduan = “大于零“ElseIf aa.Value = 0 Thenpanduan = “等于零“Elsepanduan = “小于零“End IfEnd FunctionFunction panduan(
7、aa As Range) panduan即是你定义的函数名称,就如 IF,MATCT 等函数名称一样(aa As Range) aa是该函数的参数,aa As Range 是定义该参数为单元格,在本例中是要判断正负或零的引用单元格即=panduan(A1)中的 A1If aa.Value 0 Thenpanduan = “大于零“是对引用单元格 aa的值进行判断,把判断的结果返回给该函数所在单元格在下面两句中间输入 Workbooks后再输入个点(“.“),就会出现一个下拉框,框中的带小手指的就是工作薄集合的属性,带飞行的小书本的是方法,比如:新建(ADD),关闭(CLOSE),打开(OPEN
8、)就是方法MsgBox是 VBA中的一个函数.可以以对话框形式显示或返回信息,如:当你在关闭工作薄时的提示 当你在删除工作表时出现的提示一次新建多个工作薄:For i = 10 To 13Workbooks.AddActiveWorkbook.SaveAs Filename:=“c:“ & i & “.xls“Next可以了.新建四个工作表 名字分别为(10-13).XLS .SaveAs 什么意思?对工作簿的修订保存到另一个不同的文件。Workbooks.close是关闭所有打开的工作薄Workbooks(“123,XLS“).close是关闭指定的工作薄以上讨论了工作薄的新建,保存和统计,
9、做个练习怎么知道文件是隐藏后缀?我目前有两打开的文件,一个直接显示 BOOK6没有扩展名,一个是 BOOK2.XLS是怎么回事?ByVal是通常用来表示某个自变量将以传值(一种以传递自变量值给程序的方式,让程序取得变量的值,注:变量的值将不会被程序所更改)的方式传值上例中:Private Sub Workbook_NewSheet(ByVal Sh As Object)Application.DisplayAlerts = FalseSh.DeleteApplication.DisplayAlerts = TrueEnd Sub把新增加的工作表作为变量传给程序(ByVal Sh As Obje
10、ct),程序中 Sh.Delete才能运行,Sh 即为新插入的工作表,(ByVal Sh As Object)是系统自动提供的,不能更改工作表工作表工作表 SHEETS的属性和方法很多的属性和方法很多的属性和方法很多 ,介绍几个常用的介绍几个常用的介绍几个常用的Sheets.Count 工作薄中工作表的数量Sheets(1).name 返回第一个工作表的名子sheets(“sheet1“).activate 设置 sheet1为活动工作薄sheets(“sheet1“).Delete 删除 sheet1Sheets(“SHEET1“).Move AFTER:=Sheets(Sheets.Cou
11、nt) 把 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答:不能路过,看
12、着挺好!兰色幻想辛苦了!补充一下:有两个方法,是在对工作簿 open、saveas 操作时非常有用的:getopenfilename、getsaveasfilename。这两个方法是用于打开“打开”、“另存为”对话框,获取要 open、saveas 的工作簿路径名称。前面兰色幻想老师说的打开、另存为的方法都是在代码中直接指定路径和文件名,对自己用可以了,但一旦文件名或路径有了变化,就要修改代码,因此与用户的交互性不是很好。使用这两个方法,可以在需要打开或另存的时候跳出对话框,由用户直接选取打开文件或另存文件的路径、文件名。fileToOpen = Application.GetOpenFile
13、name(“Excel Files (*.xls), *.xls“)If fileToOpen “ ThenTarget.Interior.ColorIndex = 3End IfEnd Sub上面是一个事件程序,当工作表内容改变时就运行 Target.Interior.ColorIndex = 3如果这用宏来完成则很不方便,如果这样则,在单元格中每填入一个数字都要点一下按纽运行下面的宏Sub 矩形 1_单击()If ActiveCell.Value “ ThenActiveCell.Interior.ColorIndex = 3End IfEnd Sub在 VBA中,单元格常用的表示方法有两
14、种,一种是 RANGE如 A1在 VBA的表示方法是 Range(“a1“)A1:100的表法方法是: Range(“A1:A100“)和以前一样,大家先在工作表中插入一个矩形作为执行宏的按纽在按纽上单击右键,单击指定宏,再单击新建,在 VBE窗口中的代码窗口会出现Sub 矩形 1_单击()End Sub在两句中间输入Range(“a1“)=1000Range可以代表一个单元格区域,也可以代表一个单元格,通过Range(“a1“)=1000 也可以看出,它的用法是 Range后括号中带上“A1“ 就可以表示我们平时在工作表用到的中的 A1单元格了,它在表示一个连续区域时是这个的,Range(“
15、区域的左上角单元格:区域的右下角单元格“)请把刚才的代码再加上一句: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.)它返回的是所有
16、区域的所有单元格集合Range(“C16“).SelectActiveCell.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 方法是一个非常实用的一个方法,比如我们在动
17、态选取工作表 Sheet1A列中已存在数据的区域时,就会用到它。在介绍这个用法前还要介绍一下另一个工作表中非常实用的属性:Usedrange你可以选试着运行一下:Activecell.usedrange.Select运行 Activecell.usedrange.Select 你会发现,在当前工作表中的所有用过的区域全被选中了。你明白了吗,其实 usedrange 就是工作表中所有已存在内容的矩形区域,为什么不说是存在内容的单元格呢?原因是比如你在一个空工作表中的 B3 和 C5 单元格任意输入一个数值,运行 Activecell.usedrange.Select 后选取的不只是 B3 和 C
18、5 单元格,而是 B3:C5 单元格区域2003,不支持 Aactivecell.usedrange.Selectactivesheet.usedrange.select可以了!Sheet1.UsedRange.Select我们平时在程序中会看到Activesheetworksheets(“sheet1“)sheet1sheets(“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).SelectRange(“a:a“)是 A列,Sheets(“sheet1“).UsedRange 是工作表 sheet1已使用的所有单元格区域,用 Intersect求二者的共有区域,结果就是我们所要的 A列已用所有区域