Страницы: 1
RSS
Вставка строк (правка готового макроса)
 
Добрый день, уважаемые форумчане!
Пытаюсь немного подредактировать следующий код:
Код
Sub Вставка_строк()
Dim i As Long, iLastRow As Long, col1 As Range
    With Application
        .ScreenUpdating = False
        Set col1 = Application.InputBox(Prompt:="Выберите столбец", Type:=8)'выбор столбца
        iLastRow = Cells(Rows.Count, 5).End(xlUp).Row 'вместо номера столбца хочу указать переменную столбца, но вылетает ошибка
        If iLastRow = 1 Then
            MsgBox "Нет данных в выбранном столбце", vbExclamation, "Ошибка"
            Exit Sub
        End If
            For i = iLastRow To 5 Step -1
                If Cells(i, 5) <> Cells(i - 1, 5) Then
                    Cells(i, 1).EntireRow.Insert
                    i = i - 1
                End If
            Next i
        .ScreenUpdating = True
    End With
End Sub

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

Помогите, пожалуйста, поправить код. Заранее огромное спасибо!

Изменено: Leojse - 28.06.2017 22:57:18
 
Цитата
при выполнении кода я мог сам задавать столбец
Код
Sub Вставка_строк()
Dim i As Long, iLastRow As Long, col1 As Integer
   Application.ScreenUpdating = False
        col1 = Application.InputBox(Prompt:="Выберите столбец", Type:=1) 'выбор столбца
        iLastRow = Cells(Rows.Count, col1).End(xlUp).Row 'вместо номера столбца хочу указать переменную столбца, но вылетает ошибка
 
Вы рано отключили обновление экрана - сделайте это позже.
Код
    With Application
'        .ScreenUpdating = False
        Set col1 = Application.InputBox(Prompt:="Выберите столбец", Type:=8) 'выбор столбца
        iLastRow = Cells(Rows.Count, col1.Column).End(xlUp).Row 'вместо номера столбца хочу указать переменную столбца, но вылетает ошибка
И неплохо бы добавить проверку, что в выделение попало не больше одного столбца.
 
Kuzmich, спасибо большое за внимание! Но вновь вылетает ошибка: Application-defined or object-defined error.
Не могли бы Вы подсказать, в чем может быть проблема?
 
Вы вставили мой кусок вместо вашего?
Код
Dim col1 As Integer
        col1 = Application.InputBox(Prompt:="Выберите столбец", Type:=1) 'выбор столбца
Изменено: Kuzmich - 28.06.2017 23:41:34
 
Kuzmich, да, вставил.  
 
Leojse, и на мой вариант ругается?
 
Юрий М, да, и на Ваш вариант... Ругается на col1.Column.
 
Юрий М,
Type:=8 требует объект Range, а надо вводить число
 
В моём варианте следует ткнуть мыхой по любой ячейке нужного столбца - я так понял задачу:
Цитата
Мне бы хотелось, чтобы при выполнении кода я мог сам задавать столбец

Потому и тип 8, потому и col1.Column
 
Юрий М, если выбираю ячейку в столбце, то выдается Object variable or With block variable not set.
 
У меня никакой ошибки не появляется. Вот код целиком:
Код
Sub Вставка_строк()
Dim i As Long, iLastRow As Long, col1  As Range
    With Application
'        .ScreenUpdating = False
        Set col1 = Application.InputBox(Prompt:="Выберите столбец", Type:=8) 'выбор столбца
        iLastRow = Cells(Rows.Count, col1.Column).End(xlUp).Row 'вместо номера столбца хочу указать переменную столбца, но вылетает ошибка
        If iLastRow = 1 Then
            MsgBox "Нет данных в выбранном столбце", vbExclamation, "Ошибка"
            Exit Sub
        End If
        .ScreenUpdating = False
        For i = iLastRow To 5 Step -1
            If Cells(i, 5) <> Cells(i - 1, 5) Then
                Cells(i, 1).EntireRow.Insert
                i = i - 1
            End If
        Next i
        .ScreenUpdating = True
    End With
End Sub
 
Юрий М, мистика какая-то... Скопировал Ваш код - работает, сравнил с тем, что есть у меня - то же самое, но не работает...
В любом случае, большое спасибо!
 
Юрий М,
В коде дальше надо в Cells вместо 5 подставить Col1.Column
 
Код
Sub Вставка_строк()
Dim i As Long, iLastRow As Long, col1 As Integer
   Application.ScreenUpdating = False
         col1 = Application.InputBox(Prompt:="Выберите столбец", Type:=1) 'выбор столбца
        iLastRow = Cells(Rows.Count, col1).End(xlUp).Row 'вместо номера столбца хочу указать переменную столбца, но вылетает ошибка
        If iLastRow = 1 Then
            MsgBox "Нет данных в выбранном столбце", vbExclamation, "Ошибка"
            Exit Sub
        End If
            For i = iLastRow To 5 Step -1
                If Cells(i, col1) <> Cells(i - 1, col1) Then
                    Cells(i, 1).EntireRow.Insert
                    'i = i - 1
                End If
            Next i
   Application.ScreenUpdating = True
End Sub
 
Кузьмич, скорее всего именно так, но я говорил ТОЛЬКО про момент определения номера столбца, в котором будем искать последнюю заполненную ячейку )
Leojse, обратите внимание на #14.
 
Kuzmich, Юрий М, скопировал код и выделил столбец. Ругается на строчку:
Код
 iLastRow = Cells(Rows.Count, col1).End(xlUp).Row 

Ошибка: Application-defined or object-defined error
 
Цитата
скопировал код и выделил столбец
В моем коде надо вводить номер столбца (например 5)
 
Leojse, Вы про чей код говорите? Какой тип переменной присвоили?
 
Юрий М, я скопировал код из сообщения #15 и выделил столбец. Выдается ошибка, описанная в моем сообщении #17.
 
Вы прочитали сообщение #18?
 
Kuzmich, спасибо. Извините, пожалуйста, впредь буду внимательнее.
Юрий М, Kuzmich еще раз Вам спасибо!
 
Leojse, Вы не понимаете разницу: в моём варианте нужно кликнуть по какой-нибудь ячейке нужного столбца, а в варианте Кузьмича нужно вручную ввести число в поле запроса.  
 
Да, ранее уже понял. Спасибо!
Страницы: 1
Наверх