Notifications
Clear all

Erro ao Inserir Dados Externos

3 Posts
2 Usuários
0 Reactions
939 Visualizações
(@lamramalho)
Posts: 0
New Member
Topic starter
 

Boa tarde, pessoal. Agradeço se alguém puder me ajudar.
Tenho uma macro que insere dados de um CSV em uma planilha. A macro roda perfeitamente.
Todos os dados vem nos campos certos, separados por ";".
Acontece que se rodar essa macro duas vezes no arquivo, os dados vem de forma errada na segunda vez. Como se usasse "/" como delimitador.
Se fecho o arquivo e abro novamente a macro funciona normal.
Alguém sabe o que pode estar acontecendo?
Segue abaixo minha macro:

Sub ImportarRazao()

Application.ScreenUpdating = False
sPath = "C:"
ChDrive sPath
ChDir sPath
fName = Application.GetOpenFilename( _
Filefilter:="CSV Files (*.csv),*.CSV")
If fName <> False Then
'Limpa a base antiga e insere dados
Worksheets("RAZÃO").Activate
Cells.Select
Selection.Delete Shift:=xlUp
Range("A1").Select
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & fName, _
Destination:=Range("A1"))
.Name = Replace(LCase(fName), ".xls", "")
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With

Range("A1").Select
MsgBox "Importação Finalizada!", vbExclamation, "Atenção!"
Else
MsgBox "Importação cancelada!", vbExclamation, "Atenção!"
End If
Application.ScreenUpdating = True

End Sub

 
Postado : 08/11/2017 1:45 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Aparentemente tudo OK; nada indica (na rotina exposta) o motivo do reportado.

Contudo lendo o help do vba do trecho --> .RefreshStyle (.RefreshStyle = xlInsertDeleteCells)

Altere para: ==> .RefreshStyle = xlOverwriteCells

Do Help VBA

Propriedade RefreshStyle
Consulte também Aplica-se a Exemplo EspecificaesRetorna ou define a maneira como as linhas da planilha especificada são adicionadas ou excluídas para acomodar o número de linhas em um conjunto de registros retornado por uma consulta. XlCellInsertionMode de leitura/gravação.

XlCellInsertionMode pode ser uma das seguintes constantes:
xlInsertDeleteCells. Linhas parciais são inseridas ou excluídas para coincidir com o número exato de linhas requeridas pelo novo conjunto de registros.
xlOverwriteCells. Nenhuma nova célula ou linha é adicionada à planilha. Os dados das células ao redor são sobrescritos para acomodar qualquer estouro.
xlInsertEntireRows. Linhas inteiras são inseridas, se necessário, para acomodar qualquer estouro. Nenhuma linha ou célula é excluída da planilha.

expressão.RefreshStyle

 
Postado : 08/11/2017 9:04 pm
(@lamramalho)
Posts: 0
New Member
Topic starter
 

Aparentemente tudo OK; nada indica (na rotina exposta) o motivo do reportado.

Contudo lendo o help do vba do trecho --> .RefreshStyle (.RefreshStyle = xlInsertDeleteCells)

Altere para: ==> .RefreshStyle = xlOverwriteCells

Do Help VBA

Propriedade RefreshStyle
Consulte também Aplica-se a Exemplo EspecificaesRetorna ou define a maneira como as linhas da planilha especificada são adicionadas ou excluídas para acomodar o número de linhas em um conjunto de registros retornado por uma consulta. XlCellInsertionMode de leitura/gravação.

XlCellInsertionMode pode ser uma das seguintes constantes:
xlInsertDeleteCells. Linhas parciais são inseridas ou excluídas para coincidir com o número exato de linhas requeridas pelo novo conjunto de registros.
xlOverwriteCells. Nenhuma nova célula ou linha é adicionada à planilha. Os dados das células ao redor são sobrescritos para acomodar qualquer estouro.
xlInsertEntireRows. Linhas inteiras são inseridas, se necessário, para acomodar qualquer estouro. Nenhuma linha ou célula é excluída da planilha.

expressão.RefreshStyle

Olá Reinaldo.
Agradeço sua dica, porém não resolveu o problema.
Continuo pesquisando, mas por enquanto estou fazendo a primeira inserção de dados, salvo a planilha e fecho. Depois abro e faço a segunda inserção de dados.
Toma tempo, mas resolve.
Obrigado!

 
Postado : 09/11/2017 11:22 am