Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ortolani

arquivo txt

Recommended Posts

Ae galera, estou aqui novamente... estou montando um programa que extrai informacoes de um arquivo txt e gera uma tabela de excell com os dados extraidos...o codigo que estou usando é o seguinte:Private Sub Command1_Click()Dim xl As New Excel.ApplicationDim xlw As Excel.Workbook'Abrir o arquivo do ExcelSet xlw = xl.Workbooks.Open("C:\particular\testetxt\teste.xls")' definir qual a planilha de trabalhoxlw.Sheets("plan1").SelectDim x, conteudo, linha As StringOpen "C:\particular\testetxt\teste.txt" For Input As #1 y = 1 n = 91 z = 2 While Not EOF(1) Line Input #1, linha conteudo = linha x = Mid(conteudo, 5) xlw.Application.Cells(z, 1).Value = x While y < n conteudo = linha & vbCrLf y = y + 1 Wend n = n + 90 z = z + 1 Wendxlw.Close True ' Liberamos a memória Set xlw = Nothing Set xl = NothingMsgBox "fim"End SubBom, como puderam ver, o programa deve pegar a primeira linha do txt, grava-la no excell e pular 90 linhas do txt para grava-la novamente....o problema é o seguinte, quando rodo o meu programa da um erro do tipo "aplication is busy"... quando eu dou retry no poup up do erro, aparece "fim" do meu msgbox, e quando eu olho meu arquivo excell, está todo o txt importado para ele e naum apenas as linhas que eu pedi(de 90 em 90)...se alguem puder ajudar eu agradeço... valeu...

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema está no jeito que você está fazendo a contagem das linhas, você conta até noventa mas não pula 90 linhas no arquivo texto, tenta fazer assim:

...Open "C:\particular\testetxt\teste.txt" For Input As #1	 n = 0	 z = 1	 While Not EOF(1)			Line Input #1, linha			if n mod 90 = 0 then 'verifica se o contador (n) é divisivel por 90, ou seja a cada noventa linhas				xlw.Application.Cells(z, 1).Value = Mid(linha, 5)				z = z + 1			end if			n = n + 1	WendClose #1...

E otura coisa que notei no seu código:

Dim x, conteudo, linha As String
Eu também achava que fazendo assim as três variaveis seriam do tipo string, mas aqui no fórum me mostraram que não, as duas primeiras serão variant e a última string. Para declarar todas como string em uma só linha faça assim:

Dim x as string, conteudo as string, linha As String

Compartilhar este post


Link para o post
Compartilhar em outros sites

ae luiz, a parada deu certo... valeu, ajudou pra caramba...mas ae, só pra eu aprender, pq que no meu codigo naum estava pulando as linhas? naum era para pular com o comando "conteudo = linha & vbCrLf" do meu while?... valeu...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ta meio dificil de enteder o código, mas parace que voce estava apenas atribuindo um valor a variavel .... e ai ele nao pulava de linha .... pra pular de linha era só fazer do jeito que o Luizgrs fez .... verificando com o MOD ou com algum outro contador

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com o esse código:

conteudo = linha & vbCrLf
Você pegava a variavel conteudo e jogava nela o valor da variável linha mais a constante vbCrLf (que equivale a tecla enter), ou seja você nem chegava a mexer no arquivo texto.

O que faz ir para a próxima linha é esse "comando":

Line Input #1, linha
Ele pega o valor da linha e já pula para a próxima (não sei se nessa ordem xD).

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.