分享

自学资料(Excel VBA)[收集整理15]

 COPY&PASTE 2009-10-15

自学资料(Excel VBA)[收集整理15]

默认分类   2009-08-01 12:15   阅读100   评论0  
字号:    

81、Rem:将活动单元格从A5移到A6,并将A6单元格的数值保存到x变量中
range("A5 ").select此命令就是选择A5单元格
Activecell.offset(1,0).select
X=activecell.value
82、用代码窗口中可用F8运行宏,Alt+F8显示宏对话框,Alt+F11可以打开VBE编辑器
83、Option Explicit  在程序代码前使用该命令,则变量要在声明后才能使用,否则编译程序无法识别该变量,从而产生错误信息
84、 Load语句用于加载窗体,加载后将占用内存,Hide方法使窗体隐藏,但仍在内存中,故不再使用窗体时应使用Uuload语句及时卸载,将内存交还系统,Show方法用来显示一个窗体,格式:窗体名称.show 模式,模式可取0或1,为1时,不能到其他窗体操作,只有关闭该窗体后才能对其他窗体操作
85、控件的命名规则,通常使用3个字母的前缀命名控件,如Label的前缀为lbl,初学者最好养成良好的命名习惯
86、按下Ctrl+Enter键单元格不移动。
87、按下F2键直接在单元格内编辑,不需动鼠标
88、命令按钮不支持双击(Dbclick)事件
89、Private Sub CheckBox1_Click()
If CheckBox1.Value Then
MsgBox "333"
Else
MsgBox "666"
End If
End Sub
本段的主要用意在于明白了If CheckBox1.Value Then与If CheckBox1.Value=True Then
90、Timer是计时器,功能是按指定时间间隔产生定时事件
91、在一个语句要分行显示的地方加一个或多个空格,加一个下划线_然后回车转入下一物理行,作用在于代码一行写不下时续行,程序代码中一行较短时可加:把多行连成一行显示
92、if a>15 then
b=10
else
b=100
end if
可改为如下if语句
b=iif(a.15,10,100)
93、F12用于启动另存为对话框
94、x=shell(calc.exe,1)可打开计算器程序
95、 call语句格式:Call<子过程名>[(<实际参数表>)]如果过程本身没有参数,则实参和括号可省略,并报参数放在括号中,另一个调用Sub过程的方法是: <子过程名>[<实际参数表>]比前一个少了Call和括号,子过程调用语句的实参在数目、类型、排列上与子过程定义语句的形式参数表一致
96、自定义函数一例,求abc三个数的平均
Private Function Passed(By Val a As integer, By Val b As integer, By Val c As integer)
ave=(a+b+c)/3
End Sub
在定义时必须向函数过程名赋值,而子程序名不能赋值
97、在工作表任意单元格输入=Cell("filename")可获得文件的完整路径、文件名和工作表名
98、在打开Excel文件时按住Shift键,将不运行VBA过程,可防止宏病毒,单击文件 关闭命令,在点关闭时按住Shift键将在不运行VBA过程的情况下关闭工作簿,可防止关闭时自动运行的宏病毒。
99、让一个变量得到单元格A1到A5的总和(变量设为X),
X=Sum(Range(“A1:A5”)) 错
X=Application.WorksheetFunction.Sum(Range(“A1:A5”))正确
也就是说必须通过Application的WorksheetFunction属性间接调用工作表函数
100、Rem和'是注释符,注释语句是非执行语句,要养成对代码注释的习惯。
101、ActiveSheet.Next.Select选择活动工作表下一张工作表,
ActiveSheet.Previous.Select选上一张
102、单元格B2:B10数值不全为空用IF语句表达
For Each cl in ActiveSheet.Range("B2:B10")
If cl.Value <> "" then
msgbox "有非空单元格"
Exit For
endif
next
103、用Range引用单元格和单元格区域
Range("A1") 单元格A1
Range("A1:B5") 从单元格A1到B5区域
Range("A1:B5 ,B1:B7") 多块的选定区域
Range("A:A") A列
Range("1:1") 第一行
Range("A:C") A列到C列的区域
Range("1:5") 第1行到第5行的区域
Range("1:1,3:3") 第1、行
Range("A:A,C:C") A列、C列
104、用Cells及编号引用单元格
Cells(6,1)A6单元格
如果对工作表用Cells属性时不指定索引,表示引用工作表上的所有单元格,下例清除活动工作簿中工作表Sheet1上所有单元格的内容
Worksheets(“sheet1”).Cells.ClearContents
105、可用变量代入单元格索引值,故Cells属性非常适用于在单元格区域中循环,如:
For counter=1 To 20
Worksheets(“sheet1”).Cells(counter,3).value=counter
Next counter
106、引用行或列
Rows(1) 第1行
Rows 所有行
Columns(1)  第1列
Columns(“C”) 第3列
Columns 工作表上所有列
106、可用方括号将A1样式的引用或命名区域的名称括起来,作为Range属性的快捷方式,这样就不必键入Range 和引号,如
Worksheets(“sheet1”).[A1:B2].clearContents
[MyRange].Value=30
107、用Offset处理按相对于其他单元格的某一位置的常用办法是使用Offset属性,本例将活动工作表上活动单元格下一行和右边三列的单元格的内容设置为下划线,如:
ActiveCell.Offset(1,3).font.Underline=XlDouble
108、把别的工作表Sheet2数据,读到当前工作表的方法列举
1)[A1]=Sheet2.[A1]    把Sheet2A1单元格的数据,读到A1单元格
2)[A2:A4]=Sheet2.[B1]  把Sheet2单元格B1的数据读到A2:到A4单元格
3)Range(B1”)=Sheet2.Range(“B1”)  把Sheet2工作表单元格B1数据,读到B1单元格
4)Range(“C1:C3”)=Sheet2.Range(“C1”)  把Sheet2工作表单元格C1数据,读到C1:C3
5)Cells(1,4)=Sheet2Cells(1,4)  把Sheet2工作表单元格D1数据,读到D1 单元格
6)Range(Cells(1,5),Cells(5,5)=Sheet2.Cells(1,5)  把sheet2工作表单元格E1数据,读到E1:E5单元格
7)Selection.Value=Sheet2.[F1]  把Sheet2 工作表单元格[F1]数据,读到任何你点选的单元格
109、Sub前有个Private表示是私有子程序,这个子程序不会出现在“宏”对话框中
110、Sub test()
ActiveSheet.Calculate
End Sub重算活动工作表
111、编程前应该尽可能地多了解Excel对象的属性、方法
112、每一个Excel对象的属性、方法的调用都要通过OLE连接的一个或多个调用,这些OLE调用都是需要时间的,减少使用对象引用能加快VBA代码的运行
113、使用With语句
Workbooks(1).Sheets(1).Range(“A1:A1000”).font.Name=”Pay”
Workbooks(1).Sheets(1).Range(“A1:A1000”).Font.Fontstyle=”Bold”…
改用With语句则运行速度加快
例:With Workbooks(1).Sheets(1).Range(“A1:A1000”).font
.Name=”Pay”
.Fontstyle= Bold”

