Meu problema é que ele pode ser executado em computadores com versões diferentes de Office e tenho que ficar mudando a referência do Excel Object Library.
Existe alguma maneira de se fazer via programação ?
Meu novo site: www.vcssistemas.com.br Clique aqui e veja um vídeo que explica como fazer pesquisas no forum. DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo: 1 - faça uma cópia do aplicativo 2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar 3 - use o Compactar/Reparar 4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem) Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário. Positive as mensagens que achar útil, no canto superior direito delas. |
Meu novo site: www.vcssistemas.com.br Clique aqui e veja um vídeo que explica como fazer pesquisas no forum. DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo: 1 - faça uma cópia do aplicativo 2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar 3 - use o Compactar/Reparar 4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem) Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário. Positive as mensagens que achar útil, no canto superior direito delas. |
Public Function RemoveReferenciasAusentes()
Dim ref As Variant
With Application.VBE.ActiveVBProject
For Each ref In .References
If ref.IsBroken Then
.References.Remove ref
End If
Next
End With
End Function
Dim myVersion As String
myVersion = "C:\Program Files\Microsoft Office\Office" & Int(Application.Version) & "\EXCEL.EXE"
Meu novo site: www.vcssistemas.com.br Clique aqui e veja um vídeo que explica como fazer pesquisas no forum. DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo: 1 - faça uma cópia do aplicativo 2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar 3 - use o Compactar/Reparar 4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem) Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário. Positive as mensagens que achar útil, no canto superior direito delas. |
Meu novo site: www.vcssistemas.com.br Clique aqui e veja um vídeo que explica como fazer pesquisas no forum. DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo: 1 - faça uma cópia do aplicativo 2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar 3 - use o Compactar/Reparar 4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem) Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário. Positive as mensagens que achar útil, no canto superior direito delas. |
Public Sub RemoveReferenciaExcel()
Dim REF As Reference
For Each REF In References
If REF.Name = "Excel" Then
Application.References.Remove REF
Exit For
End If
Next
End Sub
Public Sub AdicionaReferenciaExcel()
Dim REF_2013 As Reference
Dim REF_2016 As Reference
'OFFICE 2013
'C:\Program Files\Microsoft Office 15\root\office15
'GUIDE: {00020813-0000-0000-C000-000000000046}
'MAJOR: 1
'MINOR: 8
'OFFICE 2016
'C:\Program Files\Microsoft Office\root\Office16
'GUIDE: {00020813-0000-0000-C000-000000000046}
'MAJOR: 1
'MINOR: 9
'Arquivo verifico se o excel está na pasta do usuário:
strPath = "C:\Program Files\Microsoft Office 15\root\office15\Excel.exe"
If Dir(strPath) = vbNullString Then
strCheck = False
'Se não existir ele referencia a linha abaixo
Set REF_2016 = References.AddFromFile("C:\Program Files\Microsoft Office\root\Office16\Excel.exe")
Else
strCheck = True
'Se existir ele referencia a linha abaixo
Set REF_2013 = References.AddFromFile("C:\Program Files\Microsoft Office 15\root\Office15\Excel.exe")
End If
End Sub
' EXPORTA COTAÇÃO PARA EXCEL
Public Function Exporta_Cotação()
Dim oExcel As Object
Dim oBook As Object
Dim oSheet As Object
On Error Resume Next
varId_cotação = CurrentProject.Path & "\RELATORIO PDF\COTAÇÕES\COTAÇÃO Nº " & Forms![4-COTAÇÃO_MONTA_LISTA_PRODUTOS]!id_cotacao_gerada & ".xlsx"
' Rotina para verificar se o arquivo .xlsx está aberto.
'If IsFileOpen(CurrentProject.Path & "\RELATORIO PDF\COTAÇÕES\COTAÇÃO Nº " & Forms![4-COTAÇÃO_MONTA_LISTA_PRODUTOS]!id_cotacao_gerada & ".xlsx") Then
' MsgBox "O Arquivo " & id_cotacao_gerada & ".xlsx" & " está aberto!" & vbCrLf & "Por favor, feche a Planilha." & vbCrLf & "O Sistema não pode Executar a Ação escolhida.", vbInformation, "Atenção"
'Else
'Rotina para excluir planilha gerada
Kill CurrentProject.Path & "\RELATORIO PDF\COTAÇÕES\COTAÇÃO Nº " & Forms![4-COTAÇÃO_MONTA_LISTA_PRODUTOS]!id_cotacao_gerada & ".xlsx"
Set oExcel = CreateObject("Excel.Application")
If Me.empresa = "ESTRELAÇO" Then
Set oBook = oExcel.Workbooks.Open(Application.CurrentProject.Path & "\RELATORIO PDF\COTAÇÕES\COTAÇÃO_MODELO_ESTRELAÇO.xlsx")
oExcel.visible = False
ElseIf Me.empresa = "KMV" Then
Set oBook = oExcel.Workbooks.Open(Application.CurrentProject.Path & "\RELATORIO PDF\COTAÇÕES\COTAÇÃO_MODELO_KMV.xlsx")
End If
Set oSheet = oBook.Worksheets(1)
oSheet.Range("E4").Value = "REF.: " & Forms![4-COTAÇÃO]!referencia_interna
oSheet.Range("E5").Value = "DATA: " & Now
oSheet.Range("A8").Value = Forms![4-COTAÇÃO]!id_cotacao_gerada
oSheet.Range("C8").Value = Forms![4-COTAÇÃO_MONTA_LISTA_PRODUTOS]![txt_fornecedor]
oSheet.Range("C9").Value = "VENDEDOR: " & Forms![4-COTAÇÃO_MONTA_LISTA_PRODUTOS]![txt_vendedor] & " - " & Format(Forms![4-COTAÇÃO_MONTA_LISTA_PRODUTOS]![txt_telefone], "(00) 0000-0000") & " - " & Format(Forms![4-COTAÇÃO_MONTA_LISTA_PRODUTOS]![txt_celular], "(00) 00000-0000")
oBook.SaveAs CurrentProject.Path & "\RELATORIO PDF\COTAÇÕES\COTAÇÃO Nº " & Forms![4-COTAÇÃO_MONTA_LISTA_PRODUTOS]!id_cotacao_gerada & ".xlsx"
oBook.Close
oExcel.Quit
DoCmd.SetWarnings False
DoCmd.OpenQuery "cns_Cotação_Excel_Itens_Exclui_Temp", acNormal, acEdit
DoCmd.SetWarnings True
Call filtra_listbox
Call ExportaItens_Cotação
'MsgBox "Cotação Exportada para o Excel com Sucesso!", vbInformation, "Informando"
Application.FollowHyperlink CurrentProject.Path & "\RELATORIO PDF\COTAÇÕES\COTAÇÃO Nº " & Forms![4-COTAÇÃO_MONTA_LISTA_PRODUTOS]!id_cotacao_gerada & ".xlsx"
'End If
End Function
' EXPORTA ITENS DA COTAÇÃO
Public Function ExportaItens_Cotação()
'Variaveis do excel
Dim intLinha As Integer
Dim intColuna As Integer
Dim xl As New Excel.Application
Dim xlw As Excel.Workbook
Dim i As Integer
Dim N As Integer
Dim intcontador As Integer
Dim intContadorPag As Integer
Dim CaminhoPlanilha As String
On Error GoTo Fim
Dim Rst1 As Recordset
Dim rst2 As Recordset
Dim Sel1 As String
Dim Sel2 As String
'Obtenho o caminho do carquivo
'----------------------------------------------------------------------
CaminhoPlanilha = CurrentProject.Path & "\RELATORIO PDF\COTAÇÕES\COTAÇÃO Nº " & Forms![4-COTAÇÃO_MONTA_LISTA_PRODUTOS]!id_cotacao_gerada & ".xlsx"
'Carrego o conjunto de registros
Sel1 = "SELECT * from cotacao_sub_temp"
Set Rst1 = CurrentDb.OpenRecordset(Sel1)
If Me.empresa = "ESTRELAÇO" Then
var_enviado_por_email = DLookup("email", "tblUsuários", "Autonumeração = " & Me.vendedor_id)
ElseIf Me.empresa = "KMV" Then
var_enviado_por_email = DLookup("email2", "tblUsuários", "Autonumeração = " & Me.vendedor_id)
End If
var_ddr_usuario = DLookup("Telefone_Direto", "tblUsuários", "Autonumeração = " & vendedor_id)
'Inicio o contador da linha
intLinha = 11
'Abrir o arquivo do Excel
Set xlw = xl.Workbooks.Open(CurrentProject.Path & "\RELATORIO PDF\COTAÇÕES\COTAÇÃO Nº " & Forms![4-COTAÇÃO_MONTA_LISTA_PRODUTOS]!id_cotacao_gerada & ".xlsx")
'Aqui inicio o loop pelos registros da tabela
Do While Not Rst1.EOF
'--------------------------------------------------------------
'Definimos qual será a planilha de trabalho
xlw.Sheets("COTAÇÃO").Select
'Envia o valor para cada celula (Linha, Coluna)
xlw.Application.Cells(intLinha, 1).Value = Rst1![Item]
xlw.Application.Cells(intLinha, 2).Value = Rst1![quant]
xlw.Application.Cells(intLinha, 3).Value = Rst1![Unidade]
xlw.Application.Cells(intLinha, 4).WrapText = True 'Quebra o texto
xlw.Application.Cells(intLinha, 4).Rows.AutoFit 'Ajusta a altura
xlw.Application.Cells(intLinha, 4).Value = Rst1![txt_produto]
xlw.Application.Cells(intLinha, 5).Value = Rst1![codigo_ncm]
xlw.Application.Cells(intLinha, 6).Value = "-" 'ipi
xlw.Application.Cells(intLinha, 7).Value = "-" 'valor_unit
xlw.Application.Cells(intLinha, 8).Value = "-" 'valor_total
'Chama a Função para desenhar as bordas da lista de Produtos
Call BordasCelulaExcel(xlw, intLinha, 1, intLinha - 10)
Call BordasCelulaExcel(xlw, intLinha, 2, Rst1![quant])
Call BordasCelulaExcel(xlw, intLinha, 3, Rst1![Unidade])
Call BordasCelulaExcel(xlw, intLinha, 4, Rst1![txt_produto])
Call BordasCelulaExcel(xlw, intLinha, 5, Rst1![codigo_ncm])
Call BordasCelulaExcel(xlw, intLinha, 6, " ")
Call BordasCelulaExcel(xlw, intLinha, 7, " ")
Call BordasCelulaExcel(xlw, intLinha, 8, " ")
'Incremento o contador para mudar a linha
intLinha = intLinha + 1
'--------------------------------------------------------------
Rst1.MoveNext
Loop
'Finalizo o loop
Rst1.Close
'Inicio a montagem do Rodapé após a lista de produtos
With xlw.Application
.Cells(intLinha + 1, 1).HorizontalAlignment = xlLeft 'Alinha texto a esquerda
.Cells(intLinha + 1, 1).WrapText = False 'Quebra o texto
.Cells(intLinha + 1, 1).Font.Bold = True 'Fonte em Nrgito
.Cells(intLinha + 1, 1).Font.Size = 12 'Tamanho da Fonte
.Cells(intLinha + 1, 1).Value = "Nº ÍTENS: " & intLinha - 11
.Cells(intLinha + 1, 7).HorizontalAlignment = xlLeft 'Alinha texto a esquerda
.Cells(intLinha + 1, 7).WrapText = False 'Quebra o texto
.Cells(intLinha + 1, 7).Font.Bold = True 'Fonte em Nrgito
.Cells(intLinha + 1, 7).Font.Size = 12 'Tamanho da Fonte
.Cells(intLinha + 1, 7).Value = "TOTAL:"
.Cells(intLinha + 3, 2).HorizontalAlignment = xlLeft 'Alinha texto a esquerda
.Cells(intLinha + 3, 2).WrapText = False 'Quebra o texto
.Cells(intLinha + 3, 2).Font.Size = 11 'Tamanho da Fonte
.Cells(intLinha + 3, 2).Value = "Atenciosamente,"
.Cells(intLinha + 4, 2).HorizontalAlignment = xlLeft 'Alinha texto a esquerda
.Cells(intLinha + 4, 2).WrapText = False 'Quebra o texto
.Cells(intLinha + 4, 2).Font.Size = 11 'Tamanho da Fonte
.Cells(intLinha + 4, 2).Value = StrConv([vendedor_txt], 3)
.Cells(intLinha + 5, 2).HorizontalAlignment = xlLeft 'Alinha texto a esquerda
.Cells(intLinha + 5, 2).WrapText = False 'Quebra o texto
.Cells(intLinha + 5, 2).Font.Size = 11 'Tamanho da Fonte
.Cells(intLinha + 5, 2).Value = var_enviado_por_email
.Cells(intLinha + 6, 2).HorizontalAlignment = xlLeft 'Alinha texto a esquerda
.Cells(intLinha + 6, 2).WrapText = False 'Quebra o texto
.Cells(intLinha + 6, 2).Font.Size = 10 'Tamanho da Fonte
.Cells(intLinha + 6, 2).Value = Format([var_ddr_usuario], "(00) 0000-0000")
End With
'Para não salvar mude true para false
xlw.Close True
'Liberamos a memória
Set xlw = Nothing
Set xl = Nothing
'--------------------------------------------------------------
Exit Function
Fim:
SysCmd 3
MsgBox err.Number & " - " & err.Description
Exit Function
End Function
' EXPORTA ITENS DA COTAÇÃO
Public Function ExportaItens_Cotação()
'Variaveis do excel
Dim intLinha As Integer
Dim intColuna As Integer
dim xl as object 'MODIFICADA
Dim xlw As Object 'MODIFICADA
Dim i As Integer
Dim N As Integer
Dim intcontador As Integer
Dim intContadorPag As Integer
Dim CaminhoPlanilha As String
On Error GoTo Fim
Dim Rst1 As Recordset
Dim rst2 As Recordset
Dim Sel1 As String
Dim Sel2 As String
'Obtenho o caminho do carquivo
'----------------------------------------------------------------------
CaminhoPlanilha = CurrentProject.Path & "\RELATORIO PDF\COTAÇÕES\COTAÇÃO Nº " & Forms![4-COTAÇÃO_MONTA_LISTA_PRODUTOS]!id_cotacao_gerada & ".xlsx"
'Carrego o conjunto de registros
Sel1 = "SELECT * from cotacao_sub_temp"
Set Rst1 = CurrentDb.OpenRecordset(Sel1)
If Me.empresa = "ESTRELAÇO" Then
var_enviado_por_email = DLookup("email", "tblUsuários", "Autonumeração = " & Me.vendedor_id)
ElseIf Me.empresa = "KMV" Then
var_enviado_por_email = DLookup("email2", "tblUsuários", "Autonumeração = " & Me.vendedor_id)
End If
var_ddr_usuario = DLookup("Telefone_Direto", "tblUsuários", "Autonumeração = " & vendedor_id)
'Inicio o contador da linha
intLinha = 11
'Abrir o arquivo do Excel
set xl = CreateObject("Excel.Application") 'ADICIONADA
Set xlw = xl.Workbooks.Open(CurrentProject.Path & "\RELATORIO PDF\COTAÇÕES\COTAÇÃO Nº " & Forms![4-COTAÇÃO_MONTA_LISTA_PRODUTOS]!id_cotacao_gerada & ".xlsx")
'Aqui inicio o loop pelos registros da tabela
Do While Not Rst1.EOF
'--------------------------------------------------------------
'Definimos qual será a planilha de trabalho
xlw.Sheets("COTAÇÃO").Select
'Envia o valor para cada celula (Linha, Coluna)
xlw.Application.Cells(intLinha, 1).Value = Rst1![Item]
xlw.Application.Cells(intLinha, 2).Value = Rst1![quant]
xlw.Application.Cells(intLinha, 3).Value = Rst1![Unidade]
xlw.Application.Cells(intLinha, 4).WrapText = True 'Quebra o texto
xlw.Application.Cells(intLinha, 4).Rows.AutoFit 'Ajusta a altura
xlw.Application.Cells(intLinha, 4).Value = Rst1![txt_produto]
xlw.Application.Cells(intLinha, 5).Value = Rst1![codigo_ncm]
xlw.Application.Cells(intLinha, 6).Value = "-" 'ipi
xlw.Application.Cells(intLinha, 7).Value = "-" 'valor_unit
xlw.Application.Cells(intLinha, 8).Value = "-" 'valor_total
'Chama a Função para desenhar as bordas da lista de Produtos
Call BordasCelulaExcel(xlw, intLinha, 1, intLinha - 10)
Call BordasCelulaExcel(xlw, intLinha, 2, Rst1![quant])
Call BordasCelulaExcel(xlw, intLinha, 3, Rst1![Unidade])
Call BordasCelulaExcel(xlw, intLinha, 4, Rst1![txt_produto])
Call BordasCelulaExcel(xlw, intLinha, 5, Rst1![codigo_ncm])
Call BordasCelulaExcel(xlw, intLinha, 6, " ")
Call BordasCelulaExcel(xlw, intLinha, 7, " ")
Call BordasCelulaExcel(xlw, intLinha, 8, " ")
'Incremento o contador para mudar a linha
intLinha = intLinha + 1
'--------------------------------------------------------------
Rst1.MoveNext
Loop
'Finalizo o loop
Rst1.Close
'Inicio a montagem do Rodapé após a lista de produtos
With xlw.Application
.Cells(intLinha + 1, 1).HorizontalAlignment = xlLeft 'Alinha texto a esquerda
.Cells(intLinha + 1, 1).WrapText = False 'Quebra o texto
.Cells(intLinha + 1, 1).Font.Bold = True 'Fonte em Nrgito
.Cells(intLinha + 1, 1).Font.Size = 12 'Tamanho da Fonte
.Cells(intLinha + 1, 1).Value = "Nº ÍTENS: " & intLinha - 11
.Cells(intLinha + 1, 7).HorizontalAlignment = xlLeft 'Alinha texto a esquerda
.Cells(intLinha + 1, 7).WrapText = False 'Quebra o texto
.Cells(intLinha + 1, 7).Font.Bold = True 'Fonte em Nrgito
.Cells(intLinha + 1, 7).Font.Size = 12 'Tamanho da Fonte
.Cells(intLinha + 1, 7).Value = "TOTAL:"
.Cells(intLinha + 3, 2).HorizontalAlignment = xlLeft 'Alinha texto a esquerda
.Cells(intLinha + 3, 2).WrapText = False 'Quebra o texto
.Cells(intLinha + 3, 2).Font.Size = 11 'Tamanho da Fonte
.Cells(intLinha + 3, 2).Value = "Atenciosamente,"
.Cells(intLinha + 4, 2).HorizontalAlignment = xlLeft 'Alinha texto a esquerda
.Cells(intLinha + 4, 2).WrapText = False 'Quebra o texto
.Cells(intLinha + 4, 2).Font.Size = 11 'Tamanho da Fonte
.Cells(intLinha + 4, 2).Value = StrConv([vendedor_txt], 3)
.Cells(intLinha + 5, 2).HorizontalAlignment = xlLeft 'Alinha texto a esquerda
.Cells(intLinha + 5, 2).WrapText = False 'Quebra o texto
.Cells(intLinha + 5, 2).Font.Size = 11 'Tamanho da Fonte
.Cells(intLinha + 5, 2).Value = var_enviado_por_email
.Cells(intLinha + 6, 2).HorizontalAlignment = xlLeft 'Alinha texto a esquerda
.Cells(intLinha + 6, 2).WrapText = False 'Quebra o texto
.Cells(intLinha + 6, 2).Font.Size = 10 'Tamanho da Fonte
.Cells(intLinha + 6, 2).Value = Format([var_ddr_usuario], "(00) 0000-0000")
End With
'Para não salvar mude true para false
xlw.Close True
'Liberamos a memória
Set xlw = Nothing
set xl = nothing
'--------------------------------------------------------------
Exit Function
Fim:
SysCmd 3
MsgBox err.Number & " - " & err.Description
Exit Function
End Function