>

Excel工具栏代码,如何调试Excel

- 编辑:澳门新葡亰平台游戏 -

Excel工具栏代码,如何调试Excel

问题:Excel有多少个本子,怎么样让VBA代码写的应用程序在不一致版本间通用?

1.概念一些全局变量

Excel VBA出错时给出的错误音讯极少,必要充足利用各样工具来扩充调试。

回答:

Dim Obj_Toolbar As CommandBar’代表工具栏的变量
Dim Obj_Menu As CommandBarPopup’代表菜单的变量
Dim Obj_Toolbar_button As CommandBarButton’代表菜单项和开关的变量

1.编译错误
见惯不惊的编写翻译错误有:

excel的vba本来就是通用的呦,你还想要怎么用

2.编纂生成工具栏和菜单的子程序

不当的源代码格式,举例if前边贫乏then:在编辑器中该行会化为莲灰。

回答:

Sub addbutton()’创立工具栏和菜单并安装属性的子程序
_deletebutton’调用删除工具栏和菜单的子程序
Set Obj_Toolbar = Application.CommandBars.Add("My_Custom_Bar")’新建筑工程具栏,“My_Custom_Bar”代表工具栏的名号
Set Obj_Menu = Obj_Toolbar.Controls.Add(Type:=msoControlPopup, ID:=1)’在工具栏上新建下拉菜单,“ID:=1”代表该工具栏的法力由顾客自定义,下同
With Obj_Menu’设置下拉菜单的习性
.Caption = "风格切换"’设置标题
.BeginGroup = True’设置分组
End With
Set Obj_Toolbar_button = Obj_Menu.Controls.Add(Type:=msoControlButton, ID:=1)’新建菜单项,下同
With Obj_Toolbar_button’设置菜单项的习性,下同
.Caption = "标准风格"
.BeginGroup = True
.OnAction = "Standard_Style"’设置单击菜单项实践的子程序名称
End With
Set Obj_Toolbar_button = Obj_Menu.Controls.Add(Type:=msoControlButton, ID:=1)’新建其他的菜单项,并设置属性
With Obj_Toolbar_button
.Caption = "轻巧风格"
.BeginGroup = True
.OnAction = "Simple_Style"
End With
Set Obj_Toolbar_button = Obj_Menu.Controls.Add(Type:=msoControlButton, ID:=1)
With Obj_Toolbar_button
.Caption = "绘图和制表风格"
.BeginGroup = True
.OnAction = "Draw_Table_Style"
End With
Set Obj_Toolbar_button = Obj_Toolbar.Controls.Add(Type:=msoControlButton, ID:=1)’新建筑工程具栏开关
With Obj_Toolbar_button’设置按键的习性
  .Caption = "关于"
  .Style = msoButtonIconAndCaption
  .FaceId = 984
  .OnAction = "Show_Msg"
End With
With Obj_Toolbar’设置工具栏的属性
 .Visible = True’工具栏可视
 .Enabled = True’工具栏可用
 .Position = msoBarTop’工具栏置顶
End With
Set Obj_Menu = Application.CommandBars("Menu Bar").Controls.Add(Type:=msoControlPopup, ID:=1)’在Word XP的主菜单中新建菜单,“Menu Bar”代表Word XP主菜单的称谓
With Obj_Menu’设置新建菜单的本性
 .Caption = "风格切换"
End With
Set Obj_Toolbar_button = Obj_Menu.Controls.Add(Type:=msoControlButton, ID:=1)’在新建菜单中增多菜单项,下同
With Obj_Toolbar_button’设置新建菜单项的习性,下同
.Caption = "标准风格"
.BeginGroup = True
.OnAction = "Standard_Style"
End With
Set Obj_Toolbar_button = Obj_Menu.Controls.Add(Type:=msoControlButton, ID:=1)’新建别的的菜单项,并设置属性
With Obj_Toolbar_button
.Caption = "简单风格"
.BeginGroup = True
.OnAction = "Simple_Style"
End With
Set Obj_Toolbar_button = Obj_Menu.Controls.Add(Type:=msoControlButton, ID:=1)
With Obj_Toolbar_button
.Caption = "绘图和制表风格"
.BeginGroup = True
.OnAction = "Draw_Table_Style"
End With
End Sub

错误的语法结构,比方if和end if未有对应上:代码运转前会付给编写翻译错误提醒。

关爱头条号小编 伪行家言三语四 宣布的文章里有这么些方面包车型大巴牵线 能够过去会见希望能帮到你

3.编纂删除工具栏和菜单的子程序

品类不包容:函数输入的参数与定义时的参数类型分裂有的时候间会现身此类错误。

