Modificando a macro do VBA para adicionar várias linhas vazias em qualquer lugar em uma planilha

1

Eu quero poder adicionar linhas vazias em qualquer lugar em uma planilha do Excel. Preciso especificar uma variedade de linhas vazias diferentes para inserir em várias linhas na planilha. Por exemplo, insira 100 linhas vazias a partir da linha 99.

Eu sou novo em macros e copiei uma macro da Internet e tentei adaptá-la, mas não consigo acertar a linha inicial. Eu notei as partes do código que estou confuso nos comentários do código.

Sub test()
Dim j As Long, r As Range

h = 0

j = 0


h = InputBox("type starting row")

j = InputBox("type the number of rows to be inserted")

Set r = Range("A2")  'Problem here -- I need to be able to change this to value from h'

Range(r.Offset(h, 0), r.Offset(j, 0)).EntireRow.Insert

Set r = Cells(r.Row + j, 1)

'MsgBox r.Address(the apostrophe in the beginning of this line makes this line non operable)


End Sub
    
por B Kelly 10.11.2015 / 15:21

2 respostas

0
Sub Macro1()

'You should give your variables meaningfull names
'But I will leave them as h and j for now.
Dim h As Integer
Dim j As Integer

j = InputBox("How many rows do you want?")

h = InputBox("At what line do you want them?")

    'You can use the variable in the range, this is how
    Range("A" & h).Select

    'This is called a FOR loop, google them - they are easy to use and a basic part of programming.
    For i = 1 To j
    Selection.EntireRow.Insert
    Next i

End Sub

Nota: Esta não é a solução mais elegante. É principalmente escrita para ser fácil de entender.

Você também pode reduzi-lo um pouco não selecionando primeiro um intervalo e inserindo na seleção da seguinte forma:

For i = 1 To j
Range("A" & h).EntireRow.Insert
Next i
    
por 10.11.2015 / 15:44
1

Você só precisa fazer alguns ajustes no código - está muito perto de funcionar como está. Veja meus comentários no código alterado abaixo.

Sub test()
Dim j As Long, r As Range

h = 0

j = 0


h = InputBox("type starting row")

j = InputBox("type the number of rows to be inserted")

'I moved this up one row so that the inserted rows are just below row h.
Set r = Range("A1")

'The second argument indicates the address of the bottom of the range. 
'This needs to take h into account so that the difference between the top and bottom is j rows.
Range(r.Offset(h, 0), r.Offset(h + j - 1, 0)).EntireRow.Insert

'The rest of the code wasn't doing anything, so I removed it.

End Sub
    
por 10.11.2015 / 18:45