- 08 Ago 2017 às 09:20
#25353
Olá amigos,
Tenho um problema no código a seguir:
Public Sub MontarBlocos()
LinhaFinal = Application.WorksheetFunction.CountA([TabOrdSuce[OrdOperPred]]) + 1
Matriz = Sheets("TabOrdSuc").Range("A:B")
On Error Resume Next
For i = 2 To LinhaFinal
Do
PrimeiraBloco = Sheets("TabOrdSuc").Cells(i, 11).Value
If PrimeiraBloco = "x" Then
i = i + 1
End If
Loop While PrimeiraBloco = "x"
PrimeiraBloco = Sheets("TabOrdSuc").Cells(i, 11).Value
Sheets("Blocos").Columns(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = PrimeiraBloco
Do
SegundoBloco = Sheets("Blocos").Columns(1).Cells(Rows.Count, 1).End(xlUp)
SegundaBloco = ""
Pesquisa = ""
Pesquisa = Application.WorksheetFunction.VLookup(SegundoBloco, Matriz, 2, False)
If Pesquisa <> "" Then
Sheets("Blocos").Columns(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = Pesquisa
End If
Loop While Pesquisa <> ""
Sheets("Blocos").Columns(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = "x"
Next i
End Sub
Este código monta a sequência que os eventos têm que acontecer. Na coluna A contém os serviços predecessores e na coluna B os serviços sucessores. Na coluna K “Primeira” identifico através de fórmula as primeiras de cada bloco, como pode ser visto na tabela. (A lógica para identificar as primeiras de cada bloco é que, se ela não é sucessora de outra, logo ela é a primeira do bloco).
Uma vez identificado as primeiras ordens de cada bloco, a macro identifica a sucessora e copia para a planilhas blocos, em seguida ele pega esta mesma ordem e realiza a pesquisa até que a mesma esteja vazia, depois ele vai descendo a coluna K até encontrar o próximo valor diferente de X e repete tudo até o final da tabela.
Problema: o código está muito lento quando o universo está muito grande, gostaria de otimizá-lo para melhor performance.
Muito obrigados.
Tenho um problema no código a seguir:
Public Sub MontarBlocos()
LinhaFinal = Application.WorksheetFunction.CountA([TabOrdSuce[OrdOperPred]]) + 1
Matriz = Sheets("TabOrdSuc").Range("A:B")
On Error Resume Next
For i = 2 To LinhaFinal
Do
PrimeiraBloco = Sheets("TabOrdSuc").Cells(i, 11).Value
If PrimeiraBloco = "x" Then
i = i + 1
End If
Loop While PrimeiraBloco = "x"
PrimeiraBloco = Sheets("TabOrdSuc").Cells(i, 11).Value
Sheets("Blocos").Columns(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = PrimeiraBloco
Do
SegundoBloco = Sheets("Blocos").Columns(1).Cells(Rows.Count, 1).End(xlUp)
SegundaBloco = ""
Pesquisa = ""
Pesquisa = Application.WorksheetFunction.VLookup(SegundoBloco, Matriz, 2, False)
If Pesquisa <> "" Then
Sheets("Blocos").Columns(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = Pesquisa
End If
Loop While Pesquisa <> ""
Sheets("Blocos").Columns(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = "x"
Next i
End Sub
Este código monta a sequência que os eventos têm que acontecer. Na coluna A contém os serviços predecessores e na coluna B os serviços sucessores. Na coluna K “Primeira” identifico através de fórmula as primeiras de cada bloco, como pode ser visto na tabela. (A lógica para identificar as primeiras de cada bloco é que, se ela não é sucessora de outra, logo ela é a primeira do bloco).
Uma vez identificado as primeiras ordens de cada bloco, a macro identifica a sucessora e copia para a planilhas blocos, em seguida ele pega esta mesma ordem e realiza a pesquisa até que a mesma esteja vazia, depois ele vai descendo a coluna K até encontrar o próximo valor diferente de X e repete tudo até o final da tabela.
Problema: o código está muito lento quando o universo está muito grande, gostaria de otimizá-lo para melhor performance.
Muito obrigados.
Você não está autorizado a ver ou baixar esse anexo.