MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access


    [Resolvido]Formulário Access para Word

    avatar
    vileman
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 580
    Registrado : 25/05/2011

    [Resolvido]Formulário Access para Word Empty [Resolvido]Formulário Access para Word

    Mensagem  vileman 20/1/2012, 21:10

    Olá a todos, mais uma vez preciso da ajuda de vocês:
    ** Access 2003 - Windows 7 64 bits

    1) Pesquisando neste site copiei esta rotina para repassar dados do Acces para Word, antes criando o arquivo base de nome: MatrizOficio.doc colocando todas as variáveis correspondentes ao formulário, no Word em inserir\indicador, no entanto, ao clicar no botão abaixo o BD fica travado e aparece a seguinte mensagem: "Erro 4198. O comando falhou, apontando para a linha: .Documents.Open ("c:\argus\MatrizOficio.doc")" ou aparece a mensagem: "Erro: -2147023170 - Erro de automação. Falha na chamada de procedimento remoto", apontando para a mesma linha já mencioada; isso após eu ter que usar o Ctrl+Alt+Del na aba "aplicativos" ou "processos", respectivamente, para encerrar/destravar o BD.

    Private Sub BtWord_Click()
    #Const DESENV = -1

    Dim oApp As Object 'Cria uma variável objeto

    ' Inicia o MS Word
    Set oApp = CreateObject("Word.Application") 'Cria e abre o objeto Word
    With oApp
    ' Torna o MS Word visível
    Visible = True
    ' Abre o documento base
    .Documents.Open ("c:\argus\MatrizOficio.doc")
    'Move cada campo para o indicador definido no documento
    .ActiveDocument.Bookmarks("NumOficio").Select
    .Selection.Text = (CStr(Forms!F13_Oficios!NumOficio))
    .ActiveDocument.Bookmarks("DataOficio").Select
    .Selection.Text = (CStr(Forms!F13_Oficios!DataOficio))
    .ActiveDocument.Bookmarks("CodOficio").Select
    .Selection.Text = (CStr(Forms!F13_Oficios!CODOficio))
    .ActiveDocument.Bookmarks("NomeDestinatario").Select
    .Selection.Text = (CStr(Forms!F13_Oficios!NomeDestinatario))
    .ActiveDocument.Bookmarks("OrgaoDestinatario").Select
    .Selection.Text = (CStr(Forms!F13_Oficios!OrgaoDestinatario))
    .ActiveDocument.Bookmarks("NomeEmitente").Select
    .Selection.Text = (CStr(Forms!F13_Oficios!NomeEmitente))
    .ActiveDocument.Bookmarks("CargoEmitente").Select
    .Selection.Text = (CStr(Forms!F13_Oficios!CargoEmitente))
    .ActiveDocument.Bookmarks("FuncaoEmitente").Select
    .Selection.Text = (CStr(Forms!F13_Oficios!FuncaoEmitente))
    'Salva o arquivo gerado
    .ActiveDocument.SaveAs "c:\argus\01.Oficios\" & Me.NumOficio & " " & Format(Date, "dd-mm-yyyy") & ".doc"
    MsgBox "Documento salvo com sucesso...", vbInformation
    'Fecha o documento
    .ActiveDocument.Close
    End With
    'Fecha o Word
    oApp.Quit
    Dim x As String
    x = "c:\argus\01.Oficios\" & Me.NumOficio & " " & Format(Date, "dd-mm-yyyy") & ".doc"
    Dim Word As New Word.Application
    With Word
    .Documents.Open x
    .Visible = True
    .WindowState = wdWindowStateMaximize
    End With
    'Libera a memória
    Set oApp = Nothing
    Saida:
    Exit Sub
    End Sub

    2) Também gostaria de saber se tem como caso haja algum campo em branco no Formulário, fazer com que no Word ele passe para a próxima variável sem dar erro, ou seja, vai para a próxima e se for a última variável encerra normalmente.

    3) Tem como ao gerar o arquivo Word ele abrir automaticamente para edição no momento em que é gerado esse arquivo?

    Antecipadamente agradeço a atenção.
    avatar
    vileman
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 580
    Registrado : 25/05/2011

    [Resolvido]Formulário Access para Word Empty Formulário Access para Word

    Mensagem  vileman 24/1/2012, 19:05

    Caros colegas, consegui resolver copiando outro código semelhante ao acima, o erro era porque estava tentando salvar o arquivo gerado com "/", o qual já fiz a correção (Dica dos nossos colegas Criquio e Alexandre Neves em um dos tópicos do Word aberto pelo outro colega Alcides). No entanto, ainda preciso de algumas implementações quais sejam:

    1) Consegui fazer que quando no Formulário o campo estivesse vazio iria para o próximo campo, no entanto, gostaria que também o rótulo desse campo não aparecesse no Word, tipo assim: No Word, no layout tem o rótulo: "Tombo:" e ao seu lado aparece o campo indicado "Tombo", caso o mesmo não seja vazio, caso o campo seja vazio, não mostra no Documento do Word, ou seja, nem o rótulo nem o campo correspondente;

    2) Ao salvar o Documento no Word, gostaria que o arquivo gerado fosse aberto automaticamente, após a linha de comando: MsgBox "Documento salvo com sucesso...", vbInformation (Ver no código abaixo) - e ao mesmo tempo sobrepondo-se ao Formulário,sem fechar o mesmo, e ao fechar o Documento no Word retornar para o registro atual do Formulário onde o documento foi gerado;

    3) Opção para abrir o Documento Word já gerado, ou seja, abrir o Documento do registro atual do Formulário em tela.

    Segue abaixo a nova rotina que funcionou:

    Private Sub BtWord_Click()
    #Const DESENV = -1

    On Error GoTo TrataErro
    Dim oApp As Object 'Cria uma variável objeto
    Dim strSQL As String

    ' Inicia o MS Word
    Set oApp = CreateObject("Word.Application") 'Cria e abre o objeto Word
    With oApp
    ' Torna o MS Word visível
    Visible = True
    ' Abre o documento base
    .Documents.Open ("Q:\ARGUS\MatrizOficio.doc")
    'Move cada campo para o indicador definido no documento
    .ActiveDocument.Bookmarks("NumOficio").Select
    .Selection.Text = (CStr(Forms!F13_Oficios!NumOficio))
    .ActiveDocument.Bookmarks("Dataoficio").Select
    .Selection.Text = (Format(Forms!F13_Oficios!DataOficio, "dd")) & " de " & (Format(Forms!F13_Oficios!DataOficio, "mmmm")) & " de " & (Format(Forms!F13_Oficios!DataOficio, "yyyy"))
    .ActiveDocument.Bookmarks("TrataD").Select
    .Selection.Text = (CStr(Forms!F13_Oficios!Tratamento))
    .ActiveDocument.Bookmarks("Destinatario").Select
    .Selection.Text = (CStr(Forms!F13_Oficios!NomeDestinatario))
    .ActiveDocument.Bookmarks("CargoD").Select
    .Selection.Text = (CStr(Forms!F13_Oficios!CargoDestinatario))
    .ActiveDocument.Bookmarks("OrgaoD").Select
    .Selection.Text = (CStr(Forms!F13_Oficios!OrgaoDestinatario))
    .ActiveDocument.Bookmarks("Emitente").Select
    .Selection.Text = (CStr(Forms!F13_Oficios!NomeEmitente))
    .ActiveDocument.Bookmarks("Cargo").Select
    .Selection.Text = (CStr(Forms!F13_Oficios!CargoEmitente))
    .ActiveDocument.Bookmarks("Funcao").Select
    .Selection.Text = (CStr(Forms!F13_Oficios!FuncaoEmitente))
    .ActiveDocument.Bookmarks("CodOficio").Select
    .Selection.Text = (CStr(Forms!F13_Oficios!CODOficio))
    .ActiveDocument.Bookmarks("Tombo").Select
    .Selection.Text = (CStr(Forms!F13_Oficios!NomeIDDOC))

    'Salva o arquivo gerado
    .ActiveDocument.SaveAs "Q:\ARGUS\01.Oficios\" & "Oficio " & Replace(Me.NumOficio, "/", "-") & " " & CurrentUser() & ".doc"

    MsgBox "Documento salvo com sucesso...", vbInformation
    'Fecha o documento
    .ActiveDocument.Close
    End With
    'Fecha o Word
    oApp.Quit
    Dim x As String
    x = "Q:\ARGUS\01.Oficios\" & "Oficio " & Replace(Me.NumOficio, "/", "-") & " " & CurrentUser() & ".doc"

    Dim Word As New Word.Application
    With Word
    .Documents.Open x
    .Visible = True
    .WindowState = wdWindowStateMaximize
    End With
    'Libera a memória
    Set oApp = Nothing
    Saida:
    Exit Sub

    TrataErro:
    'Se um campo do formulário estiver vazio, remove o texto do Indicador e continua
    If Err.Number = 94 Then
    oApp.Selection.Text = ""
    Resume Next
    End If
    MsgBox "Form_F13_Oficios - btWord_Click" & vbCrLf & Err.Description, vbExclamation + vbOKOnly, "Erro: " & CStr(Err.Number)
    #If DESENV Then
    oApp.Quit
    Set oApp = Nothing
    Stop
    Resume
    #End If
    Resume Saida
    End Sub
    avatar
    vileman
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 580
    Registrado : 25/05/2011

    [Resolvido]Formulário Access para Word Empty Formulário Access para Word

    Mensagem  vileman 25/1/2012, 23:40

    Colegas, as questões 2 e 3 consegui resolver, falta apenas a questão nº 1 abaixo:

    1) Consegui fazer que quando no Formulário o campo estivesse vazio iria para o próximo campo, no entanto, gostaria que também o rótulo desse campo não aparecesse no Word, tipo assim: No Word, no layout tem o rótulo: "Tombo:" e ao seu lado aparece o campo indicado "Tombo", caso o mesmo não seja vazio, caso o campo seja vazio, não mostra no Documento do Word, ou seja, nem o rótulo nem o campo correspondente.

    Solução questão 2:
    ...
    .WindowState = wdWindowStateMaximize
    PS: Colocar Comandos após linha acima (ver código completo)
    'ROTINA: Abrir arquivo automaticamente após ser gerado
    Dim w As String
    Dim y As String
    w = "Q:\ARGUS\01.Oficios\"
    y = "Q:\ARGUS\01.Oficios\" & "Oficio " & Replace(Me.NumOficio, "/", "-") & " " & CurrentUser() & ".doc"
    Shell "C:\WINDOWS\explorer.exe """ & y & "", vbNormalFocus

    Solução questão 3:
    3.1) Criar botão "AbreWord"
    Private Sub AbreWord_Click()
    Dim x As String
    Dim y As String

    x = "Q:\ARGUS\01.Oficios\"
    y = "Q:\ARGUS\01.Oficios\" & "Oficio " & Replace(Me.NumOficio, "/", "-") & " " & CurrentUser() & ".doc"
    Shell "C:\WINDOWS\explorer.exe """ & y & "", vbNormalFocus
    End Sub

    3.2) Criar Controle Imagem ou Botão
    Private Sub ImagemLocalizar_Click()
    CBArquivo.Visible = True
    CBArquivo.SetFocus
    End Sub

    3.3) Criar ComboBox
    Private Sub CBArquivo_AfterUpdate()
    ' Encontrar o registro que coincide com o controle.
    Me.RecordsetClone.FindFirst "[CodOficio] = " & Me![CBArquivo]
    Me.Bookmark = Me.RecordsetClone.Bookmark
    End Sub

    avatar
    vileman
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 580
    Registrado : 25/05/2011

    [Resolvido]Formulário Access para Word Empty Formulário Access para Word

    Mensagem  vileman 31/1/2012, 02:34

    Consegui resolver a questão nº 1 que faltava:

    1) Consegui fazer que quando no Formulário o campo estivesse vazio iria para o próximo campo, no entanto, gostaria que também o rótulo desse campo não aparecesse no Word, tipo assim: No Word, no layout tem o rótulo: "Tombo:" e ao seu lado aparece o campo indicado "Tombo", caso o mesmo não seja vazio, caso o campo seja vazio, não mostra no Documento do Word, ou seja, nem o rótulo nem o campo correspondente.

    .ActiveDocument.Bookmarks("Tombo").Select
    .Selection.Text = (CStr(IIf(IsNull(NomeIDDOC), " ", "Tombo Nº " & Forms!F13_Oficios!NomeIDDOC)))

    Conteúdo patrocinado


    [Resolvido]Formulário Access para Word Empty Re: [Resolvido]Formulário Access para Word

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 19/3/2024, 06:33