VBA 侦错

不允許 LSet
Table of contents
不允許 LSetLSet not allowed|上次更新日期: |1 投稿人LSet用以靠左對齊資料字串內的的。這項錯誤有下列原因和解決方法:LSet is used to left-align data within strings and of. This error has the following cause and solution:您嘗試使用LSet包含字串、 物件或變體使用者定義類型。您必須指派元素分別從使用者定義類型此變數至另一個。You tried to use
LSet on a user-defined type containing strings, objects, or variants. You must assign the elements individually from this variable of user-defined type to another.如需詳細資訊,請選取有疑問的項目並按 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。For additional information, select the item in question and press F1 (in Windows) or HELP (on the Macintosh).
您對此內容的意見反應十分重要。請告訴我們您的想法。
其他意見反應?
剩餘 1500 個字元
我們非常感謝您提供的意見反應。(转)VBA自学收集代码&(二)
67、求:将所选区域中的数值全部转化为"万元"的最简代码.
求:将所选区域中的数值全部转化为"万元"的最简代码.
或能完成此功能的最便捷的命令操作.
写了一个,抛砖引玉:
Dim cel As
Dim dec As
Application.EnableEvents = False
& yesorno = MsgBox("确实将区域所有数值转换为“万元”?", vbYesNo +
vbQuestion + vbDefaultButton1)
& If yesorno = vbYes Then
Application.InputBox("请输入小数位数:", Default:=0, Type:=1)
& If dec = "" Then
& For Each cel In Selection
& If IsNumeric(cel.Value) Then
& 'cel = (Round(cel.Value / 10000, 2))
& cel = (Round(cel.Value / 10000, dec))
& ElseIf yesorno = vbNo Then
& Exit Sub
以下当为最简代码吧.
Selection.NumberFormatLocal = "#"".""#,"
68、在VBA开发环境中,点击工具――附加控件,出现如下窗口:
在可选控件中选择microsoft
orogressbar control,再点击确定,这时,你会发现在你的工具箱中增加了进度条工具,如图:
下面说说进度条的用法:
属性:Max: 设置进度条控件的最大值
&&Min:&&设置进度条控件的最小值
 Value:设置进度条控件对象的当前值
&&Scrolling:
进度条的式样,即一格一格的进度条或是没有间隔的进度条。
例子:Private Sub
UserForm_Activate()
For i = 1 to
& & ProgressBar1.Max =
5000 ‘设置进度条控件的最大值
& & ProgressBar1.Value
= I&&‘进度条控件对象的当前值
在程序中加入进度条的办法是将ProgressBar1.Max=最大值,ProgressBar1.Value =
当前值放入循环中去。
69、Excel是一个优秀的电子表格软件,如果你编的程序需要以报表的形式显示最终结果,它会是个不错的选择。你可以通过VB控制Excel显示数据表格。如果你不愿意深入了解Excel这些琐碎的细节,也不是没有权宜之计:你可以打开Excel中的工具→宏→录制新宏,然后进行手工操作,结束后把所录的宏代码贴进你的VB程序就行。这样得到的程序一般都能正常运行,但其中的宏代码往往不够简洁,效率和可读性都不高。
Excel编程碰到的第一个问题是表头。有时表头的形式比较复杂,需要横向或纵向合并单元格。请放心,只要没有斜杠,Excel都能应付得了。
例如合并A2~A5这4个单元格,你录制的宏代码会是这样:
Range("A2:A5").Select
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText =
.Orientation =
.AddIndent =
.ShrinkToFit =
.MergeCells =
Selection.Merge
   而自己编程只要一句
Range.(“A2:A5”).mergecells=True 就可以解决问题。
表头形式定了,再就是表头的内容。如果单元格中的文本长度超过了列宽,往往只能显示部分内容,行尾那一格的内容则会“越境”进入右边那个空白单元格,很不美观。这个问题可以通过在程序中设置列宽加以解决。
Columns(14).columnwidth=12 ‘设置第14列列宽为12(缺省列宽为8.38)
如果你不愿意劳神去逐列估计实际所需的列宽,干脆来一行
Columns(“a:i”).autofit ‘a到i列自动调整列宽
让Excel随机应变吧。
但也许你不喜欢这种方法,认为表头撑大了列宽,弄得浏览一张小表格还得向右滚动,太不方便了。要是能保持默认列宽,让文本自动换行就好了。没问题,Excel包你满意。
Rows(3).WrapText=True ‘让第三行各单元格中的文本自动换行
   不过你最好再加一句
Rows(3) .VerticalAlignment = xlTop 让表头自动向上对齐,这样比较符合习惯。
你还可以给表头打上底色,让你的读者不至于看了打哈欠。
   Rows(2).
