Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 400运行顺序错误,当我单步执行时可以_Excel_Vba - Fatal编程技术网

Excel 400运行顺序错误,当我单步执行时可以

Excel 400运行顺序错误,当我单步执行时可以,excel,vba,Excel,Vba,我正在制作一个宏工作表,它可以对数据进行排序和复制。我已经设置了一个运行按钮,以按必要的顺序逐步执行宏。当我按顺序单独运行每个宏时,它工作得非常好,但当我尝试使用“运行”按钮自动运行时,它会弹出一个400错误。当它试图运行Sheet3.Copy2 这是我的跑步宏: Sub RUN() Call ButtonDel Call DataDel Call Sort1 Call Sort2 Call Sort6 Call Sheet3.PrintNum2

我正在制作一个宏工作表,它可以对数据进行排序和复制。我已经设置了一个运行按钮,以按必要的顺序逐步执行宏。当我按顺序单独运行每个宏时,它工作得非常好,但当我尝试使用“运行”按钮自动运行时,它会弹出一个400错误。当它试图运行
Sheet3.Copy2

这是我的跑步宏:

Sub RUN()

    Call ButtonDel
    Call DataDel
    Call Sort1
    Call Sort2
    Call Sort6
    Call Sheet3.PrintNum2
    Call Sheet3.Copy2
    Call Sheet4.PrintNum6
    Call Sheet4.Copy6
    
End Sub
下面是正在崩溃的宏:

Sub Copy2()
    Dim xRow As Long
    Dim VInSertNum As Variant
    xRow = 1
    Application.ScreenUpdating = False
    Do While (Cells(xRow, "A") <> "")
        VInSertNum = Cells(xRow, "J")
        If ((VInSertNum > 1) And IsNumeric(VInSertNum)) Then
           Range(Cells(xRow, "A"), Cells(xRow, "J")).Copy
           Range(Cells(xRow + 1, "A"), Cells(xRow + VInSertNum - 1, "J")).Select
           Selection.Insert Shift:=xlDown
           xRow = xRow + VInSertNum - 1
        End If
        xRow = xRow + 1
    Loop
    Application.ScreenUpdating = False
End Sub
子副本2()
长得一样
作为变异体的淡葡萄酒
xRow=1
Application.ScreenUpdating=False
Do While(单元格(X行,“A”)“”)
VInSertNum=细胞(X行,“J”)
如果((VInSertNum>1)且为数字(VInSertNum)),则
范围(单元格(X行,“A”)、单元格(X行,“J”)。复制
范围(单元格(xRow+1,“A”)、单元格(xRow+VInSertNum-1,“J”)。选择
选择。插入移位:=xlDown
xRow=xRow+VInSertNum-1
如果结束
xRow=xRow+1
环
Application.ScreenUpdating=False
端接头

我被难住了

看来您正在为多个工作表运行宏,而没有激活引发错误的工作表

VBA中的某些事件需要在运行前激活工作表

试着做
sheet3.在声明变量后立即激活
,它就会工作

但是vba中的事件不是最好的方法,如果您只想从另一个范围中的某个范围获取值,请执行以下操作:

Range(Cells(xRow + 1, "A"), Cells(xRow + VInSertNum - 1, "J")).value = Range(Cells(xRow, "A"), Cells(xRow, "J")).value

在VBA编辑器中,在“xRow=1”行上放置一个断点,然后查看代码是否到达该行。如果有,请逐行检查代码。如果没有,那么你就陷入了“错误400”的黑暗世界:谷歌可能是你的朋友。另一方面,更好的做法是将屏幕更新的值存储在一个布尔变量中,然后在完成更新后使用该变量重置更新。我能够逐步执行,直到这行代码:
范围(单元格(xRow+1,“a”)、单元格(xRow+VInSertNum-1,“J”)。选择
Hmmm。缩小范围……更好的答案是“不选择”