- 22 Ago 2019 às 15:46
#47205
Olá, tenho um programa que venho trabalhando há tempo, que realiza exportação e importação de dados entre o arquivo do cliente e uma Database (.xls) no servidor.
A exportação é extremamente rápida, pois jogo somente os valores que foram alterados em uma variável, e através dela copio para base de dados.
Considerando que os valores a serem copiados são: Valor, Cor da fonte, Cor de fundo, Tamanho da Fonte,
na parte de importação uso esse código atualmente:
A planilha tem 2 mil linhas aproximadamente, com 39 colunas...
Ja tentei gravar em uma matriz pra então sim comparar os valores, mas ai não consigo comprar dados como "cor de fundo" por ex.
Alguma ideia?
A exportação é extremamente rápida, pois jogo somente os valores que foram alterados em uma variável, e através dela copio para base de dados.
Considerando que os valores a serem copiados são: Valor, Cor da fonte, Cor de fundo, Tamanho da Fonte,
na parte de importação uso esse código atualmente:
Código: Selecionar todos
Ele está lento, mesmo tentando aplicar um filtro pra ele não copiar as células em branco...Dim wbDatabase As Workbook
Dim sDatabase As Worksheet
Dim wbAtual As Workbook
Dim sAtual As Worksheet
Set wbDatabase = Application.Workbooks.Open("C:/database.xlsm") 'Database
Set wbAtual = ThisWorkbook 'Arquivo atual
Set sAtual = wbAtual.Worksheets(p) 'Planilha atual
Set sDatabase = wbDatabase.Worksheets(p) 'Planilha database
For i = 8 To sAtual.Cells(sAtual.Cells.Rows.count, 1).End(xlUp).Row 'Linhas
For j = 7 To 39 'Colunas
If sDatabase.Cells(i, j).Value <> sAtual.Cells(i, j).Value Then
'Definir valores
sAtual.Cells(i, j).Value = sDatabase.Cells(i, j).Value
sAtual.Cells(i, j).Interior.Color = sDatabase.Cells(i, j).Interior.Color
sAtual.Cells(i, j).Font.Color = sDatabase.Cells(i, j).Font.Color
sAtual.Cells(i, j).Font.Size = sDatabase.Cells(i, j).Font.Size
'Caso somente a cor de fundo seja diferente
ElseIf sDatabase.Cells(i, j).Interior.Color <> sAtual.Cells(i, j).Interior.Color Then
sAtual.Cells(i, j).Interior.Color = sDatabase.Cells(i, j).Interior.Color
'Caso somente cor da letra diferente
ElseIf sDatabase.Cells(i, j).Font.Color <> sAtual.Cells(i, j).Font.Color Then
sAtual.Cells(i, j).Font.Color = sDatabase.Cells(i, j).Font.Color
End If
Next
Next
A planilha tem 2 mil linhas aproximadamente, com 39 colunas...
Ja tentei gravar em uma matriz pra então sim comparar os valores, mas ai não consigo comprar dados como "cor de fundo" por ex.
Alguma ideia?