End With
114、用set设置对象变量,以减少对象的访问,如:
Set MyRange=Workbooks(1).Sheets(1)
Mysheet.Range(“A1”).Value=100
Mysheet.Range(“A2”).Value=200
比直接用Workbooks(1).Sheets(1). Range(“A1”).Value=100
Workbooks(1).Sheets(1). Range(“A2”).Value=200运行快
115、在循环中要尽是减少对象的访问
For k=1 To 100
Sheets(“sheet1”).select
Cells(k,1).value=Cells(1,1).Value
Next k
更快的代码是
set TheValue=Cells(1,1).Value
Sheets(“sheet1”).select
For k=1 To 100
Cells(k,1).value=TheValue

116、减少对象的激活和选择
如果你是通过录制宏的来学习VBA的程序里一定充满了对象的激活和选择,如Workbooks(XXX).active 、Sheets(XXX).Select  、Range(XXX).Select等,但事实上大多数情况下这些操作不是必须的,如
Sheets(“sheet1”).Select
Range(“A1”).Value=100
Range(“A2”).Value=200
可改为With sheets(“Sheet3”)
.Range (“A1”)=100
.Range (“A2”)=200
117、关闭屏幕更新是提高运行速度的最有效的办法,推荐使用
Application.ScreenUpdate=False
程序运行后再改回来
118、VBA中默认的数据类型是Variant,你必须选择使用何种数据类型,因为Variant数据类型占用存储空间较大(16或22字节)而且它将影响程序的性能,Vba必须识别Variant类型的变量中存储了何种数据类型。

119、再列一个自定义函数计算价格为10%为运费的简单函数例子
Public Function Shipping(Price)
Shipping=Price*0.1
End Function
如还是不懂的话,将上述过程复制到模块中,然后在工作表任意单元格中输入=Shipping(C1)你就会明白
120、ActiveWindow.DisplyGridlines=False  此句用来关闭网格线。
转载自

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多