2014-11-12 5 views
0

Я работаю со следующим, но с трудом с выбором фактической ячейки включен во время цикла. Он вытаскивает диапазон ячеек, проверяя, имеет ли их значение> 0, а затем, если это так, следует добавить 3 столбца вправо. Это то, что у меня есть до сих пор, не уверен, насколько он эффективен:VBA добавить столбцы, если ячейка содержит значение

Dim varray As Variant 
    Dim x As Long 

    varray = Range("E13:AK13").Value 

    For x = UBound(varray, 1) To LBound(varray, 1) Step -1 
     If varray(x, 1) > 0 Then 

      varray(x, 1).Activate 'ISSUE ON THIS LINE 
      ActiveCell.EntireColumn.Offset(0, 1).Insert (xlShiftToRight) 
      ActiveCell.EntireColumn.Offset(0, 1).Insert (xlShiftToRight) 
      ActiveCell.EntireColumn.Offset(0, 1).Insert (xlShiftToRight) 
      'substract 2 
     End If 
    Next 

ответ

0

Попробуйте это вместо этого.

Dim x As Long, rng As Range 

Set rng = Range("E13:AK13") 

For Each cell In rng 
    If cell > 0 Then 
     cell.EntireColumn.Offset(0, 1).Insert (xlShiftToRight) 
     cell.EntireColumn.Offset(0, 1).Insert (xlShiftToRight) 
     cell.EntireColumn.Offset(0, 1).Insert (xlShiftToRight) 
    End If 
Next cell 
0

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

Dim varray As Range 
Dim x As Long 

Set varray = Range("E13:AK13") 

''For x = UBound(varray, 1) To LBound(varray, 1) Step -1 
For Each c In varray 
    If c.Value > 0 Then 

     c.Select 'ISSUE ON THIS LINE 
     ActiveCell.EntireColumn.Offset(0, 1).Insert (xlShiftToRight) 
     ActiveCell.EntireColumn.Offset(0, 1).Insert (xlShiftToRight) 
     ActiveCell.EntireColumn.Offset(0, 1).Insert (xlShiftToRight) 
     'substract 2 
    End If 
Next c 
Смежные вопросы