想问下VBA中代码自行中断为啥

现在我调用其他四个工作簿内容粘贴到一个固定的工作簿中,单独按F8一步一步操作没问题,但是一键运行时有时正常出来数据,但有时只有一半工作簿数据粘贴过来,代码就中断了,有时又只拷贝一个工作簿数据过来,为啥啊,不能执行完就自动终止了

img

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7505247
  • 除此之外, 这篇博客: 【笔记】Excel 2021|(二)VBA删除数组中的一个元素、循环时删除一行、选择一列删除指定一行中的 方法1:利用动态数组,在循环中条件判断删除 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 但可以结合动态数组,将删除元素的数组赋值给新数组,如下代码。其中的b数组便是删除元素后的新数组:

    arr1 = Array(1, "特定条件", 3, 999, 1, "特定条件", 3) '定义一个数组
    Dim b() As String   '定义新数组
    k = 0   '记录新数组的长度
    For i = 0 To UBound(arr1)  '用数组长度来判断是否遍历完成
        If (InStr(1, arr1(i), "特定条件", 0) <= 0) Then
            ReDim Preserve b(0 To k)    '添加到新数组
            b(k) = arr1(i)
            k = k + 1
        End If
    Next
    '结果是b = Array(1, 3, 999, 1, 3)
    

    参考:vba中怎样去掉数组中的空值-百度知道-jmeycn

    注意,用UBound获取数组长度,而不是Len。在VBA中,Len是用来获取Expression的长度的,如字符串长度;UBound返回指定数组的最大下标。
    注意2:当数组长度为0时,用UBound获取长度会产生“下标越界”错误。所以这里用k作为新数组的长度值。

  • 以下回答由chatgpt基于相关博客总结生成:

    问题分析:

    出现数据只复制了部分或中断的情况,可能是由于多种原因引起的。一种可能是代码中存在错误或逻辑不够清晰;另一种可能是数据复制时出现了异常情况,例如出现了空白行或复制区域不正确的情况。

    解决方案:

    1.检查代码逻辑

    首先需要检查代码是否有明显的错误或逻辑上的问题,例如是否有死循环、变量未初始化、引用错误等。可以使用调试工具逐步执行代码,查看代码在执行过程中是否存在问题。如果存在问题,需要及时修改。

    2.增加代码容错机制

    可以在代码中增加一些容错机制,例如在复制数据之前检查数据是否存在,检查复制区域是否正确,如果出现异常情况及时停止复制,并输出错误信息。例如:

    If k = 0 Then MsgBox "表格" & sht.Name & "无数据!" Exit Sub End If

    If rng Is Nothing Then MsgBox "表格" & sht.Name & "复制区域为空!" Exit Sub End If

    3.优化代码效率

    在复制大量数据时,代码效率会对复制速度产生很大影响。可以优化代码以提高复制速度。例如可以使用数组临时存储数据,然后一次性写入目标工作表;避免使用非必要的循环,可以使用工作表函数快速统计数据等。

    4.使用合适的错误处理方式

    在代码中使用合适的错误处理方式,例如使用On Error语句捕获异常,或者使用Try-Catch语句处理异常,可以保证代码的健壮性,并及时输出错误信息,有助于排查问题。例如:

    On Error Resume Next '复制数据的代码 If Err.Number <> 0 Then MsgBox "复制数据出现错误!" & vbCrLf & Err.Description Exit Sub End If On Error GoTo 0