0

次のコードに問題があります。

私のメインコードは「autofill_DSR」で、呼び出そうとしているサブルーチンは「アルゴリズム」です。「autofill_DSR」は Module1 に、「algorithm」は Module4 にあります。以前は、2 つのコードを分離せず、次のように記述した行に「アルゴリズム」の大部分がありました。

ただし、このサブルーチンを作成した後、コードの反復は 1 回しか行われません。これは、サブルーチンを 1 回実行しても返されないか、for ループの反復に問題があるためです。私はそれを理解することはできません。

サブルーチンに入ったときにシートを切り替えるため、「Sheet2」アクティベーションコマンドを使用します。これは、それと関係がある可能性があります。パブリック/プライベート変数宣言でしょうか?

どんな助けでも大歓迎です、ありがとう。


Sub autofill_DSR()

' Variable Declarations:

Dim x_count As Integer
Dim n As Integer
Dim item_a As String
Dim item_b As String
Dim test_string As String

' Variable Initializations:

test_string = "NN"
x_count = 0
Process_Control_NumRows = 16

' Main Data Transfer Code:

Sheets(Array("Sheet1", "Sheet2")).Select        'Create Array of all Sheets

' Process Control Sheet:

    For n = 0 To (Process_Control_NumRows - 1)  'Cycle 16 times for each
                                                'item in process controls tab
        Sheets("Sheet2").Activate       'Choose specific sheet
        Range("D1").Select              'Choose specific cell

        Call Module4.algorithm      'Call on subroutine (see algorithm code)

    Next n                  'increment index to account for offset

End Sub

Sub algorithm()

        'If an "x" or "X" is marked in the "Yes" column,
        'at descending cells down the column offset by the for loop index, n

        If (ActiveCell.Offset(n, 0) = "x" Or ActiveCell.Offset(n, 0) = "X") Then

            item_a = ActiveCell.Offset(n, -3).Value     ' Store Letter value
            item_b = ActiveCell.Offset(n, -2).Value     ' Store number value
            x_count = x_count + 1                       ' increment the total x count

            If (x_count > 5) Then

                Sheets("Sheet3").Activate               ' Switch over to Sheet 1
                Range("A1").Select                      ' Choose "Item" column, first cell
                ActiveCell.Offset((x_count - 6), 0).Value = (item_a & item_b)

                'Insert cocatenated value of item_a and item_b
                '(for example "A" & "1" = "A1")
                'at the cells under the "Item" column, indexed by x_count

            Else

                Sheets("Sheet1").Activate
                Range("A1").Select
                ActiveCell.Offset((x_count - 1), 0).Value = (item_a & item_b)

            End If

        End If

End Sub
4

1 に答える 1

1

に変更Sub algorithm()Sub algorithm(n as long)てから呼び出します

Call Module4.algorithm(n)
于 2013-07-23T14:52:31.367 に答える