Ir para conteúdo

POWERED BY:

Arquivado

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

Ulukai

VB6 exportando numéricos como texto para o Excel

Recommended Posts

Hey galera, estou desenvolvendo uma aplicação onde eu mando o conteúdo de um recordset para o Excel

 

mas quando eu exporto os números aparecem como texto, e se eu usar funções do excel(como "=VALOR(texto)") no VB aparece o erro "#NUM"

 

A parte do programa em que eu exporto:

 

EwkS.Range("A" & i + lin).Value = rsDup("cod")

EwkS.Range("B" & i + lin).Value = rsDup("nome")

EwkS.Range("C" & i + lin).Value = rsDup("fatura")

EwkS.Range("D" & i + lin).Value = rsDup("parcela")

EwkS.Range("E" & i + lin).Value = Format(rsDup("valor"), "###,###,##0.00")

somaTotal = somaTotal + rsDup("valor")

EwkS.Range("F" & i + lin).Value = fmtDatMy(rsDup("dtvenc"))

 

nessa linha eu mando o valor, sendo esse campo Double, e no Excel chega como texto, se alguém puder me ajudar eu agradeço MUITO, mas MUITO mesmo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara

 

Fiz varios relatório em Excel e nunca tive problema com tipo de campo (texto ou numero).

Da mesma forma que está na base ele vai para o excel.

 

Em ultimo caso, faça uma atualização no proprio excell ápos gerar o relatório.

Por exemplo, está rotina redimenciona as colunas do excel, ápos gerado o relatório.

 

Call RediColunas(Rs.Fields.Count + 1)

 

Public Sub RediColunas(TT_Campos)'Redimenciona as colunasCol = 1For n = 1 To TT_Campos	Plan.Cells(1, Col).Select	Selection.EntireColumn.AutoFit	Col = Col + 1Next nEnd Sub

 

Para fazer isso, vá no excel, e crie uma macro, com a função para substitur texto por numero, na coluna que você inseriu o texto. Depois edite a macro, copie o codigo para o VB e pronto, ele fará automaticamente está função toda vez que gerar o relatório.

 

 

Espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ajudou sim RogerFe :D , testando no vba eu consegui exportar como numérico

 

 

EwkS.Range("A" & i + lin).Value = FuncData(0, i)		[b]EwkS.Range("A" & i + lin).NumberFormat = "00000"[/b]		EwkS.Range("B" & i + lin).Value = FuncData(1, i)		EwkS.Range("C" & i + lin).Value = FuncData(2, i)		EwkS.Range("D" & i + lin).Value = FuncData(3, i)		[b]EwkS.Range("D" & i + lin).NumberFormat = "00"[/b]		EwkS.Range("E" & i + lin).Value = Format(FuncData(4, i), "###,###,##0.00")		EwkS.Range("E" & i + lin).Value = CDbl(EwkS.Range("E" & i + lin).Value)		[b]EwkS.Range("E" & i + lin).NumberFormat = "$#,##0.00;($#,##0.00)"[/b]		somaTotal = somaTotal + FuncData(4, i)		EwkS.Range("F" & i + lin).Value = FuncData(5, i)

mas eu deixei de percorrer todo o recordset e usei a função getrows

 

Dim FuncData() As VariantDim colunas As Integer, registros As IntegerrsDup.MoveFirst[b]FuncData = rsDup.GetRows[/b]'Verifica se há registros'If UBound(FuncData, 2) <= 0 Then'	MsgBox "Sem registros"'	Exit Sub'End If'calcula o total de campos e registros selecionadoscolunas = UBound(FuncData, 1)registros = UBound(FuncData, 2)

essa função coloca todos os registros do recordset em um vetor, e exportando para o excel a partir do vetor, os campos numéricos continuaram numéricos, depois disso é preciso colocar somente uma máscara e fica tudo ok!

 

vlw http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

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.