用EXCEL罗技鼠标宏编程程的,执行时总是少了END Sub

查看: 1817|回复: 17
第一次做宏,说缺少END SUB,不明,请高手指教
阅读权限20
在线时间 小时
想简化些数据的统计,试做宏,参考帮助的内容,但运行后发现都提示“缺少END SUB”
不明,请高手指教,万分感谢
1.jpg (28.91 KB, 下载次数: 20)
11:03 上传
2.jpg (21.63 KB, 下载次数: 2)
11:03 上传
阅读权限90
在线时间 小时
结尾有重复的END SUB,删除其中一个,Sub aaa()也要删除。
[ 本帖最后由 ningyuanchao 于
11:06 编辑 ]
阅读权限20
在线时间 小时
多写了一个END SUB嘛,最后一行删掉
阅读权限70
在线时间 小时
请把第一行和最后一行删掉
阅读权限95
在线时间 小时
阅读权限20
在线时间 小时
& & & & & & & &
恩 可以了 3Q2位~
阅读权限10
在线时间 小时
刚学习VBA,VBA运行后发现都提示“缺少END SUB”,请高手指教,万分感谢!Sub 教师课程表()
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address && &$E$2& Then Exit Sub
Dim arr, i&, j&, js$
[c4:h13].ClearContents
arr = Sheet3.[a1].CurrentRegion
js = Target.Value
For i = 6 To UBound(arr) Step 2
& & For j = 3 To UBound(arr, 2)
& && &&&If IsError(arr(i, j)) Then GoTo 100
& && &&&If arr(i, j) = js Then
& && && && &Cells(i / 2 + 1, Int((j + 8) / 11) + 2) = arr(i - 1, j) & vbCrLf & arr(4, j)
& && &&&End If
阅读权限95
在线时间 小时
刚学习VBA,VBA运行后发现都提示“缺少END SUB”,请高手指教,万分感谢!Sub 教师课程表()
Private Sub W ...
过程开头总是有& &Sub&&过程结尾总是 End Sub。你的代码中开头是
Private Sub Worksheet_Change(ByVal Target As Range)& &这一句,开头对了。
你的结尾处是二个&&End Sub。删掉一个就可以了。
阅读权限10
在线时间 小时
& & & & & & & &
过程开头总是有& &Sub&&过程结尾总是 End Sub。你的代码中开头是
Private Sub Worksheet_Change(ByVal ...
删除了还是一样提示
阅读权限95
在线时间 小时
& & & & & & & &
删除了还是一样提示
删除一个End Sub后,从代码结构上应该是通的,如果再出错应该是其它原因,应该会弹出出的提示,看一下提示你什么。
最新热点 /1
京东ExcelHome畅销系列图书大联展,满100元-30元现金,莫失良机!
玩命加载中,请稍候
玩命加载中,请稍候
Powered by
本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任! & & 本站特聘法律顾问:徐怀玉律师 李志群律师请登录查看
分析宏代码所有宏过程都以关键词“Sub”开始,以关键词“End Sub”结束。在关键词“Sub”之后是宏的真正的名字,然后紧跟着是一对括号。在关键词Sub 和End Sub之间是那些你每次运行宏代码时VB执行的语句。VB从上到下读取语句,忽略那些句前带单引号的语句(参见上节关于注释的内容),读到EndSub时停止。请注意,录制的宏代码里包含许多停顿(译者:英文模式下的句号)。每行代码中都有停顿,用来连接VBA语言中不同的要素。如何阅读这种语言的用法呢?要从最后一个停顿的右边向左读。看看WhatsInACell里的一些语句:Range(&A1:A3&).Select选择A1到A3单元格Selection.EntireRow.Insert往选中的区域中插入行。因为前面你选中的是三个单元格(译者:应该说是占据了三行的单元格),VB将插入三行。ActiveCell.FormulaR1C1 = &Text&往当前单元格里输入“Text”。因为,之前的代码是Range(&B1&).Select,选择单元格B1,B1是当前激活的单元格,所有VB往B1单元格里面输入文本。With Selection.Interior& & & & & .ColorIndex = 3& & & & &&.Pattern = xlSolid& & & & &&.PatternColorIndex = xlAutomaticEnd With这是一段特别的代码块,解释如下:给当前选中的单元格设置单元格填充色为红色(ColorIndex=3),设置填充模式为实心(xlSolid),并且给当前单元格明确为默认的填充模式(xlAutomatic)。这个代码块以关键词With开始,EndWith结束,它将加速宏代码的执行。宏代码知道走捷径,而不会每次都重复下面的说明:Selection.Interior.ColorIndex = 3Selection.Interior.Pattern = xlSolidSelection.Interior.PatternColorIndex = xlAutomatic在关键词With后面紧跟重复的Selection.Interior,再以End With结尾。&清除宏代码你已经逐行解析了你宏代码,你会发现Excel录制了许多你并不想要包含进去的信息。例如,在选中了文本单元格后,除了设置字体为粗体和颜色为紫色之外,Excel 还录制了其它在字体页的选项——字体名称,字体大小,删除线,上标,下标,阴影和下划线。请看下列代码片断:With Selection.Font& & & & & .Name = &Arial&& & & & &&.FontStyle = &Bold&& & & & &&.Size = 10& & & & &&.Strikethrough = False& & & & &&.Superscript = False& & & & &&.Subscript = False& & & & &&.OutlineFont = False& & & & &&.Shadow = False& & & & &&.Underline = xlUnderlineStyleNone& & & & &&.ColorIndex = 13End With如果你使用了对话框,Excel总会录制所有的设定。这些多余的代码使得你的宏代码冗长而难以理解。因此,你完成录制宏后,最好检查一遍你录制的代码并删除不必要的行。1、在下面的代码中,删除带删除线的行:With Selection.Font& & & & &&.Name = &Arial&& & & & &&.FontStyle = &Bold&& & & & &&.Size = 10& & & & &&.Strikethrough = False& & & & &&.Superscript = False& & & & &&.Subscript = False& & & & &&.OutlineFont = False& & & & &&.Shadow = False& & & & &&.Underline = xlUnderlineStyleNone& & & & &&.ColorIndex = 13End With清除后,在关键词With和End With之间只剩下了两句代码,这些才是你在录制宏的时候真正做的设置:With Selection.Font& & & & &&.FontStyle = &Bold&& & & & &&.ColorIndex = 13End With2、找到设置数字单元格格式的代码,依照下面的例子修改代码:' Find and format cells containing numbersWith Selection& & & & &&.SpecialCells(xlCellTypeConstants, 1).Select& & & & &&.Font.ColorIndex = 11 ' Sets the font color to VioletEnd WithRange(&C6&).Select3、找到设置公式单元格格式的代码,依照下面的例子修改代码:' Find and format cells containing formulasSelection.SpecialCells(xlCellTypeFormulas, 23).SelectWith Selection.Font& & & & &&.FontStyle = &Bold&& & & & &&.ColorIndex = 3End With4、找到下述两行代码:Range(&A1:A3&).SelectSelection.EntireRow.Insert5、用下面的一句代码取代上面的两句代码:Range(&A1:A3&).EntireRow.Insert注意,Excel使用了R1C1形式来设置选中单元格个公式:ActiveCell.FormulaR1C1 = &Text&ActiveCell.FormulaR1C1 = &Numbers&ActiveCell.FormulaR1C1 = &Formulas&宏录制器使用了一次“ActiveCell”和一次“Selection”来选择当前单元格。这两个词都称为属性。你将在第二章里学习属性。当仅有一个单元格被选中时,你可以随意使用“ActiveCell”或者“Selection”。测试修改好的宏当你修改宏的时候,很可能会带入一些错误。例如,你可能会删除一行重要的代码,或者可能不注意清除或忽略了一个逗点(停顿)。为了确保你的宏在你修改之后还能正确地工作,你必须运行它。在VBE窗口,将光标放在宏代码WhatsInACell的任意行,选择“运行”-“运行模块/窗体”如果你在修改代码的时候,没有带入任何问题,那么宏将顺利运行,而不会有任何报错。你需要切换到Excel界面取看你的宏运行的结果。你可以点击任务栏,或者按Alt+F11回到Excel界面。如果宏在运行的过程中遇到错误,你将会看到一个对话框显示发现的错误类型。在你运行宏命令之前,你必须确保你的宏可以在当前激活的工作表里面运行。例如,你当前电脑上激活的时一个空的Excel工作表,你试图运行WhatsInACell,这时你将看到一个错误信息:“运行时间错误‘1004’-找不到单元格”。点击“结束”按钮,在你重新运行宏之前,确保选择了正确的工作表。如果选择的工作表只含有文本,你在运行WhatsInACell的时候,VB试图选择含有数字的单元格时会遇到同样的“找不到单元格”的错误。如果你忽略了WithSelection.Font中的逗点,VB会出现“运行时间错误‘424’-需要对象”的信息。点击信息框上的“调试”按钮,你将进到代码窗口。同时,VB会进入“中断”模式,并且将有问题的行用黄色突出出来。在你更正代码后,VB可能会弹出信息:“这个操作将会重置你的工程,继续?”点击确定。尽管你可以在中断模式修改代码,但是,有些修改会终止宏的继续执行。更正宏代码后,重新运行它,也许你会需要解决更多的错误,之后才能顺利地运行它。
意见反馈:
联系方式:
广告等垃圾信息
不友善内容
违反法律法规的内容
不宜公开讨论的政治内容excel 运行宏时总是提示编译错误:缺少 End Sub ,但是VBA编辑器中的代码中有 End Sub 下面是代码:_百度知道
excel 运行宏时总是提示编译错误:缺少 End Sub ,但是VBA编辑器中的代码中有 End Sub 下面是代码:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i%, j%, k%
If Target.Address = &$B$32& Then
Range(&c32:c65536&).ClearContents
For i = 1 To Range(&a65536&).End(xlUp).Row
For j = 1 To Range(&xdf1&).End(xlToLeft...
我有更好的答案
)不存在,应该是Range(&quot.Column这一行;xdf1&vf1&)吧;),Range(&quot.End(xlToLeft);xdf1&quot。这个代码应该是在列A里面搜索和单元格B32内容一致的表格,并且把表格地址和内容在C32以后打印出来For j = 1 To Range(&quot
采纳率:38%
你的这段代码没有这样的错误,会不是还有其他代码中存在这个问题? 2007以上版本有XDF列
代码行“For j = 1 To Range(&xdf1&).End(xlToLeft).Column”中的“Range(&xdf1&)&的引用“xdf1”错误其他在语法上没有错误
其他1条回答
为您推荐:
其他类似问题
excel的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。Excel VBA里面编译错误:缺少end sub怎么解决?_百度知道
Excel VBA里面编译错误:缺少end sub怎么解决?
我有更好的答案
看看是否中间有结束的地方,或者是加的end sub在执行时能被跳过去
采纳率:21%
缺少end if 或next
在代码最后加上end sub
已经在最后面加了,但还是这样!
为您推荐:
其他类似问题
excel的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。excel 运行宏时总是提示编译错误:缺少 End Sub_百度知道
excel 运行宏时总是提示编译错误:缺少 End Sub
我有更好的答案
最后1行输入END SUB
采纳率:45%
来自团队:
Column 这一行,Range(&xdf1&)不存在For j = 1 To Range(&xdf1&quot.End(xlToLeft);),应该是Range(&vf1&quot
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 吃鸡宏编程压枪 的文章

 

随机推荐