2015-06-08 3 views
0

Я делаю макрос для вычисления значений ячеек из заданного диапазона (начиная с ячейки до конечной ячейки) и повторяя ячейки до тех пор, пока не найдет нулевую ячейку (в ней нет значения).Стоп-цикл VBA (Application.InputBox)

Так рабочий процесс должен быть:

  1. Запуск ячейки (определяется пользователем);
  2. Конечная ячейка (определяется пользователем);
  3. Пронумеруйте значения до тех пор, пока не будет найдена пустая ячейка. Если пустая ячейка найдена, следующий столбец (Примечание: я предполагаю, что пустая ячейка является разрывом столбца);
  4. Проход через столбцы до тех пор, пока не будет достигнута конечная ячейка;
  5. Если конечная ячейка достигнута, , если она не заполнена, прокрутите колонку до тех пор, пока не будет найдена пустая ячейка;
  6. Остановите программу.

Он также должен получать значения из активной ячейки и вычислять сумму, когда она меняет колонку (теперь это просто идея, а не основная проблема).

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

Это то, что я сделал до сих пор (Примечание: обработка Нет ошибок на входе еще, чтобы быть добавлены позже):

Sub test01() 
    Dim startCell As Variant 
    Dim endCell As Variant  

    Range("A1").Select ' Starting cell position 
    startCell = Application.InputBox("A", "A", , , , , Type:=8) 'Start of range 
    endCell = Application.InputBox("B", "B", , , , , Type:=8) 'End of range 


    Do 
     If IsEmpty(ActiveCell) Then 
      ActiveCell.EntireColumn.Select 
      ActiveCell.Offset(0, 1).Select 

     Else 
      'Calculate data 
      ActiveCell.Offset(1, 0).Select 

      If ActiveCell.Column And ActiveCell.Row = endCell Then 
       Exit Do 
      End If 

     End If 

    Loop 

End Sub 

Есть sugestions на то, что я делаю неправильно и пути совершенствования Это? Спасибо :)

PS. Новое с vba.

+0

Пожалуйста, объясните это утверждение: если ActiveCell.Column и ActiveCell.Row = endCell Then. Спасибо и приветствую, –

+0

Я не знал, как получить абсолютную позицию ячейки, поэтому я решил ссылаться на ее колонку и адрес :) Спасибо за помощь! –

ответ

0

Бизнес-логика немного неясна, поэтому основываясь на лучшем предположение, решение может быть такими, как показано в следующем Excel VBA фрагменте коды:

Sub test01() 
    Dim startCell As Variant 
    Dim endCell As Variant 

    'Range("A1").Select ' Starting cell position 
    startCell = Application.InputBox("A", "A", , , , , Type:=8).Address 'Start of range 
    endCell = Application.InputBox("B", "B", , , , , Type:=8).Address 'End of range 

    Range(startCell).Activate ' Starting cell position instead of "A1" 

    Do 
     If IsEmpty(ActiveCell) Then 
      ActiveCell.EntireColumn.Select 
      ActiveCell.Offset(0, 1).Select 
      Exit Do 
     Else 
      'Calculate data 
      ActiveCell.Offset(1, 0).Select 
      If ActiveCell.Address = endCell Then 
       Exit Do 
      End If 
     End If 
    Loop 
End Sub 

Надеется, что это может помочь.

+0

Выдает сообщение об ошибке. 'Ошибка времени выполнения '1004' Метод 'Диапазон' объекта '_Global' failed' в строке' Range (startCell) .Activate'. Зачем? –

+0

Так как при всплывающем всплывающем окне InputBox вы должны щелкнуть по соответствующей ячейке, так что она появится в этом поле. Сделайте это дважды для строк начала и конца: я тестировал эту часть, и она работает нормально. С уважением, –

+0

Я протестировал его, но он не останавливается на адрес activecell –

Смежные вопросы