'Oi, eu tive problemas com o acima, (Excel 2007); Ele continuou copiando o último valor no "rangeFrom" nas células abaixo do "rangeTo". Imprevisível. Às vezes funcionava, outras vezes não. Como resultado, tenho uma planilha com aproximadamente 100.000 linhas de dados que agora acredito estarem corrompidas ... D'OH!
Portanto, com base no que foi exposto, desenvolvi essas ideias com alguns recursos de segurança:
Sub copyIntoFilteredRange()
Dim rTo As Range
Dim rFrom As Range
Dim j As Integer
Dim k As Integer
Set rFrom = Application.InputBox("Select Copy Range", , , , , , , 8)
Set rTo = Application.InputBox("Select Paste Range", , , , , , , 8)
' The following If-Then segment ensures that ranges are the same size:
If rFrom.Rows.Count = rTo.Rows.SpecialCells(xlCellTypeVisible).Count Then
j = 1
' j will count until the correct number of cells is copied
Do While j < rFrom.Rows.Count
For k = 1 To rTo.Rows.Count
' k will iterate through the whole of the rTo Range including hidden cells, and
' copying will only happen as long as 1. j <= no. of cells in range and
' 2. The cell is not hidden.
If rTo.Rows(k).Hidden = False Then
rFrom.Rows(j).Copy Destination:=rTo.Rows(k)
j = j + 1
End If
Next k
Loop
Else
MsgBox "The sizes do not match"
End If
End Sub
Sou novo no VBA (mais confortável com Java e novato nisso também), então, por favor, aponte os erros dos meus caminhos, se necessário.
Felicidades pela ajuda!
Ben