Exportar dados do VB6 para Excel

Anônima
2009-04-08T19:03:17+00:00

Bom Dia a todos,

eu utilizo o Visual Basic 6 e estou precisando gerar um arquvio .xls (excel) a partir do datagrid.

Como eu posso fazer isso?

Atenciosamente,


Leandro Rodrigues MCP hotmail: *** O endereço de email foi removido para fins de privacidade *** skype: leandro_sr82

Microsoft 365 e Office | Instalar, resgatar, ativar | Para uso doméstico | Outro

Pergunta bloqueada. Essa pergunta foi migrada da Comunidade de Suporte da Microsoft. É possível votar se é útil, mas não é possível adicionar comentários ou respostas ou seguir a pergunta.

0 comentários Sem comentários
Resposta aceita pelo autor da pergunta
Anônima
2009-04-10T03:41:35+00:00

A resposta do colega Anderson é para VB.Net, não para VB6. Embora a lógica seja semelhante, no VB6 é um pouco mais difícil.

Criei este código e funcionou bem:

Private Sub ExportaExcel()

'Exporta os dados do DataGrid para o Excel

Dim oApp As Object ' Excel.Application

Dim oWkb As Object ' Excel.Workbook

Dim oWks As Object ' Excel.Worksheet

Dim l As Long

Dim c As Long

Set oApp = CreateObject("Excel.Application")

oApp.Visible = True

Set oWkb = oApp.Workbooks.Add

Set oWks = oWkb.Worksheets(1)

'Título das colunas

For c = 0 To Me.DataGrid1.Columns.Count - 1

oWks.Cells(1, c + 1).Value = Me.DataGrid1.Columns(c).Caption

Next c

'Conteúdo

l = 0

Me.DataGrid1.Row = l

Do While IsNumeric(Me.DataGrid1.Columns(0)) = True

For c = 0 To Me.DataGrid1.Columns.Count - 1

    oWks.Cells(l + 2, c + 1).Value = Me.DataGrid1.Columns(c).Value

Next c

l = l + 1

On Error Resume Next

Me.DataGrid1.Row = l

If Err <> 0 Then

    Err.Clear

    On Error GoTo 0

    Exit Do

End If

On Error GoTo 0

Loop

End Sub

Private Sub cmdExportarExcel_Click()

On Error GoTo ErrHandler

Call ExportaExcel

ExitHere:

Exit Sub

ErrHandler:

MsgBox Err.Description & vbCrLf & Err.Number & vbCrLf & Err.Source, vbCritical, "cmdExportarExcel_Click"

Resume ExitHere

End Sub


Luiz Cláudio Cosenza Vieira da Rocha - http://msmvps.com/blogs/officedev - IT Lab www.itlab.com.br

Esta resposta foi útil?

0 comentários Sem comentários

17 respostas adicionais

Classificar por: Mais útil
  1. Anônima
    2009-04-21T16:33:23+00:00

    Apenas complementando, o código precisa deste tratamento com On Error Resume Next porque o grid não tem nenhuma propriedade que retorne a quantidade de linhas, portanto temos que tentar chamar uma linha inexistente e ver se deu erro. Se deu erro, é porque acabaram as linhas. Ou seja, o código está correto, faça apenas o ajuste do IsNumeric (que você mencionou no começo) caso use outro tipo de dados na sua coluna chave.


    Luiz Cláudio Cosenza Vieira da Rocha - http://msmvps.com/blogs/officedev - IT Lab www.itlab.com.br

    Esta resposta foi útil?

    0 comentários Sem comentários
  2. Anônima
    2009-04-21T16:30:43+00:00

    Este erro já foi previsto e tratado no código. Você precisa ajustar as opções de debug do VB6 para ele não interromper em erros tratados.


    Luiz Cláudio Cosenza Vieira da Rocha - http://msmvps.com/blogs/officedev - IT Lab www.itlab.com.br

    Esta resposta foi útil?

    0 comentários Sem comentários
  3. Anônima
    2009-04-18T19:19:21+00:00

    Olá Luiz Cláudio,

    desculpe me pela demora em responder, mas como eu já expliquei em outro momento, eu ando um tanto sem tempo.

    Bom,  testei o código que vc passou e ocorreu o seguinte: ao exportar para o Excel, ele exportou apenas o Título da Grid.

    Aí eu fiz o Debug e notei que na linha que segue logo abaixo, da Procedure que vc montou, está retornando como False logo no primeiro loop. Assim, ele nem executa o restante do código.

    Do While IsNumeric(Me.dtgCargo_frmCargo.Columns(0)) = True

    Aí eu modifiquei o código na tentativa de "corrigir o erro apresentado", acrescentando o Not antes do IsNumeric, visto que os dados da minha grid são mesclados entre textos e números (não sei se isso tem a ver!!! :-(   )

    Com isso ele terminou de exportar todos os dados da Grid, porém apresentou outro erro na linha

    On Error Resume Next

    Me.DataGrid1.Row = l    'LINHA QUE APRESENTOU ERRO!!!!!
    

    If Err <> 0 Then

    O erro apresentado foi: "Run-Time error '6148': Invalid Row Number".

    Acredito que esse erro ocorreu ao tentar fazer com que Me.DataGrid1.Row recebece um valor maior que a qtde de linhas.

    Por favor, vc pode me dizer como corrigir isso?

    Muito obrigado pela tua ajuda!

    Abraços

    Leandro Rodrigues


    Leandro Rodrigues MCP hotmail: *** O endereço de email foi removido para fins de privacidade *** skype: leandro_sr82


    Leandro Rodrigues MCP hotmail: *** O endereço de email foi removido para fins de privacidade *** skype: leandro_sr82

    Esta resposta foi útil?

    0 comentários Sem comentários
  4. Anônima
    2009-04-18T19:11:36+00:00

    Olá Luiz,

    eu realizei um novo teste e acho importante lhe informar, pois isso pode ajudar na solução.

    Utilizei o sue código original em uma outra datagrid onde havia apenas dados numéricos. Com isso, a exportação ocorreu sem apresentar o primeiro problema que eu relatei anteriormente (foi exportado todos os dados da grid).

    Porém, o segundo erro relatado anteriormente também ocorreu ("Run-Time error '6148': Invalid Row Number").

    Assim, temos dois problemas ocorrendo:

    1. quando os dados da grid não são numéricos;
    2. ao terminar de percorrer a grid para a exportação.

    Obrigado pela ajuda!

    Leandro Rodrigues


    Leandro Rodrigues MCP hotmail: *** O endereço de email foi removido para fins de privacidade *** skype: leandro_sr82

    Esta resposta foi útil?

    0 comentários Sem comentários