Interior .ColorIndex = 5 设置第2行底色为蓝色
再给表格的标题上色,这样更醒目一点。
Rows(1).Font.ColorIndex=4
表头完成后该填数据了,一个一个地填实在是太? ,如果你的数据是存放在一个二维数组中,那问题就简单多了。
‘数据处理
Range(“a2:d4”).Value=Data
这样可以一次填入一个表的所有数据,够快了吧!不过提醒一句,Range对象大小最好与数组匹配,小了无法显示所有数据,大了则会在空白单元格只填入“N/A”表示没有取得数据。
如果需要在结果中显示多个同样规格的数据表,想在Range对象中加入循环变量,这也好办。
cell11,cell2
For I =1 to
‘数据处理
cell1=Worksheets("Sheet1").Cells(5*I-4,1)
cell2=Worksheets("Sheet1").Cells(5*I-2,4)
Worksheets("Sheet1").Range(cell1,cell2).value=Data
表格填完了,现在该打表格线了,以下几条语句可以满足你的要求:
Worksheets("Sheet1").Range(cell1,cell2).borders
.LineStyle=xlContinuous
.weight=xlThin
 70、《计算机实用软件》第一学期试卷(2)
一、填空题(每空1分,共20分)
1.在Excel的系统默认状态下,某个工作表的标签呈白色显示,表示其为&
&&&。在工作表中被粗线框住的的格子称为&
2.在Excel工作表中可以输入两类数据它们是&
3.&&工作表由&
4.输入Excel公式应以&
&开头,然后再输入具体的计算公式
5.在Excel中,系统默认状态下,输入文字的对齐方式是&
&&&,输入数字的对齐方式是&
6.在VB5的标准控件中&
&控件适用于在一组按钮中显示多个选项,但用户只能而且必须选择其中一项。&
控件适用于放置用户只能看到但不能修改的少量文本。
7.在VB中,要改变Text1文本框内显示的信息时,应当在其&
&&&窗口中,
& 属性进行重新设置。
8.VB5表达(40 Mod
7)\2的值是& &&
&2x2的VB5表达式为&
9.如下程序实现在当前窗口中显示一个消息框,消息框中显示有“是(Y)”和“否(N)”两个按钮,试将该程序填写完整,使用户点击“是(Y)”按钮后能显示出数字1,点击“否(N)”按钮后能显示出数字2
Private Sub
Form_Click()
Msg=’你想要继续吗?”
Style=vbYesNo
Response=msgbox(msg ,&
&Response&
Print“1”
二、单选题(每题3分,共30分)
Excel主要用于(&&)领域。
A.&&美术设计、装璜&
数据分析、财务管理
& C工业设计、机械制造&
&&&D.多媒体制作
对话框窗口中的“确定”按钮的作用是(&&)
& A. 确定输入的信息&
确定各选项并开始执行
& C. 关闭对话框不做任何事 D.退出对话框
在个人计算机上,通常Excel是在( )系统环境下运行的。
& A.office97&
&&&B.MS-DOS&
&C.Windows& &
4、Sheet1是Excel中的一个默认( )
& A.工作薄&
&&&B.单元格&
&C.工作表& &
5、在Excel中,如果输入分数,则需在数值闪加上()
0与空格& & B. 空格与0&
&C. 空格& &D.
6、在Excel中,公式“SUM+($D2:$C$7)”中的$C$7属于()引用。
&C. 列相对行绝对的混合 D. 行相对列绝对的混合
7、在Excel工作表中,系统默认状态下,日期和时间数据会自动()对齐。
靠右& & C. 居中&
)不是数据清单应具有的特征。
一个数据清单独占一个工作表&&&
B.&&数据清单中避免对单元格进行格式化
其它信息不要放在数据清单的区域内& &
D.&&数据清单中避免出现空行或空列
9、下列VB5控件中(
)可以自动设置滚动条。
文本框& &&
&B.&&图片框&
&&&D.&&复选框
10、若想在窗体显示一句提示信息,下列()控件最适宜实现
&&&C.&&单选钮&
11、下述哪个是VB5合法变量名?( )
&C.&&%h121&
12、若想要建立一个学生管理的输入界面,其中要很要求选择学生的性别和选择选修课情况(共有5门课,供任选),应如何在窗体利用单选按钮和复选框来实现
将5门课程用一组5个复选框来表示,将性别用一组两个复选框来表示
将5门课程用一组5个单选框来表示,将性别用一组两个复选框来表示
将5门课程用一组5个复选框来表示,将性别用一组两个单选框来表示
将5门课程用一组5个单选框来表示,将性别用一组两个单选框来表示
13、假设在当前VB5窗体有一个个文本框Test3,并有Text3_keyPress过程如下(其中变量S1的初始值为0)
Private Sub
Text3_keyPress (keyAscii As Integer)
If keyAscii=13
Then&&‘13是回车符的ASCII码)
Form1.Print
Text3.Text=”11” Then
&&MsgBox “It is
&&Text3.Enabled+False
&If S1=3 Then
“Sorry,invalid password!”
&&&MsgBox “Key
in password again!”
&&&Text3.text=””
当程序运行时用户要在文本框中输入11,回车后窗体和屏幕上各会显示:()
窗体显示“1”,屏幕上弹出一个消息框,框内显示出“Sorry,invalid password!”
& & 窗体显示“1”,屏幕上弹出一个消息框,框内显示出“Key
in password again!”
& & 窗体显示“1”,屏幕上弹出一个消息框,框内显示出“It
窗体显示“3”,屏幕上弹出一个消息框,框内显示出“Sorry,invalid password!”
三、判断题(每题2分,共30分)
1、剪贴板中只能保存最后一次剪切或复制的内容。(&
2、要关闭Excel的文档窗口,可以用Alt+F4快捷键。(&
3、Excel97启动后自动打开一个名book1的工作表。(&
4、在Excel中,
一个工作表可以包含多个工作薄。(& & )
5、在Excel97中,如果在某个单元格输入的公式中使用的是绝对地址,则复制该单元公式到另一单元时,Excel会对后一单元的公式作相应的调整。(&
6、在Excel中进行数据分类汇总,既可以通过执行“数据”菜单中的“分类汇总”命令执行,也可以使用Excel提供的数据透视表功能实现。前者适合依据多个字段进行分类汇总,后者适合依据一个字段进行分类汇总。(&
7、在Excel中,当工作表的数据发生变化时,相应图表中的数据序列也会随之变化,反之亦然(&&)
8、使用Excel默认的填充序列功能,可以自动填充出“第一课。。。。第十课”的序列。( )
9、在VB5的标准控件中复选框控件适用于在一组按钮中显示多个选项,但用户只能而且必须选择其中一项。(&
10、在VB中,可能有许多事件过程不会被执行。这是因为事件过程对应的事件没有发生。(&&)
11、在VB中,变体型变量是一种没有数据类型的变量。(&&)
12、在VB中,Integer类型的类型声明符为“!”。 (&
13、在VB中,局部变量只在定义它的过程内有效。(&&)
14、在VB5的过程中用Dim声明局部变量是动态变量,其值在过程执行完后仍保留。用Static声明局部变量是静态变量,其值在程序执行完后会消失。(&
15、在VB中,属性窗体和窗体属性中一回事。(&&)
四、多选题(提示:在下述题前有*标记的题选择是有次序的,每小题2分,共20分)
1、“关闭计算机的正确步骤为”(&&)
A.&&选择“关闭系统项”&
在弹出的对话框选择“关闭计算机”并单击“确定”按钮
C.&&单击“开始”菜单&
关闭所有已打开的窗口
2、下述输入数据中哪些是正确的Excel97的-6左2分之一? (&
A.&&&61/2&
&&&C.&&&6&&1/2&
3、在Excel97当前工作表中,假设C5到F5单元格中已有数据型数据,求出C5到F5的总值的公式可以是(&&)
Sum(c5,f5)& &&
&B. =Sum(c5:f5)&
&&&C.&&=c5+d5+e5+f5&
+Sum(c5:f5)
4、下列(&
&)是Excel97的应用范围。
制作普通表格& &&
&B.&&关联数据以及图表应用
C.&&数据模拟运算&
&&&D.&&数据库的基本操作
5、如果要使A1成为活动单元格,可以(&
单击A1单元格& &&
&B.&&按Home键&
按Ctrl+Home键&
&&&D.&&在编辑栏的“名称”框内输入A1然后回车
6、下述哪些数据不是Excel97中的合法的日期格式的数据。(&
& C. 04-11-89&
7、下述哪些是VB中合法的注释语句?(& &
A.&&“这是一个注释”&
&&&B.&&‘这是一个注释&
这是一个注释&
&&&D.&&这是一个注释
8、*在VB中将窗体的标题设置成“评估展示”的步骤为(&&);&&
将Caption的值改为“评估展示”&
将当前窗体存盘& &&
C.&&将当前窗体成为焦点&
打开属性窗口
9、*向窗体添加控件的步骤为(&
A.&&单击工具箱中所需的控件&
移动鼠标到窗体中适当位置&
C.&&按下鼠标向另一对角拖曳直到满意释放鼠标&
使窗体成为焦点
71、1.文件菜单栏(Excel自带的)
文件就叫Commandbars("File"),你可以在打开命令后加个菜单,类似的,编辑就是Commandbars("Edit"),视图就是Commandbars("View"),这些不会因语言版本不一样而不同,全部是一样的。
2.快捷菜单栏
好像那些打印啊、打开文件啊、居中对齐啊那些呢,叫Commandbars("Standard"),那些字体大小啊,颜色啊,就叫("Formatting")。
Excel的右键也是可以更改的,名叫:Commandbars("Cell")
4.自定义菜单
类似于数据透视表的那些浮动的窗体,不用名字,用Commandbars.add就可以追加了,最简单了。如果不能运行,记得加个Application.在Commandbars的前面。
72、由于公司合同较多,每次缴印花税时,计算每份印花税所需要的各面额印花的张数是一件比较繁琐的事。如:这份合同需要缴纳23元的印花税则需要买两张10元、一张2元、一张1元面额的印花。幸好有Excel这个财会人员的得力工具,我编写了一段宏代码来自动帮我计算各面额印花的张数,既快捷又方便。想到还有很多同行要做这项工作,所以写下来与大家共享。具体操作如下:
  新建一个Excel文件存为stampduty.xls,进入宏编辑器(Alt+F11)在ThisWorkbook中加入以下代码:
'印花税各面额印花张数计算程序
BY-RAY DENG
'用途:已知印花税额,计算各面额印花张数
'使用方法:做好工具条后,只要选择要计算的原始数据,点击"印花税面额计算"工具条即可.
(请不要选择全列,否则无效的计算太多.)
stamp_duty()
Static flagcal As
Integer '计算标志,首次计算时清空计算结果页,否则在结果页追加计算结果
Static rowbegain
As Integer '计算结果页上可用行号,计算结果追加时从这里开始
Dim filename As
String '打开的需要计算数据的文件名
Dim moneytype(7)
As Single '定义面额
Dim money As
Dim billno As
Integer '票额张数
filename =
ActiveWorkbook.Name '记录当前打开的文件名
If filename =
VBAProject.ThisWorkbook.Name Then '不要在自身这个文件中操作
"请选择其它文件中的数据!", vbInformation + vbOKOnly
Application.ScreenUpdating = False
'将屏幕更新关闭,可加快宏的运行速度
billno = 0
moneytype(0) =
100 '印花税面额为0.5-100,以0.5为舍入标准
moneytype(1) =
moneytype(2) =
moneytype(3) =
moneytype(4) =
moneytype(5) =
moneytype(6) =
VBAProject.ThisWorkbook.Sheets(1).Activate
'打开结果页
If flagcal = 0
Then '如果为第一次计算,则清空结果页
Cells.Select
Selection.ClearContents
Range("A1").Select
ActiveSheet.Cells(1, 1) = "Origin DATA" '先写上表头
For i = 0 To
ActiveSheet.Cells(1, i + 2) = moneytype(i)
Workbooks(filename).Activate '转到要计算的原始数据数据文件
ActiveWindow.RangeSelection.Rows.Count '所选区域有几行
rowstart =
ActiveWindow.RangeSelection.Row '起始行
colstart =
ActiveWindow.RangeSelection.Column '起始列
j = rowbegain
'结果页中写结果的起始行
For i = 1 To
rowno '开始读原始数据
origindata =
Cells(i + rowstart - 1, colstart) '读原始数据
'广州印花税尾数处理方法:过0.5进1,不足舍去,刚好为0.5及其倍数则不变 If origindata *
100 Mod 50 && 0 Then
Round(origindata, 0) '以0.5为界限作四舍五入
origindata '整数及尾数刚好为0.5不作处理
VBAProject.ThisWorkbook.Sheets(1).Activate
'转到结果页
ActiveSheet.Cells(i + 1 + j, 1) = origindata
'在第一列写入原始数据
Workbooks(filename).Activate ''转到要计算的原始数据数据文件
For k = 0 To 6
'循环计算各面额所需张数
While money
&= moneytype(k)
money = money -
moneytype(k)
billno = billno +
VBAProject.ThisWorkbook.Sheets(1).Activate
ActiveSheet.Cells(i + 1 + j, k + 2) = billno
'在相应位置写入该面额张数
billno = 0
'清0准备计算下一面额
Workbooks(filename).Activate
rowbegain =
rowbegain + 1 '结果页中写结果的起始行下移一行
flagcal = flagcal
+ 1 '计算次数累加
rowbegain =
rowbegain + 1 '添加一空行区分不同次数的结果
Application.ScreenUpdating = True '恢复屏幕刷新
VBAProject.ThisWorkbook.Sheets(1).Activate
'打开结果页
编好后存盘,退出宏编辑器。开始构建一个工具栏:[工具]—[自定义],点击[工具栏]---[新建],工具栏名称定为“印花税”,这时会出现
,点击[命令],将
“命令”列表中任意图标拖动到这个工具栏中,在刚拖过来的图标上点右键,选择[命名],将其改为“印花税面额计算”,选择[总是只用文字],这时会出现
,在“印花税面额计算”上点一次右键,选择[指定宏],选择“ThisWorkbook.stamp_duty”
,点[确定]即可。以后要计算时,只要选好原始数据,点击该工具栏即可。
Sheet1.Visible =
2 ‘深度隐藏
Sheet1.Visible =
74、你在“workbook"的&&Private
Sub Workbook_BeforeClose(Cancel As Boolean)&
&中加入如下句子:myNowTime = Format(Now, "yymmdd"
& "-" & "hhmmss")
&&&ActiveWorkbook.SaveAs
Filename:=currPath & myNowTime &
".xls", AddToMru:=False
‘(”currPath“
为你的路径及文件名称)
这样你保存文件可以年、月、日来实现。甚至可以小时、分、秒来保存。对于在编程序的来讲比较有用。如果你不需要“小时、分及秒”,可把后面的
[& "-" & "hhmmss")]取消即可。
75、我们日常上送、下发的报表材料、通知等都要加盖公章,如果把这项工作交给Excel或Word来完成,我们的工作就轻松多了。
第一步:制作公章图案
首先我们要做出一个公章的图案,最简单的办法是把公章图案扫描到电脑中,然后处理成透明的GIF图像。我们也可以直接用Excel来制作:把绘图工具打开,选中“椭圆”工具,在按下“Shift”键的同时拖开鼠标,就可以得到一个正圆了。双击这个正圆打开“设置自选图形格式”对话框,在“颜色与线条”标签中,填充颜色选“无填充颜色”,线条颜色设为红色,选3磅粗的单线形(图)。公章的文字用艺术字来制作,填充颜色和线条颜色都用红色,并设成无阴影产。弧形文字和水平文字要分开来做,在做弧形文字时,把艺术字拖到圆形的上方,在艺术字工具中选“艺术字形状-细上弯弧”,按住黄色的四方块往下拉,再作适当的调整,就可以做出公章里的圆弧形的文字了。公章中间还有一个红五星,用“自选图形”的星形就可以做出来了,填充颜色和线条颜色用红色。最后,按住“Shift”键把组成公章的文字、图形全部选上,执行右键菜单中的“组合”命令,一个公章就做好了。
如何把做好的公章保存出来?这里有一方法:把工作表另存为Web页,然后到保存目录中找到*.files的文件夹,里面有一个GIF图片,这就是刚才做好的公章图案了,它的背景是透明的,我们把它改名为gongzhang.gif保存下来即可。
第二步:添加“盖章”按钮
接下来我们给Excel添加一个盖章按钮,当一个工作表做好后,点击这个盖章按钮,就可以为我们盖上公章了。
先把公章图形复制出来(用来粘贴作为按钮的图标),然后打开“工具-自定义”对话框,选中“命令”标签,在“类别”栏中找到“宏”,在右边的“命令”栏里就会出现一项“自定义按钮”。用鼠标把这个笑脸图标拖出到菜单栏或工具栏上放下,在笑脸图标上击右键,在弹出的菜单中把“命名”处的文字改为“加盖公章”。接下来点击“粘贴按钮图标”这个命令,就可以用刚和复制的公章图形来代替笑脸图标了。把鼠标移下来选中“分配超级链接-插入图片”,然后在“请键入文件名称或Web页名称”栏里输入公章图片gongzhang.gif的文件名及路径,然后按“确定”返回。
好了,看到“加盖公章”这个按钮了吧,点击一下看看,呵呵,页面上就盖上一个鲜红的公章了,用鼠标可以把它拖到任意的地方。在Word文档中加盖公章的方法与此大同小异,大家可以自己试一试。
76、如何使某一个固定的菜单项无效
Application.CommandBars("File").Controls(6).Enabled =
Controls(6)中的6就是所在菜单栏的行数
我觉得这样可能更可靠:
&&Dim i As
& & For i = 1 To
Application.CommandBars("File").Controls.Count
Application.CommandBars("File").Controls(i).Caption =
"另存为(&A)..." Then
&Application.CommandBars("File").Controls(i).Enabled
77、请教大家,我想在EXCEL文件退出时,另存为当前目录下的子目录BAK中,比如EXCEL文件在C盘,就另存为C:\BAK子目录下,但EXCEL文件的位置不确定,不知如何写语句?
注意先引用"Microsoft
Scripting Runtime"
Private Sub
Workbook_BeforeClose(Cancel As Boolean)
在本文件要關閉前,執行備份動作。
& & If Not
ActiveWorkbook.Saved Then Exit Sub&
& ' 若原文件未存檔,備份檔也不存。
& & ThisPath =
ThisWorkbook.Path
假定備份文件夾之名稱為"BAK",若本文件是備份檔,則不需再備份。
Len(Application.WorksheetFunction.Substitute(ThisPath, "BAK", ""))
& Len(ThisPath) Then Exit Sub
& & Bak = ThisPath
& "" & "BAK"
'檢查備份文件夾是否存在,若不存在,就建立一個。
& & If Len(Dir(Bak,
vbDirectory)) & 0 Then
(GetAttr(Bak) And vbDirectory) = vbDirectory Then GoTo
若已存在,跳到下一步。
& & End If
建立備份文件夾。
改變目前路徑到備份文件夾路徑,並備份之。
3&&ChDir Bak
Application.EnableEvents = False&
避免執行BeforeSave事件。
Application.DisplayAlerts = False&
避免顯示是否要覆蓋原備份文件之訊息。
ActiveWorkbook.SaveAs
ThisPath& &&
改變目前路徑回到原文件夾路徑。
Application.DisplayAlerts = True
Application.EnableEvents = True
上述程式有個漏洞,就是在本文件做過更動,且存檔過了,但最後一次的更動未存檔,則 If Not
ActiveWorkbook.Saved Then Exit Sub 這個判斷會造成不存備份檔之錯誤決定。
若想彌補上述錯誤,將觸發的事件改成Workbook_BeforeSave,卻會造成Excel關閉的錯誤。
78、文件保存为以某一单元格中的值为文件名的宏怎么写
ActiveWorkbook.SaveCopyAs Str(Range("Sheet1!A1")) +
79、Offset
参阅应用于示例特性应用于
Range 对象的 Offset 属性。
返回一个 Range
对象,该对象代表某个指定区域以外的区域。只读。
expression.Offset(RowOffset, ColumnOffset)
expression&
&& &必需。该表达式返回一个
Range 对象。
RowOffset&
&& &Variant
类型,可选。区域偏移的行数(正值、负值或 0(零))。正值表示向下偏移,负值表示向上偏移,默认值为 0。
ColumnOffset&
&& &Variant
类型,可选。区域偏移的列数(正值、负值或 0(零))。正值表示向右偏移,负值表示向左偏移,默认值为 0。
应用于 TickLabels
对象的 Offset 属性。
返回或设置各级别标签之间的距离以及第一级标签与坐标轴之间的距离。其默认距离为百分之百,代表坐标轴标签与坐标轴之间的默认距离。其值可以为从
0 到 1000 之间的一个整数百分比,表示相对于坐标轴标签的字体大小。Long 类型,可读写。
expression.Offset
expression&
&& &必需。该表达式返回一个
TickLabels 对象。
应用于 Range
本示例激活 Sheet1
上活动单元格向右偏移三列、向下偏移三行处的单元格。
Worksheets("Sheet1").Activate
ActiveCell.Offset(rowOffset:=3,
columnOffset:=3).Activate
本示例假定 Sheet1
中包含一个具有标题行的表格。本示例先选定该表格,但并不选择标题行。运行本示例之前,活动单元格必须位于表格中。
ActiveCell.CurrentRegion
tbl.Offset(1,
0).Resize(tbl.Rows.Count - 1, _
tbl.Columns.Count).Select
应用于 TickLabels
如果偏移量小于 500,则本示例将
Chart1 中数值轴上标签之间的距离设置为当前距离的两倍。
Charts("Chart1").Axes(xlValue).TickLabels
& & If .Offset
& 500 then
&&&.Offset =
.Offset * 2
& & End If
80、新建工作簿
参阅特性若要在 Visual
Basic 中创建新的工作簿,请使用 Add 方法。下述过程创建了新的工作簿。Microsoft Excel
自动将该工作簿命名为“BookN”,其中“N”是下一个可用的数字。新工作簿将成为活动工作簿。
Workbooks.Add
& 创建新工作簿更好的方法是将其分配给一个对象变量。下例中,由 Add 方法返回的 Workbook
对象分配给了对象变量 newBook。然后,又设置了 newBook
的若干属性。使用对象变量可以很容易地控制新工作簿。
Set NewBook =
Workbooks.Add
&&&.Title = "All
&&&.Subject =
&&&.SaveAs
Filename:="Allsales.xls"
& & End With
81、Rem:将活动单元格从A5移到A6,并将A6单元格的数值保存到x变量中
").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()
CheckBox1.Value Then
本段的主要用意在于明白了If
CheckBox1.Value Then与If CheckBox1.Value=True Then
90、Timer是计时器,功能是按指定时间间隔产生定时事件
91、在一个语句要分行显示的地方加一个或多个空格,加一个下划线_然后回车转入下一物理行,作用在于代码一行写不下时续行,程序代码中一行较短时可加:把多行连成一行显示
可改为如下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
ave=(a+b+c)/3
在定义时必须向函数过程名赋值,而子程序名不能赋值
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
"有非空单元格"
103、用Range引用单元格和单元格区域
Range("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
Worksheets(“sheet1”).Cells(counter,3).value=counter
106、引用行或列
Rows 所有行
Columns(1)&&第1列
Columns(“C”)
工作表上所有列
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表示是私有子程序,这个子程序不会出现在“宏”对话框中
ActiveSheet.Calculate
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语句则运行速度加快
Workbooks(1).Sheets(1).Range(“A1:A1000”).font
.Name=”Pay”
.Fontstyle=
114、用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
Sheets(“sheet1”).select
Cells(k,1).value=Cells(1,1).Value
更快的代码是
TheValue=Cells(1,1).Value
Sheets(“sheet1”).select
For k=1 To
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”)
(“A1”)=100
(“A2”)=200
117、关闭屏幕更新是提高运行速度的最有效的办法,推荐使用
Application.ScreenUpdate=False
程序运行后再改回来
118、VBA中默认的数据类型是Variant,你必须选择使用何种数据类型,因为Variant数据类型占用存储空间较大(16或22字节)而且它将影响程序的性能,Vba必须识别Variant类型的变量中存储了何种数据类型。
119、再列一个自定义函数计算价格为10%为运费的简单函数例子
Public Function
Shipping(Price)
Shipping=Price*0.1
如还是不懂的话,将上述过程复制到模块中,然后在工作表任意单元格中输入=Shipping(C1)你就会明白
120、ActiveWindow.DisplyGridlines=False&&此句用来关闭网格线。
121、100个错误类型
&应用程序定义或对象定义错误
&应用程序定义或对象定义错误
3& &无 GoSub
&应用程序定义或对象定义错误
&无效的过程调用或参数
7& &内存溢出
&应用程序定义或对象定义错误
9& &下标越界
10&&该数组被固定或暂时锁定
11&&除数为零
12&&应用程序定义或对象定义错误
13&&类型不匹配
14&&溢出串空间
15&&应用程序定义或对象定义错误
16&&表达式太复杂
17&&不能执行所需的操作
18&&出现用户中断
19&&应用程序定义或对象定义错误
20&&无错误恢复
21&&应用程序定义或对象定义错误
22&&应用程序定义或对象定义错误
23&&应用程序定义或对象定义错误
24&&应用程序定义或对象定义错误
25&&应用程序定义或对象定义错误
26&&应用程序定义或对象定义错误
27&&应用程序定义或对象定义错误
28&&溢出堆栈空间
29&&应用程序定义或对象定义错误
30&&应用程序定义或对象定义错误
31&&应用程序定义或对象定义错误
32&&应用程序定义或对象定义错误
33&&应用程序定义或对象定义错误
34&&应用程序定义或对象定义错误
35&&子过程或函数未定义
36&&应用程序定义或对象定义错误
37&&应用程序定义或对象定义错误
38&&应用程序定义或对象定义错误
39&&应用程序定义或对象定义错误
40&&应用程序定义或对象定义错误
41&&应用程序定义或对象定义错误
42&&应用程序定义或对象定义错误
43&&应用程序定义或对象定义错误
44&&应用程序定义或对象定义错误
45&&应用程序定义或对象定义错误
46&&应用程序定义或对象定义错误
应用程序客户太多
48&&加载 DLL
调用约定错误
50&&应用程序定义或对象定义错误
51&&内部错误
52&&文件名或文件号错误
53&&文件未找到
54&&文件模式错误
55&&文件已打开
56&&应用程序定义或对象定义错误
57&&设备 I/O
58&&文件已存在
59&&记录长度错误
60&&应用程序定义或对象定义错误
61&&磁盘已满
62&&输入超出文件尾
63&&记录号错误
64&&应用程序定义或对象定义错误
65&&应用程序定义或对象定义错误
66&&应用程序定义或对象定义错误
67&&文件太多
68&&设备不可用
69&&应用程序定义或对象定义错误
70&&拒绝的权限
71&&磁盘未准备好
72&&应用程序定义或对象定义错误
73&&应用程序定义或对象定义错误
74&&不能更名为不同的驱动器
75&&路径/文件访问错误
76&&路径未找到
77&&应用程序定义或对象定义错误
78&&应用程序定义或对象定义错误
79&&应用程序定义或对象定义错误
80&&应用程序定义或对象定义错误
81&&应用程序定义或对象定义错误
82&&应用程序定义或对象定义错误
83&&应用程序定义或对象定义错误
84&&应用程序定义或对象定义错误
85&&应用程序定义或对象定义错误
86&&应用程序定义或对象定义错误
87&&应用程序定义或对象定义错误
88&&应用程序定义或对象定义错误
89&&应用程序定义或对象定义错误
90&&应用程序定义或对象定义错误
91&&对象变量或 With
块变量未设置
循环未初始化
93&&无效的模式串
94&&无效使用
95&&应用程序定义或对象定义错误
96&&由于对象已经激活了事件接受器支持的最大数目的事件,不能吸收对象的事件
97&&不能调用对象的友元函数,该对象不是所定义类的一个实例。
98&&属性或方法调用不能包括对私有对象的引用,不论是作为参数还是作为返回值
99&&应用程序定义或对象定义错误
应用程序定义或对象定义错误
122、Private Sub
Calendar1_Click()
ActiveCell =
Me.Calendar1.Value
123、设置日历控件字号
Private Sub
UserForm_Initialize()
Me.Calendar1.GridFont.Size = 14
124、以下是从金刚金作品里提出来的部份事件代码,做得很好,值得借鉴学习:
Private Sub
Workbook_Activate()
"工作簿被切换为作用工作簿", vbInformation, "Workbook_Activate"
Private Sub
Workbook_AddinInstall()
"激活新的加载宏时", vbInformation, "Workbook_AddinInstall"
Private Sub
Workbook_AddinUninstall()
"取消以前选取的加载宏时", vbInformation, "Workbook_AddinUninstall"
Private Sub
Workbook_BeforeClose(Cancel As Boolean)
"工作簿被关闭之前", vbInformation, "Workbook_BeforeClose"
Private Sub
Workbook_BeforePrint(Cancel As Boolean)
MsgBox "工作簿打印之前",
vbInformation, "Workbook_BeforePrint"
Private Sub
Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
"工作簿进行保存之前", vbInformation, "Workbook_BeforeSave"
Private Sub
Workbook_Deactivate()
"工作簿切换为非作用工作簿", vbInformation, "Workbook_Deactivate"
Private Sub
Workbook_NewSheet(ByVal Sh As Object)
MsgBox "新建工作表",
vbInformation, "Workbook_NewSheet"
Private Sub
Workbook_Open()
MsgBox "打开工作簿",
vbInformation, "Workbook_Open"
Private Sub
Workbook_PivotTableCloseConnection(ByVal Target As
PivotTable)
"数据透视表关闭与其数据源的连接之后", vbInformation,
"Workbook_PivotTableCloseConnection"
Private Sub
Workbook_PivotTableOpenConnection(ByVal Target As
PivotTable)
"数据透视表打开与其数据源的连接之后", vbInformation,
"Workbook_PivotTableOpenConnection"
Private Sub
Workbook_SheetActivate(ByVal Sh As Object)
MsgBox "工作表"
& Sh.Name & "切换为作用工作表",
vbInformation, "Workbook_SheetActivate"
Private Sub
Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As
Range, Cancel As Boolean)
"任一单元格双击鼠标之后", vbInformation,
"Workbook_SheetBeforeDoubleClick"
Private Sub
Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As
Range, Cancel As Boolean)
"任一单元格单击鼠标右键之后", vbInformation,
"Workbook_SheetBeforeRightClick"
Private Sub
Workbook_SheetCalculate(ByVal Sh As Object)
"工作表内容进行重算之后", vbInformation, "Workbook_SheetCalculate"
Private Sub
Workbook_SheetChange(ByVal Sh As Object, ByVal Target As
"在工作表内进行不同的操作", vbInformation, "Workbook_SheetChange"
Private Sub
Workbook_SheetDeactivate(ByVal Sh As Object)
MsgBox "工作表"
& Sh.Name & "切换为非作用工作表",
vbInformation, "Workbook_SheetDeactivate"
Private Sub
Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As
Hyperlink)
"按下Excel超链接之后", vbInformation,
"Workbook_SheetFollowHyperlink"
Private Sub
Workbook_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As
PivotTable)
"数据透视表更新之后", vbInformation,
"Workbook_SheetPivotTableUpdate"
Private Sub
Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As
"工作表里选取不同单元格范围时", vbInformation,
"Workbook_SheetSelectionChange"
Private Sub
Workbook_WindowActivate(ByVal Wn As Window)
"工作簿切换为作用工作簿", vbInformation, "Workbook_WindowActivate"
Private Sub
Workbook_WindowDeactivate(ByVal Wn As Window)
"工作簿切换为非作用工作簿", vbInformation,
"Workbook_WindowDeactivate"
Private Sub
Workbook_WindowResize(ByVal Wn As Window)
"工作簿被打开或窗口最大化、最小化之后", vbInformation,
"Workbook_WindowResize"
Private Sub
Worksheet_SelectionChange(ByVal Target As Range)
"选取不同单元格范围时", vbInformation, "Worksheet_SelectionChange"
选定单元格的个数
Selection.Cells.Count
126、Application.OnKey "{F11}", "ccc"禁用F11
127、'选中A列除A1外的第一个非空单元格
[a65536].End(xlUp).Offset(1, 0).Select
128、Private Sub
CommandButton1_Click()
On Error GoTo ad
'注意后面的ad,这是错误处理的用法
Range("a1").Value
Sheets(CStr(i)).Select
MsgBox("是否覆盖", vbYesNo, "")
If ret = vbYes
Range("A5:C7").Copy Sheets(CStr(i)).Range("A1")
'重点在copy之后
Sheets.Add.Name =
Range("A5:C7").Copy Sheets(CStr(i &
".2")).Range("A1")
Sheets.Add.Name =
i '工作表名的变化是可见的
Range("A5:C7").Copy
Sheets(CStr(i)).Range("A1")
129、用变量取代Sheet1中的“1”
For i = 1 To
Sheets("sheet"
& i).Range("A2") = "1234"
130、中英对照
English& &
& & 繁體中文&
Referencing& & &
& 絕對參照& &
& & 绝对引用
& 現存儲存格& &
& & 活动单元格
& & 增益集&
Address& &
Formula& & &
& 陣列公式& &
& & 数组公式
& & 儲存格&
Reference& & &
& 循環參照& &
& & 循环引用
& & 程式碼&
Command& &
Comment& &
Condition& &
Constant& &
& & 數據/資料&
& 資料型態& &
& & 数据类型
Declare& &
Dependent& &
& 對話方塊& &
& & 对话框
& & 雙精度浮點數&
双精度浮点数
Double-click (on
mouse)& & &
& 清單方塊& &
Electronic Mail /
Email& & &
& 電郵/電子郵件& &
& & 电子邮件
Execute& &
Flowchart& &
& & 流程圖&
Function& &
General& &
& & 硬拷贝
Hyperlink& &
& & 超連結&
Window& & &
& 即時運算視窗& &
& & 立即窗口
Internet& &
& & 互聯網&
Microsoft& &
Newsgroup& &
& & 新聞組&
Format& & &
& 數字格式& &
& & 数字格式
Browser& & &
& 瀏覽物件& &
& & 对象浏览器
Assistant& & &
& Office小幫手& &
& & Office助手
Options& &
Parameter& &
Parameter& &
& & 路徑(檔案的)&
Precedent& &
Program& &
Program/Subroutine& &
Project& &
Property& &
Referencing& & &
& 相對參照& &
& & 相对引用
Right-click (on
mouse)& & &
Chart& & &
& XY散佈圖& &
& & XY散点图
& & 滚动条
& & 單精度浮點數&
单精度浮点数
Single-click (on
mouse)& & &
& 智慧標籤& &
& & 智能标记
& & 软拷贝
Spinner& &
& & 微調按鈕&
Statement& &
& & 陳述式&
Strikethrough
& 刪除線& &
& & 删除线
Subscript& &
Superscript& &
& & 索引標籤&
Template& &
Toolbar& &
& & 工作列&
Transpose& &
Trendline& &
& & 趨勢線&
Underline& &
Validation& &
Variable& &
Visual Basic
Editor& & &
& Visual Basic 編輯器&
& & & Visual
Basic 编辑器
& & 監看式&
Wildcards(*或?)& &
& & 萬用字元&
Workbook& &
& & 活頁簿&
Worksheet& &
& & 工作表&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 debug侦错卡 的文章

 

随机推荐