Boa noite senhores,
venho mais uma vez pedir uma grande ajuda.
Encontrei uma rotina com procedimento de exportação de dados de uma tabela para o formato Excell.
Funciona muito bem quando referencio uma tabela. Mas apresenta erro quando me refiro a uma consulta.
É um pequeno sistema de controle de alunos. Existe um tabela de ALUNOS e uma MATRICULAS.
Em MATRICULAS tenho a sigla do curso e código do ALUNO.
Fiz um formulário onde pode-se escolher a Turma para exportação
Segue a rotina:
Private Sub Bt_exportar_Click()
DoCmd.OpenQuery "Cns_Alunos_coincidentes_Tbl_Matriculas"
Dim appExcel As Object 'Excel.Application
Dim objWorkbook As Object 'Excel.Workbook
Dim objWorksheet As Object 'Excel.Worksheet
Dim rst As ADODB.Recordset
Dim cnn As ADODB.Connection
Dim lngCol As Long
Dim strDB As String
Dim strSql As String
Set cnn = New ADODB.Connection
'Adeque a cadeia de conexão de sua base de dados:
cnn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & CurrentProject.FullName & ";"
cnn.Open
'Selecione a tabela desejada alterando a consulta abaixo:
' strSql = "SELECT * FROM [Cns_Alunos_coincidentes_Tbl_Matriculas]"
strSql = "SELECT * FROM [Tbl_Alunos]"
Set rst = cnn.Execute(strSql)
'Cria aplicação / pasta de trabalho / planilha no Excel:
On Error Resume Next
Set appExcel = GetObject(, "Excel.Application")
If appExcel Is Nothing Then
Set appExcel = CreateObject("Excel.Application")
End If
On Error GoTo 0
appExcel.Visible = True
Set objWorkbook = appExcel.Workbooks.Add(-4167) 'xlWBATWorksheet
Set objWorksheet = objWorkbook.Worksheets(1)
With objWorksheet
'Exporta dados do objeto Recordset na planilha:
.Range("A2").CopyFromRecordset rst
'Copia cabeçalho na planilha:
For lngCol = 0 To rst.Fields.Count - 1
.Range("A1").Offset(, lngCol) = rst.Fields(lngCol).Name
Next lngCol
End With
'Opcional. Salva pasta de trabalho no mesmo caminho da base de dados:
objWorkbook.SaveAs CurrentProject.Path & "\Tbl_Alunos", 51 'xlOpenXMLWorkbook
appExcel.Quit
'Fecha conexões e limpa memória:
rst.Close
cnn.Close
Set rst = Nothing
Set cnn = Nothing
End Sub
Anexei a imagem com o erro quando substitui a tabela pela consulta.
Desde já agradeço muito por qualquer ajuda.
Helena Barbosa
venho mais uma vez pedir uma grande ajuda.
Encontrei uma rotina com procedimento de exportação de dados de uma tabela para o formato Excell.
Funciona muito bem quando referencio uma tabela. Mas apresenta erro quando me refiro a uma consulta.
É um pequeno sistema de controle de alunos. Existe um tabela de ALUNOS e uma MATRICULAS.
Em MATRICULAS tenho a sigla do curso e código do ALUNO.
Fiz um formulário onde pode-se escolher a Turma para exportação
Segue a rotina:
Private Sub Bt_exportar_Click()
DoCmd.OpenQuery "Cns_Alunos_coincidentes_Tbl_Matriculas"
Dim appExcel As Object 'Excel.Application
Dim objWorkbook As Object 'Excel.Workbook
Dim objWorksheet As Object 'Excel.Worksheet
Dim rst As ADODB.Recordset
Dim cnn As ADODB.Connection
Dim lngCol As Long
Dim strDB As String
Dim strSql As String
Set cnn = New ADODB.Connection
'Adeque a cadeia de conexão de sua base de dados:
cnn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & CurrentProject.FullName & ";"
cnn.Open
'Selecione a tabela desejada alterando a consulta abaixo:
' strSql = "SELECT * FROM [Cns_Alunos_coincidentes_Tbl_Matriculas]"
strSql = "SELECT * FROM [Tbl_Alunos]"
Set rst = cnn.Execute(strSql)
'Cria aplicação / pasta de trabalho / planilha no Excel:
On Error Resume Next
Set appExcel = GetObject(, "Excel.Application")
If appExcel Is Nothing Then
Set appExcel = CreateObject("Excel.Application")
End If
On Error GoTo 0
appExcel.Visible = True
Set objWorkbook = appExcel.Workbooks.Add(-4167) 'xlWBATWorksheet
Set objWorksheet = objWorkbook.Worksheets(1)
With objWorksheet
'Exporta dados do objeto Recordset na planilha:
.Range("A2").CopyFromRecordset rst
'Copia cabeçalho na planilha:
For lngCol = 0 To rst.Fields.Count - 1
.Range("A1").Offset(, lngCol) = rst.Fields(lngCol).Name
Next lngCol
End With
'Opcional. Salva pasta de trabalho no mesmo caminho da base de dados:
objWorkbook.SaveAs CurrentProject.Path & "\Tbl_Alunos", 51 'xlOpenXMLWorkbook
appExcel.Quit
'Fecha conexões e limpa memória:
rst.Close
cnn.Close
Set rst = Nothing
Set cnn = Nothing
End Sub
Anexei a imagem com o erro quando substitui a tabela pela consulta.
Desde já agradeço muito por qualquer ajuda.
Helena Barbosa