** Uso Access 2003 com Windows 7 64 bits
Após pesquisa aqui neste Fórum achei parte de uma rotina para usar em um Formulário do Acess para gerar um Documento do Word com os campos do mesmo. Até aqui tudo funcionou perfeito. Quando fiz alguns testes aconteceu o seguinte:
1º Teste:
a) Abri um documento qualquer do Word fora do Sistema usado no Access;
b) Abri o Sistema e gerei um novo Documento do Formulário para o Word, mas quando o mesmo é gerado ao abrir aparece a mensagem de alerta: "Arquivo em uso - Ofício 0001-2012.doc está bloqueado para edição por 'Vileman' - Você deseja:
( ) abrir uma cópia somente leitura
( ) criar uma cópia local e mesclar suas alterações posteriormente
( ) receber notificação quando a cópia original estiver disponível
Com as opções de: OK e Cancelar
Clico e cancelar e funciona normal.
2º Teste: - Fiz o inverso
a)Fechei tudo, e abri primeiramente o Sistema e gerei um novo Documento Word.
b)Abri outro documento qualquer do Word, e funcionou normalmente sem a mensagem anterior.
Informo ainda que ao abrir o Gerenciador de Tarefas do Windows aconteceu o seguinte:
No 1º Teste acima:
Na Guia 'Processos' aparecem 2 Winword.exe *32 em execução. Na Guia 'Aplicativos' mostra os 2 arquivos abertos.
No 2º Teste acima:
Na Guia 'Processos' aparece apenas 1 Winword.exe *32 em execução. Na Guia 'Aplicativos' mostra ow 2 arquivos abertos.
Resumo: No 1º Teste é como ele abrisse 2 executáveis do Word, quando o 2º documento é gerado pelo Formulário Access, porisso aparece aquela mensagem de alerta citada no início deste tópico. No 2º Teste, executa normalmente sem mensagem nenhuma.
A questão é: Tem como evitar que apareça a mensagem acima no 1º Teste, caso já tenha um outro Documento Word aberto antes de ser gerado um documento word pelo Acess, visto que o Sistema é usado em Rede ?
Alguém já passou por tal situação ? Ou sabe como resolver essa questão ?
Abaixo segue o código que uso em um botão do Formulário:
Private Sub BtWord_Click()
'OBRIGATÓRIO: Referência: Microsoft Word xx.x Object Library
#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 ("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("Sigla").Select
.Selection.Text = (CStr(Forms!F13_Oficios!SiglaSetor))
.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(IIf(IsNull(NomeIDDOC), " ", "Tombo Nº " & Forms!F13_Oficios!NomeIDDOC)))
'Salva o arquivo gerado
.ActiveDocument.SaveAs "C:\ARGUS\01.Oficios\" & "Oficio " & Replace(Me.NumOficio, "/", "-") & " " & CurrentUser() & ".doc"
MsgBox "Documento WORD gerado com sucesso...", vbInformation
'Fecha o documento
.ActiveDocument.Close
End With
'Fecha o Word
oApp.Quit
Dim x As String
x = "C:\ARGUS\01.Oficios\" & "Oficio " & Replace(Me.NumOficio, "/", "-") & " " & CurrentUser() & ".doc"
Dim Word As New Word.Application
With Word
.Documents.Open x
.Visible = True
.WindowState = wdWindowStateMaximize
Dim w As String 'ROTINA: Abrir arquivo automaticamente após ser gerado
Dim y As String
w = "C:\ARGUS\01.Oficios\"
y = "C:\ARGUS\01.Oficios\" & "Oficio " & Replace(Me.NumOficio, "/", "-") & " " & CurrentUser() & ".doc"
Shell "C:\WINDOWS\explorer.exe """ & y & "", vbNormalFocus
End With
Me.BtWord.Visible = False 'Torna Invisivel a Imagem após fechar Word
Me.RotuloWord.Visible = False 'Torna Rótulo do Word Invisivel
'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
Após pesquisa aqui neste Fórum achei parte de uma rotina para usar em um Formulário do Acess para gerar um Documento do Word com os campos do mesmo. Até aqui tudo funcionou perfeito. Quando fiz alguns testes aconteceu o seguinte:
1º Teste:
a) Abri um documento qualquer do Word fora do Sistema usado no Access;
b) Abri o Sistema e gerei um novo Documento do Formulário para o Word, mas quando o mesmo é gerado ao abrir aparece a mensagem de alerta: "Arquivo em uso - Ofício 0001-2012.doc está bloqueado para edição por 'Vileman' - Você deseja:
( ) abrir uma cópia somente leitura
( ) criar uma cópia local e mesclar suas alterações posteriormente
( ) receber notificação quando a cópia original estiver disponível
Com as opções de: OK e Cancelar
Clico e cancelar e funciona normal.
2º Teste: - Fiz o inverso
a)Fechei tudo, e abri primeiramente o Sistema e gerei um novo Documento Word.
b)Abri outro documento qualquer do Word, e funcionou normalmente sem a mensagem anterior.
Informo ainda que ao abrir o Gerenciador de Tarefas do Windows aconteceu o seguinte:
No 1º Teste acima:
Na Guia 'Processos' aparecem 2 Winword.exe *32 em execução. Na Guia 'Aplicativos' mostra os 2 arquivos abertos.
No 2º Teste acima:
Na Guia 'Processos' aparece apenas 1 Winword.exe *32 em execução. Na Guia 'Aplicativos' mostra ow 2 arquivos abertos.
Resumo: No 1º Teste é como ele abrisse 2 executáveis do Word, quando o 2º documento é gerado pelo Formulário Access, porisso aparece aquela mensagem de alerta citada no início deste tópico. No 2º Teste, executa normalmente sem mensagem nenhuma.
A questão é: Tem como evitar que apareça a mensagem acima no 1º Teste, caso já tenha um outro Documento Word aberto antes de ser gerado um documento word pelo Acess, visto que o Sistema é usado em Rede ?
Alguém já passou por tal situação ? Ou sabe como resolver essa questão ?
Abaixo segue o código que uso em um botão do Formulário:
Private Sub BtWord_Click()
'OBRIGATÓRIO: Referência: Microsoft Word xx.x Object Library
#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 ("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("Sigla").Select
.Selection.Text = (CStr(Forms!F13_Oficios!SiglaSetor))
.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(IIf(IsNull(NomeIDDOC), " ", "Tombo Nº " & Forms!F13_Oficios!NomeIDDOC)))
'Salva o arquivo gerado
.ActiveDocument.SaveAs "C:\ARGUS\01.Oficios\" & "Oficio " & Replace(Me.NumOficio, "/", "-") & " " & CurrentUser() & ".doc"
MsgBox "Documento WORD gerado com sucesso...", vbInformation
'Fecha o documento
.ActiveDocument.Close
End With
'Fecha o Word
oApp.Quit
Dim x As String
x = "C:\ARGUS\01.Oficios\" & "Oficio " & Replace(Me.NumOficio, "/", "-") & " " & CurrentUser() & ".doc"
Dim Word As New Word.Application
With Word
.Documents.Open x
.Visible = True
.WindowState = wdWindowStateMaximize
Dim w As String 'ROTINA: Abrir arquivo automaticamente após ser gerado
Dim y As String
w = "C:\ARGUS\01.Oficios\"
y = "C:\ARGUS\01.Oficios\" & "Oficio " & Replace(Me.NumOficio, "/", "-") & " " & CurrentUser() & ".doc"
Shell "C:\WINDOWS\explorer.exe """ & y & "", vbNormalFocus
End With
Me.BtWord.Visible = False 'Torna Invisivel a Imagem após fechar Word
Me.RotuloWord.Visible = False 'Torna Rótulo do Word Invisivel
'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