2013-07-23 4 views
0

У меня есть проблемы со следующим кодом:Excel VBA: Ошибка вызова SUBROUTINE

Мой основной код «autofill_DSR», подпрограмма Я пытаюсь вызвать это «алгоритм». «autofill_DSR» находится в модуле 1, «алгоритм» находится в модуле 4. Раньше я не разделял два кода, и у меня просто была большая часть того, что было в «алгоритме» в строке, где я пишу: Call Module4.algorithm, и программа сделала то, что я этого хотел.

После создания этой подпрограммы, она идет только через одну итерацию кода, тем не менее, , поскольку он выполняет подпрограмму один раз, но он либо не возвращается, или существует проблема с итерации для цикла. Я не могу понять.

Я использую команду активации «Sheet2», потому что я переключаюсь между листами, когда я ввожу подпрограмму, , которая может иметь какое-то отношение к ней, могут ли быть объявлениями public/private variable?

Любая помощь приветствуется, спасибо.


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 

ответ

1

Sub algorithm() изменения в Sub algorithm(n as long), а затем вызвать его с помощью

Call Module4.algorithm(n) 
+0

Да, это работало, я также должен был включать в себя x_count, спасибо. – user2608147