Bom dia nem sei se o titulo é o mais adequado, mas como estou me aventurando no mundo do VBA, me surgiu um questionamento
Tenho dois codigos que fazem basicamente a mesma coisa.
Ambos identificam um determinado valor em uma celula e copia a linha inteira e cola em outra aba, realizam outras tarefas mas o basico é isso
Primeiro codigo
Sub Baixa()
Application.ScreenUpdating = False
Sheets("Contas a Pagar").Select
Range("H7").Select
Do While ActiveCell <> ""
If ActiveCell.Value = "PAGO" Then
Intersect(Selection.EntireRow, _
Range("A:G")).Select
Selection.Copy
Sheets("Pagos").Select
Range("A1048576").End(xlUp).Select
ActiveCell.Offset(1, 0).Select
With Selection
.PasteSpecial Paste:=xlPasteValues
.PasteSpecial Paste:=xlPasteFormats
End With
Range("A6").Select
Sheets("Contas a Pagar").Select
ActiveCell.EntireRow.Delete
ActiveCell.Offset(0, 7).Select
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
Range("A7").Select
ActiveWorkbook.RefreshAll
MsgBox "Dados Atualizados Com Sucesso", vbOKOnly, "Atualizando Dados..."
Application.ScreenUpdating = True
ActiveWorkbook.Save
End Sub
Segundo codigo
Private Sub Cidade()
Dim WL As Worksheet
Dim WR As Worksheet
Dim WG As Worksheet
Dim WM As Worksheet
Dim SNOME As String
Dim ORG As String
Dim CID As String
Dim NOM As String
Dim CARG As String
Dim FUN As String
Dim VIN As String
Dim SIT As String
Dim LOT As String
Dim VEN As Currency
Dim I As Long
Dim J As Long
Dim Linha As Long
Dim Ulinha As Long
Dim Lin As Long
Dim Ulin As Long
Dim WGLin As Long
Set WL = Sheets("Listas")
Set WR = Sheets("Relação Geral")
Set WM = Sheets("Modelo")
Linha = 6
Lin = 6
Ulin = WR.Range("C" & Rows.Count).End(xlUp).Row
Ulinha = WL.Range("C" & Rows.Count).End(xlUp).Row
For I = Linha To Ulinha
SNOME = WL.Cells(Linha, 3).Value
WM.Copy After:=Sheets(Sheets.Count)
Set WG = Sheets("Modelo (2)")
For J = Lin To Ulin
ORG = WR.Cells(Lin, 2).Value
CID = WR.Cells(Lin, 3).Value
NOM = WR.Cells(Lin, 4).Value
CARG = WR.Cells(Lin, 5).Value
FUN = WR.Cells(Lin, 6).Value
VIN = WR.Cells(Lin, 7).Value
SIT = WR.Cells(Lin, 8).Value
LOT = WR.Cells(Lin, 9).Value
VEN = WR.Cells(Lin, 10).Value
If WR.Cells(Lin, 3).Value = SNOME Then
WGLin = WG.Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Row
WG.Cells(WGLin, 2).Value = ORG
WG.Cells(WGLin, 3).Value = CID
WG.Cells(WGLin, 4).Value = NOM
WG.Cells(WGLin, 5).Value = CARG
WG.Cells(WGLin, 6).Value = FUN
WG.Cells(WGLin, 7).Value = VIN
WG.Cells(WGLin, 8).Value = SIT
WG.Cells(WGLin, 9).Value = LOT
WG.Cells(WGLin, 10).Value = VEN
End If
Lin = Lin + 1
Next
ActiveSheet.Name = SNOME
Linha = Linha + 1
Lin = 6
Next
End Sub
Dependendo da quantidade de linhas o segundo codigo é de longe mais rapido no processamento que o segundo, e embora o segundo seja "mais facil de escrever" ja que é menos sucetivel a erros porque o proprio editor facilita a escrita, ele é muito mais trabalhoso ja que o numero de variaveis é muito maior e consequentemente mais detalhado.
Minha pergunta é da pra escrever o segundo codigo com menos linhas e sem a necessidade de declarar tantas variaveis.
Estou vendo a coisa do ponto de vista de quem esta escrevendo o codigo.
Acho o primeiro mais rapido para escrever pelo fato de ser menor.
Aguardo sugestões.
Marcelo Prudencio
Microsoft Excel Brasil no Facebook
"Começar já é a metade do caminho."
Autor Desconhecido
Simplifica que simples fica.
Nicole Tomazella.
"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.
Postado : 26/01/2016 9:10 am