2

私は 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
4

1 に答える 1

0

コピーとインサートのサイズに違いがあると思います。サイズ変更関数には 34 がありますが、次の関数は変数を 33 増やします。34 は 33 にする必要があると思います。

変数をデバッグ ウィンドウに出力すると、変数が何であるかを確認できますdebug.print "y_1st = " & y_1st

また、視覚的に a.Range("B" & y_lst).Resize(34, 10).Selectを追加し、その次の行でコードを分割して、Excel で正しいサイズかどうかを確認します。

于 2013-02-24T10:48:21.993 に答える