Sub _deletebutton()’删除工具栏和菜单的子程序
Dim tempbar As CommandBar’定义临工具栏变量
On Error Resume Next’该语句用于忽视错误
Application.CommandBars("Menu Bar").Reset’重新安装Word XP的主菜单,即除去新建的美食指南
For Each tempbar In Application.CommandBars’通过“For Each…Next”语句遍历Word XP全数的工具栏
If tempbar.name = "My_Custom_Bar" Then’如名称和新建的工具栏相符
tempbar.Visible = False’设置为不可视
tempbar._delete’删除该工具栏
End If
Next
End Sub

变量未定义:指利用了并未有表达的变量类型(当Option Explicit时卡塔尔

建议:

格式标准化,严俊缩进。VBA插件SmartIndent是四个很好的帮助理工科程师具。那样做让源代码更具有可读性,进而越来越快检查实验源代码格式和语法结果错误,。

勾选上「工具——选项——编写翻译器——必要变量注解」,或然在各种代码模块最前面手工业加上 Option Explicit 。在代码编辑中,超多荒唐只是因为手误,那些选项会让编写翻译器强制检查变量申明,进而在编写翻译时便发掘错误。

2.周转中出错只怕运维结果错误

当程序编写翻译没至极,但运营中出错也许运转的结果与想象中不符,就需求用到VBA的调和效率。上边是VBA提供的多少个着重的调治作用,那一个效应能让程序停在一些特定之处上候检:
F9:设置程序断点,在代码侧边栏点击有相像效率。重新按F9即裁撤断点。
F8:单步追踪,当调用子函数会追踪到子函数内部
Shift+F8:单步追踪,但不会进来子函数内部
Ctrl+Shift+F8:跳出正在追踪的函数,直接回到上豆蔻梢头层函数。
F5:运营程序,直到现身谬误、程序截至或程序断点结束
Ctrl+F8:运路程序,直到现身谬误、程序停止、程序断点或当前光标所在行停止
debug.print var:在当下窗口中显示var的值
debug.assert var:当var==false时前后相继自动终止

上述命令也可在菜单和命令栏中拿走。

在调治进度中,可因而上边两种格局查看种种变量的值,当变量和预期不等同临时候,也就找到了前后相继出错的来由,便能对照更正:

旋即窗口(连忙键Ctrl+G卡塔 尔(阿拉伯语:قطر‎:在该窗口里交易会示debut.print的结果值,乃至每一日计算和平运动转代码。在代码后面增添「?」,能够在及时窗口中展现运转结果。

监视窗口:能够将变量以至表达式增加到监视窗口,能够实时查看变量和表达式的值。援救将代码窗口里的变量和表明式拖入到见识窗口

地面窗口:本地窗口里能够查看近期的local变量和global变量的变量值。

编写制定窗口:将鼠标停在编辑窗口的变量上可展现该变量的值。

有后生可畏都部队分方法可减弱程序不当以至收缩调试的难度:

丰富首要的代码注释。

源代码格式规范化,扩大代码可读性。VBA插件SmartIndent是贰个很好的帮助理工科程师具。

尽或许评释变量类型,少用Variant变量。

瞩目函数的参数字传送递形式,默感到传援引,子函数会改革变量的值。

不遗余力将成效函数化,分裂的功效分别写。

制止在VBA中援用绝对地址,如Range("A1")。可先在Excel中定义名称"abc=$A$1",然后援引Range("abc")。
幸免使用ActiveSheet, ActiveWorkbook等可变变量,用Sheet1,ThisWorkbook这种纯属变量。相对变量不受外部操作影响。

出处:

========================================================================

VBA测量检验与错误处理

1.测试

测验代码,检查它是否科学。为承保代码能够健康机能,必需竭力模拟代码运维的不等境况,并检查其科学。

次第中的错误经常分为如下几类:

(1卡塔尔国语法错误(如输入时根本字或标点拼写错误) 。

(2卡塔 尔(阿拉伯语:قطر‎编写翻译错误(如接受对象的主意时,该对象并不辅助这些方法) 。

(3卡塔尔国运转时期错误(如除0、打开或关闭并不设有的文书档案、关闭未展开的文书档案等) 。

(4卡塔尔逻辑错误(逻辑锗误是最难查找的错误类型,它们是由程序中选拔的逻辑引起的。

2.调试

要确认保证代码中的变量和表明式遵照预期的不二诀窍运转,能够使用VBA中的各样调解工具追踪它们。VBE有以下调节和测量试验工具。

(1) 中断形式

①进入暂停方式方法:在经过的起先地点按下F8键(“逐语句”试行卡塔 尔(英语:State of Qatar)。使用“切断断点“(F9键只怕单击当前空白提醒器栏)。使用Stop语句。当进度运营时,按下Ctrl+Break键。使用运营时期错误MsgBox对话框。

②脱离中断形式方法:从运营菜单中接纳“运行子进度/客户窗体)”;或然按下F5键,恐怕单击“调节和测量检验”工具栏上的“运营子进程/顾客窗体”开关。从“运维”菜单中选取“重新安装”选项,只怕单击“调试”工具栏上的“重新复苏设置”按键。

(2) 单步实行进度

① 单步推行进程:从“调节和测量检验”菜申中精选“逐进度”选项,或然按下Shift+F8键。

②跳出进程(跳进度剩余部份):从“调试”菜单中选用“跳出”选项,或然按下Ctrl十shift十F8键。

③周转到光标处(跳过大器晚成组语句):从“调节和测验”菜单中接收“运维到光标处”或按下Ctrl+F8键。

④装置下一条语句为光标所指语句(要忧劳能够兴国逸豫能够亡身会忽视不实践中间的话语):从“调节和测试”菜单中选取“设置下一条语句”大概按下Ctrl十F9键。

⑤“展现下一条语句”选项指明下二个将在推行的语句是什么样。当供给在程序窗口中监视非常多过程、却不见了追踪时,就可接纳这一个调节和测量试验效率。

(3) 监视进程

①“本地”窗口(展现当前行程中应用具有变量及其值,还恐怕会来妥贴前加载窗体和控件的性情。):从“视图”菜单中选“当地窗口”选项。

②“调用货仓”对话框(查看全数移动的历程调用):从“视图”菜单中选“调用货仓”或按下Ctrl+L键。

③“立刻窗口”(可查询并安装变量值,成立或撤消对象,实施单行命令卡塔尔国。从“视图”菜单中选用“登时窗口”或按下Ctrl+G键。

④“监视窗口”(是贰个调节和测量试验工具,在暂停情势下可利用它改造变量和表明式的值,以查看分裂的值什么影响代码)。从“视图”菜单中选拔。

3.防守错误

(1)注释 。

(2卡塔 尔(阿拉伯语:قطر‎缩进代码:Tab键或启用Too1s(工具)菜单选Options(选项)Editor(编辑器)选项卡中的Auto Indent(自动缩进)。

(3卡塔 尔(阿拉伯语:قطر‎使代码模块化。

(4卡塔 尔(英语:State of Qatar)显式注脚变量:使用Option Explicit语句,或启用工具菜单选“选项”编辑器选项卡中的“供给变量注脚”复选框。

 

(5卡塔尔国避免接受变体Variant(当某变量也许包含NULL值时就只可以惟一钦点Variant类型了)。

(6卡塔尔张开语法检查:启用工具菜单选“选项”编辑器选项卡中“自动语法检测”。

(7卡塔尔谨防Dim陷阱:Dim str1, str2 As String   '并未有声称str1变量。

4.错误管理

调治将养上一只好够察觉能够估量的荒诞,要管理不可预测的和不可幸免的谬误时,就必得利用错误管理。通过启用错误管理,捕获并提醒错误管理,能够使程序更加强壮。就能够使应用程序更平稳、越来越硬朗。假若应用程序中包罗了少数个进度,那么能够酌量接收集英式错误管理程序。

(1) 捕获错误:On Error Goto line (On Error Goto 0会在现阶段历程禁止使用错误管理程序) 在这里个语法中,line钦定了发出运维时期错误时调节将跳转到的代码行。

(2) 编写错误处理程序:给顾客显示错误新闻;提醒补救方法;允许继续或吊销操作。使用Err对象:

属性

说明

Number

存储最后一个错误的数字ID。这是默认属性

Description

存储说明错误的有关信息

Source

包含发生了错误的对象名或应用程序名

HelpFile

包含帮助文件的名字

HelpContextID

包含错误号对应的帮助上下文ID

LastDLLError

包含最后一次调用DLL的系统错误代码

Raise方法能够让客户自定义错误管理新闻,还可把错误管理音信传播调用进度: Err.Raise number[, source, description, helpFile, helpContext]

Clear方法死灭Err对象的兼具属性值:Err.Clear (当调用On Error, Exit Sub, Exit Function, Exit Property, Resume 等话语时,会活动调用Err.Clear方法。)

(3) 退出错误处理程序:

①0n error Resume:当错误管理程序已经修复错误后,能够用它来回到调控给引起错误的口舌。但注意假设不当还在的话,会挑起Infiniti循环。

②0n error Resume Next:忽视错误语句,继续下一句。

③Resume [LineLabel]: 把调整传递给行标号(必得和Resume语句处在同几个经过中)所在点的说话。

④也可使用Exit Sub大概Exit Function以至End语句退出已发出错误的经过,但那些语句应放在错误管理程序早前,那样当未生出错误时就不会实施错误管理程序。

出处:

本文由办公软件发布,转载请注明来源:Excel工具栏代码,如何调试Excel