2013-10-14 5 views
0

Мне нужно разрешить пользователям указывать, какую строку начать вставлять пустые строки в их набор данных. Остальная часть запроса работает нормально. Я просто не знаю, как включить эту последнюю переменную. Вот код, который у меня есть.Вставить переменное число строк, начинающихся с указанной пользователем строки

Dim NumRowsToInsert As Long 
Dim RowIncrement As Long 
Dim ws As Excel.Worksheet 
Dim LastRow As Long 
Dim LastEvenlyDivisibleRow 
Dim i As Long 

NumRowsToInsert = InputBox("How many rows would you like to insert between each 
row of data?")  'any number greater than 0 
RowIncrement = InputBox("How many rows of data between line inserts?")  'ditto 
Set ws = ActiveSheet 
With ws 
    LastRow = .Range("A" & .Rows.Count).End(xlUp).Row 
    LastEvenlyDivisibleRow = Int(LastRow/RowIncrement) * RowIncrement 
    If LastEvenlyDivisibleRow = 0 Then 
     Exit Sub 
    End If 
    Application.ScreenUpdating = False 
    For i = LastEvenlyDivisibleRow To 1 Step -RowIncrement 
     .Range(i & ":" & i + (NumRowsToInsert - 1)).Insert xlShiftDown 
    Next i 
End With 
Application.ScreenUpdating = True 
End Sub 

ответ

0

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

Dim NumRowsToInsert,FirstRow As Long 
Dim RowIncrement As Long 
Dim ws As Excel.Worksheet 
Dim LastRow As Long 
Dim LastEvenlyDivisibleRow 
Dim i As Long 

Do 
    FirstRow = InputBox("Please indicate at which row you want to start.") 
Loop until isnumeric(FirstRow) 'keeps on asking until they enter an actual number, otherwise the program will lose its mind when the user inputs a character 

NumRowsToInsert = InputBox("How many rows would you like to insert between each row of data?")  'any number greater than 0 
RowIncrement = InputBox("How many rows of data between line inserts?")  'ditto 
Set ws = ActiveSheet 
With ws 
LastRow = .Range("A" & .Rows.Count).End(xlUp).Row 
LastEvenlyDivisibleRow = Int(LastRow/RowIncrement) * RowIncrement 
If LastEvenlyDivisibleRow = 0 Then 
    Exit Sub 
End If 
Application.ScreenUpdating = False 
For i = LastEvenlyDivisibleRow To FirstRow Step -RowIncrement 
    .Range(i & ":" & i + (NumRowsToInsert - 1)).Insert xlShiftDown 
Next i 
End With 
Application.ScreenUpdating = True 
End Sub 
0

Я полагаю, дал прирост 4 и 1 линию разделения данных в 10 строк, которые хотели бы иметь первые и вторые группы 4 строк, 1 пустая строка вставляется между ними и последней группой из 2 строк данных. Это вставляет одну строку перед и делает остальную часть работы

For i = LastEvenlyDivisibleRow **+ 1** To 1 Step -RowIncrement 

, если вы не хотите, чтобы первая строка вставлена ​​Вы можете пропустить первый шаг цикла:

For i = LastEvenlyDivisibleRow **+ 1** To 2 Step -RowIncrement 
+1

Принимая ответ, как правило, выполняется через какое-то время, и в зависимости от того, какой ответ ответит на вопрос лучше. Иногда ответа нет - есть терпение. – Orbling

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