博文

目前显示的是 十月, 2021的博文

VBA学习笔记1:错误语句的处理方式

案例分析:现有工作簿A和工作簿B,A中有一些工作表与B中的工作表同名,也有一些工作表B中没有。需要把A和B同名的那些工作表内容从B数值化粘贴到A对应的表里。 此案例看起来比较简单,最重要的一步就是复制粘贴,很容易实现;通过A工作簿里的表名去找B里对应的表也比较容易,把表名设定为变量即可。难点在于A有,B没有的工作表如何处理。 首先设置几个变量,便于后面的引用: Dim Nonesht As String '在B中找不到对应工作表的提示 Dim shtname As String '需要复制粘贴的表名 Dim Desbook As Workbook '目标工作簿A Dim Soubook As Workbook '来源工作簿B 因为工作簿名比较长,所以用Desbook和Soubook来表示。用如下语句开启循环,确保A中的每个工作表都能进入循环中。同时为shtnam赋值当前A中工作表的表名,以便后续复制粘贴时可以引用。 For i = 1 To Desbook.Worksheets.Count Shtname = Desbook.Worksheets(i).Name 如果A中的工作表在B中没有对应,我初步的想法是用goto语句跳转。如何判断shtname是否在B工作簿中呢?我用了is nothing语句 If Soubook.Worksheets(Shtname) Is Nothing Then     GoTo skip Else 但是这个语句会报”下标溢出“的错误,因为如果Shtname不在B里,那表达式Soubook.Worksheets(Shtname)就是错误的。 所以我在前面加上了on error resume next的语句,期望如果报错忽略继续运行,结果依然报错。 这样犯了逻辑上的错误。系统无法判断一个错误的东西是不是不存在!既然Worksheets(Shtname)的语句错误,那后面is nothing根本无从谈起。 改进后如下:      On Error Resume Next      shtnam = Soubook.Worksheets(Shtname).Name         If Err <> 0 Then             Nonesht