宏退出range()。resize()。insert

时间:2013-02-23 19:16:32

标签: excel-vba vba excel

我对vba宏相对比较新,并且学会了解决方法,但是我不擅长调试或解决问题。

我有一个正在退出的宏:

.Range(“B”& y_lst).Resize(34,10).Insert Shift:= xlDown

宏可以使用2个工作簿。 'wscflow'是在全局声明的非活动打开工作簿'wbsource'上的工作表。 Fluid_Results是活动工作簿中的例程,但是另一个模块。 'wsactive'是宏访问的表单,并在调用Read_Complex的例程中设置。 “Read_Pipe”是此模块中的一个例程。

有谁能告诉我为什么这一行会导致宏退出?

我应该澄清;该行执行,但之后立即退出,它不执行下一行。

此致 阿瑟

Sub Read_Complex()
   Dim x_lst As Integer, y_lst As Integer, z_lst As  Integer, i As Integer
   wscflow.Range("T7").Value = 10
   Application.Run ("'" & wbsource.Name & "'!Set_Rng")
   x_lst = wscflow.Range("S7").Value
   z_lst = wsactive.Range("B" & Rows.Count).End(xlUp).Row - 23
   z_lst = ((z_lst - 24) + 330) / 34
   If wscflow.Range("O" & x_lst).Value = "Total:" Then
      x_lst = x_lst - 2
   End If
   Call Fluid_Results
   If x_lst = 10 Then
      MsgBox ("Only one pipe," & vbCr & _
           "please use Single Pipe Flow")
   Else
  For x = 10 To x_lst
     y_lst = wsactive.Range("B" & Rows.Count).End(xlUp).Row - 22
     wscflow.Range("T7").Value = x
     Application.Run ("'" & wbsource.Name & "'!Set_Rng")
     Application.Run ("'" & wbsource.Name & "'!Rev_Copy")
     Application.Run ("'" & wbsource.Name & "'!Fwd_Copy")
     With wsactive
        If x < 12 Then
           y_lst = y_lst - 1
           Call Read_Pipe
           If .Name = "Series_Pipe_Flow" Then
              .Range("F" & y_lst).Offset(8, 0).Formula = "=F14+F48"
              For i = 17 To 20
                 .Range("F" & y_lst).Offset(i, 0).Formula = "=F" & i + 7 & "+F" & i + 41
              Next i
              For i = 22 To 23
                 .Range("F" & y_lst).Offset(i, 0).Formula = "=F" & i + 11 & "+F" & i + 45
              Next i
           ElseIf .Name = "Parallel_Pipe_Flow" Then
              .Range("F" & y_lst).Offset(15, 0).Formula = "=F22+F56"
              .Range("F" & y_lst).Offset(19, 0).Formula = "=F27+F61"
              .Range("F" & y_lst).Offset(22, 0).Formula = "=F33+F67"
              .Range("F" & y_lst).Offset(23, 0).Formula = "=F34+F68"
           End If
        Else
           If x_lst = z_lst Then
              y_lst = y_lst - 1
           Else
              .Range("B35:K68").Copy
              .Range("B" & y_lst).Resize(34, 10).Insert Shift:=xlDown
'                  .Range("B" & y_lst).PasteSpecial xlPasteAll
              y_lst = y_lst + 33
              Application.CutCopyMode = False
           End If
           Call Read_Pipe
           If .Name = "Series_Pipe_Flow" Then
              .Range("F" & y_lst).Offset(8, 0).Value = .Range("F" & y_lst).Offset(8, 0).Value _
                                                           + .Range("F" & y_lst).Offset(-20, 0).Value
              .Range("F" & y_lst).Offset(11, 0).Value = .Range("F" & y_lst).Offset(-17, 0).Value
              .Range("F" & y_lst).Offset(14, 0).Value = .Range("F" & y_lst).Offset(-14, 0).Value
              For i = 17 To 20
                 .Range("F" & y_lst).Offset(i, 0).Value = .Range("F" & y_lst).Offset(i, 0).Value _
                                                           + .Range("F" & y_lst).Offset(i - 27, 0).Value
              Next i
              For i = 22 To 23
                 .Range("F" & y_lst).Offset(i, 0).Value = .Range("F" & y_lst).Offset(i, 0).Value _
                                                           + .Range("F" & y_lst).Offset(i - 23, 0).Value
              Next i
           ElseIf .Name = "Parallel_Pipe_Flow" Then
              .Range("F" & y_lst).Offset(15, 0).Value = .Range("F" & y_lst).Offset(15, 0).Value _
                                                           + .Range("F" & y_lst).Offset(-12, 0).Value
              .Range("F" & y_lst).Offset(19, 0).Value = .Range("F" & y_lst).Offset(19, 0).Value _
                                                           + .Range("F" & y_lst).Offset(-7, 0).Value
              .Range("F" & y_lst).Offset(22, 0).Value = .Range("F" & y_lst).Offset(22, 0).Value _
                                                           + .Range("F" & y_lst).Offset(-1, 0).Value
              .Range("F" & y_lst).Offset(23, 0).Value = .Range("F" & y_lst).Offset(23, 0).Value _
                                                           + .Range("F" & y_lst).Offset(0, 0).Value
           End If
        End If
     End With
  Next x
   End If
   z_lst = wsactive.Range("B" & Rows.Count).End(xlUp).Row - 23
   z_lst = ((z_lst - 24) + 330) / 34
   For i = 0 To z_lst - x_lst + 1
  wsactive.Range("B" & y_lst + 1).Offset(-i * 34, 0).PageBreak = xlPageBreakManual
   Next i
   wscflow.Range("T7").ClearContents
End Sub

1 个答案:

答案 0 :(得分:0)

我认为您可能在副本和插入之间存在大小差异。 resize函数有34但下一个函数将变量增加33.我认为34需要33。

如果您将变量打印到调试窗口,您将能够看到它们是什么,例如debug.print "y_1st = " & y_1st

此外,对于视觉添加.Range("B" & y_lst).Resize(34, 10).Select并在其后面的行中断代码,以查看它是否在excel中具有正确的大小。