excel剪贴板出现问题 VBA问题

EXCEL VBA 错误处理一个小技巧当你写的宏开始有点复杂有点长的时候,常有考虑不到的地方,有点虫在所难免。自己用用,有错误按个Debug冲进去三两下搞定倒也无所谓。但是你如果把宏给别人用。 就麻烦了。有什么问题都来找你。况且用别人的电脑当面debug还是有点压力的。 :)就不得开始考虑错误处理的问题.处理错误的目的是可帮助快速debug和绕过不重要的错误.VBA默认错误处理是On Error GoTo 0, 就是当出现问题时候, 显示错误. 按OK可直接退出 或者按debug进入VBE debug. 这样对用户当然是不大友好, 对码code的人又有点信息不足.写自定义错误处理, 我们有两个常用选择:On Error GoTo label/Line : 有错误的时候跳到标签或者行On Error Resume Next : 跳过错误直接执行下一行一般常见的设置是这样的, 前面设置一个On Error GoTo 标签, 后面标签里面含错误处理. 如下面例子:Sub test()
"有错误跳到标签errorhandle"
On Error GoTo errorhandle:
....... '你的代码
"代码执行到这里没有错误的话, 可以直接退出sub了,不需要往下继续执行errorHandle标签"
"便签通常放在代码的最后, 错误出现, 从错误地方跳到这里执行代码."
errorhandle:
"这里错误号码Err.Number=0 就是没有error, &0就是有error"
If Err.Number & 0 Then
"有错误输出Err.Description & Err.Number跟On Error GoTo 0的信息是一样的."
MsgBox Err.Description & Err.Number
'其他处理的代码
问题是很多时候一个错误标签不够用, 多个标签又太麻烦. 因为你既要写标签, 又要在前面正确的地方引用它. 有不少活很烦人.下面介绍一下我的做法:一个处理变量 + 加一个错误标签 这个变量装的是代码的逻辑描述,. 很多时候我直接用它来代替注释, 或者说把注释装到变量里面去. 这样代码一路下来这个变量都不停的更新到最新的注释. 然后我只设一个错误处理标签, 里面用这个变量来处理错误.这种做法的最大好处是增加处理非常方便.例子如下:Sub test()
Dim q as String '注释变量
On Error GoTo errorhandle:
q = '01 武松上山'
....... '你的代码1
q = '02 武松睡了喝酒'
....... '你的代码2
q = '03 武松醉了遇到老虎'
....... '你的代码3
q = '04 武松打老虎'
....... '你的代码4
errorhandle:
If Err.Number & 0 Then
"我自己最常用的用法就是输出q加错误信息和错误代码, 用来判断错误出现区间."
MsgBox Err.Description & Err.Number &" " & q
"你可以用q的内容进一步细分处理"
Select Case q
Case left(q,2)='04'
MsgBox "没有老虎啊!"
Case left(q,2)='02'
MsgBox "没有喝酒啊!"
End Select
我一般就是先用最简单的设置. 如本文开头那种. 留个变量q, 重要需注释的地方顺手就加个q="01 注释". 甚至什么都不加. 让q 等于空.后面看那块出错用MsgBox Err.Description & Err.Number &" " & q. 一般情况下出现常见的错误, 往上加新的注释q就可以了. 细分处理也方便, 一次设置 select case. 往里面加 Case left(q,20) 条件就可以了.需要指出的是, 原则上很多的出错, 都应该改code把它处理掉. 但由于不是码农, 还是比较懒. 有些还不一定可以处理的掉. 比如我有一个宏每天帮人自动执行大概50个Excel里面的宏. 就经常遇到各种因为权限出现的错误还有文件坏了的错误. 网上大都关于VBA 错误处理的文章都建议不用On Error Resume Next, 将用它之视为程序员懒惰的表现之一。个人认为如果紧跟On Error Resume Next 的代码比较简单,而且功用单一的话。On Error Resume Next 未尝不是一个对On Error GoTo Label方便的补充。大家是不是常常想VBA为什么没有像函数一样的Iferror syntax呢?每次都要搞个On Error GoTo Label太烦了吧。 我不知道有没有别人跟我一样想法。 有一天我突然想到原来用On Error Resume Next 加 If Err.Number & 0 可以做一个轻量级的错误处理。具体如何做,看下面这个例子:If Len(Dir(Path)) & 0 Then
On Error Resume Next
Set wb = Workbooks.Open(FileName:=Path, ReadOnly:=True, UpdateLinks:=False)
If Err.Number & 0 Then
q = "Open file again with Repair option"
wb.Close savechanges:=False
Set wb = Nothing
Set wb = Workbooks.Open(FileName:=Path, ReadOnly:=True, CorruptLoad:=XlCorruptLoad.xlRepairFile, UpdateLinks:=False) 'try fixing it
前面有提到,我有个宏打开其他Excel文件并执行里面的宏。文件夹里面有时有坏掉的文件。当我的宏打开这个文件的时候就会出现错误停下来。上面的这一段代码就是尝试处理这种情况:1 先判断文件存不存在, path存着文件的地址。Len(Dir(Path)) & 0
2 打开文件之前放 On Error Resume Next, 这样紧跟着这一行打开文件代码有什么问题的话,就跳到下一行。On Error Resume Next
Set wb = Workbooks.Open(FileName:=Path, ReadOnly:=True, UpdateLinks:=False)
3 如果前面打开过程中有错误 (重点是前面虽然跳过了错误,但错误码还存在,Err.Number 还是大于0),就把打开的文件关掉,重新用xlRepairFile参数打开来尝试修文件. 这里面还有个可能就是上面的第2步文件完全没有打开,如果没有前面 On Error Resume Next,这一步把它关掉也会出错。
If Err.Number & 0 Then
q = "Open file again with Repair option"
wb.Close savechanges:=False
Set wb = Nothing
Set wb = Workbooks.Open(FileName:=Path, ReadOnly:=True, CorruptLoad:=XlCorruptLoad.xlRepairFile, UpdateLinks:=False) 'try fixing it
如果你能耐心看到这里,都是同道中人啊。 握手,握手 :) 大家工作顺利,生活愉快!哈, 逃)4添加评论分享收藏Excel VBA 如何快速学习? - 知乎<strong class="NumberBoard-itemValue" title="1被浏览<strong class="NumberBoard-itemValue" title="6,558分享邀请回答1.4K32 条评论分享收藏感谢收起85858 条评论分享收藏感谢收起EXCEL VBA的问题_百度知道
EXCEL VBA的问题
大神们你们好
我想做一个表格,能分别将12个月的文件夹内的XLS文件名全部提取出,并按月份写入sheet2 A~L列单元格(列如A列是一月份的、B列是2月份的...)。现在写的VB只能全部写在A列 有什么办法能按照前面我说的去执行?代码如下:
Dim aa As Variant, ...
我有更好的答案
Sheet2.Cells(m, 1) = myfile改成Sheet2.Cells(m, i) = myfile
你好, 我改了以后编程这样了
Loop Next 这个也要换成 loop m=0 next
采纳率:47%
为您推荐:
其他类似问题
您可能关注的内容
excel的相关知识
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。excel vba问题。_百度知道
excel vba问题。
address(row(a1),1+match(a1,b1:j1,0),4) 公式得到的单元格地址在vba中给r1,这样对吗?Set r1 = Range(&address(row(a1),1+match(a1,b1:j1,0),4)&),应该如何改正?请高手指点。谢谢!!
我有更好的答案
这个不用说,肯定是不对的,address属性的用法不对。怎么改呢?我没看明白,你的公式的意思,难道是用address得到单元格的行列?还是直接查找B1到J1等于A1的单元格?还是不对,查找到了R1,又赋值给了R1?我乱了。
不好意思,我是菜鸟,什么都不懂。这些公式也是求别人帮忙弄的。我说明一下,address(row(a1),1+match(a1,b1:j1,0),4)可得到单元格地址,Set r1 = Range(&address(row(a1),1+match(a1,b1:j1,0),4)&) 我要用上面的地址,给r1,然后再做下一步的使用。
address(row(a1),1+match(a1,b1:j1,0),4)我不太明白,为什么可以得到单元格地址?难道address的用法和cells是一样的? 其实你不用上传代码,而应该直接说你要得到什么样的结果。
A1列,是我要随意输入的数据,B1——J1是我已经输入的1——9的数据,采用条件格式,在B1——J1区域中与A1相等的单元等彩色填充,用的是=B1=$A1。然后用address(row(a1),1+match(a1,b1:j1,0),4)得到彩色填充单元格地址。我想将每行彩色填充的单元格用直线自动连接。不知道应该怎么设计程序。请前辈赐教!!万分感谢!!
这是VBA问题?我的天啊。好吧,我译成VBA?dim czdy as rangefor each czdy in range(&b1:j1&)
if czdy.value=range(&a1&) then
range(&r1&).value=cells(1,czdy.column)
采纳率:72%
来自团队:
将程序放入工作表的 Calculate 事件中,即:在对工作表进行重新计算之后产生此事件。&#92;r&#92;n当 公式的值 改变,也就是工作表重新进行了计算,计算完后执行这个事件 &#92;r&#92;nPrivate Sub Worksheet_Calculate()&#92;r&#92;n Columns(&A:F&).AutoFit&#92;r&#92;nEnd Sub
我是菜鸟,什么都不懂,能具体一点吗?不好意思。最好能写出程序或语句。
vba问题 我远程给你解决
为您推荐:
其他类似问题
您可能关注的内容
excel的相关知识
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。Excel 的 VBA 现在还算是办公利器吗? - 知乎<strong class="NumberBoard-itemValue" title="被浏览<strong class="NumberBoard-itemValue" title="0,078分享邀请回答3.7K167 条评论分享收藏感谢收起

我要回帖

更多关于 excel 隐私问题警告 的文章

 

随机推荐