Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Макрос на заполнение ячеек в цикле, где ошибка?
 
В общем, задача такая. Есть форма с одним textbox и кнопкой ок. При нажатии на кнопку нужно чтобы происходил цикл: если ячейка в столбце A не пустая, то в ячейке столбца U должно записаться значение из textbox, увеличенное на 1, в следующей ячейке на 2 и т.д.
Код
Private Sub CommandButton1_Click()
per = UserForm1.TextBox1.Value

For n = 2 To i
If IsEmpty(Cells(n, 1)) = False Then
per = per + 1
Cells(n, 21).Value = per
Else
Exit For
End If
Next n

End Sub

Подскажите, как это правильно оформить, пожалуйста.
Изменено: kamlayka - 6 Мар 2017 02:22:18
 
.
 
Да ради бога)))
Код
Private Sub CommandButton1_Click() 
per = UserForm1.TextBox1.Value 

For n = 2 To i 
If IsEmpty(Cells(n, 1)) = False Then 
per = per + 1 
Cells(n, 21).Value = per 
Else 
Exit For 
End If 
Next n 

End Sub 
 
kamlayka, сделайте это (оформление кода) в стартовом сообщении.
По вопросу: где у Вас присваивается значение переменной i?
И обратите внимание на принудительный выход из цикла )
 
Юрий М, ммм, а можете подсказать?
Во-первых, я не знаю, чему должно равняться значение i (по идее количеству не пустых ячеек в столбце А). Как вообще сделать цикл, который прерывается, если в ячейке (Cells(n, 1)) будет пусто?
 
kamlayka, Вам что то вроде такого надо ? Или я ошибаюсь ?
Изменено: Александр - 6 Мар 2017 04:35:29
 
Александр, вы великолепны, благодарю!)
 
Александр, можете еще немножко помочь? Не знаю, как сравнить первые 6 символов активной ячейки с предыдущей. Мне нужно сделать условие: если у активной ячейки совпадают первые 6 символов с предыдущей, тогда значение во втором столбце тоже берется из ячейки выше. Если нет - тогда Cl.Offset(0, 3).Value = per

Подскажите хотя бы функции, а то не знаю, куда двигаться. Пример, как должно быть подкрепляю
 
Цитата
kamlayka написал:
Подскажите хотя бы функции
Код
If Left(ActiveCell, 6) = Left(ActiveCell.Offset(-1, 0), 6) Then ...
 
kamlayka, Не понимаю почему должно быть именно так, как в вашем примере, нелогично как то (было 5882 и следом 5889), но дело ваше.
 
Александр, вы не совсем правильно меня поняли. Но на основе вашего макроса я сумела поправить свой. У меня остался только один вопрос, я не совсем понимаю действие Rng.Columns(1).SpecialCells(2). Rng.Columns(1) - это наш столбец А, а SpecialCells(2) - вторая ячейка что ли??
Код
Private Sub CommandButton1_Click()
Dim Cl As Range, Cl1 As Range, Rng As Range, per As Long
Application.ScreenUpdating = False
per = UserForm1.TextBox1.Value
Set Rng = ActiveSheet.UsedRange

For Each Cl In Rng.Columns(1).SpecialCells(2)
    per = per + 1
    Cl.Offset(0, 1).Value = per

If Left(Cl, 6) = LastCl Then
        Cl.Offset(0, 4).Value = Cl.Offset(-1, 4).Value

        Else
        Cl.Offset(0, 4).Value = per
        LastCl = Left(Cl, 6)
    End If

Next
Application.ScreenUpdating = True
Unload Me
End Sub
 
kamlayka. Есть действительно трюки и секреты, которые не отражаются в инструкциях и документации, но на 99% подобных вопросов ответит сайт производителя
Range.SpecialCells Method (Excel)
 
БМВ, теперь понятно, большое спасибо)
 
kamlayka,
Цитата
kamlayka написал:
вы не совсем правильно меня поняли.
Извините, как написали так и понял =)
Цитата
kamlayka написал:
Пример, как должно быть подкрепляю
Страницы: 1
Читают тему (гостей: 1)
Наверх