Ir para o conteúdo
Gnrtuga

Form em VB que altera palavras no Word

Mensagens Recomendadas

Gnrtuga    10
Gnrtuga

Ola pessoal.

tenho o seguinte problema... na instituição onde trabalho (deve dar para perceber pelo meu nick..  :hmm: ) , temos uns modelos próprios e que não podem ser alterados, e eu uso muito esses modelos (actualmente em formato .doc), onde muda muito pouco, tipo nome do "cliente" nif, data de nascimento... e eu pretendia criar um form para ser mais rápido, andei a fazer umas pesquisas e encontrei  http://www.portugal-a-programar.pt/index.php?showtopic=18105 e http://www.portugal-a-programar.pt/index.php?showtopic=35926 , e outros similares noutros sites mas eu sou novo nisto e tenho muitas duvidas, a primeira e o porque das @ ? a segunda e: devo fazer isto no VB do word ou no VB express? ja copiei os exemplos dos outros tópicos mas não funcionam (pelo menos comigo!).

se alguém me pudesse arranjar um modelo que funcionasse para eu tentar perceber era óptimo!

Obrigado e boa passagem de ano!

p.s cuidado com a bebida que eu não preciso de "clientes" novos!  :nono:

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Gnrtuga    10
Gnrtuga

Boas Acção, antes de mais obrigado pela resposta, vi só assim por alto e acho que esta um espectáculo! Mas o que eu queria era o modelo cegraf 430, (termo de entrega), que e o que preenchemos quando a viatura e apreendida pelo IVA, e o infractor efectua o pagamento antecipado.

já agora, desconfio que somos da mesma unidade...lol UAF eu sou do DAFFaro.

Mais uma vez obrigado!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jpaulino    106
jpaulino

Podes fazer isso com VB.NET Express ou com VBA (VB no Word).

Depende do que queres fazer e qual o destino. Explica lá melhor o que queres alterar, quem vai alterar, etc.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Gnrtuga    10
Gnrtuga

O que eu quero e simples, só não sei fazer! :eek: nos tópicos que eu dei como exemplo no primeiro post,  eles tem um documento no word, onde o que eles querem alterar no documento esta antecedido por uma arroba ex: @nome , e através de um form preenchem as caixas de texto e ele altera no documento do word..., mas eu sou básico, e tentei perceber o script, mas primeiro não compreendo como e que o programa detecta qual a caixa de texto que e o do nome.. depois não percebo muito bem o processo da substituição.. basicamente quero o que o acao mandou, mas mais simples... só tenho no máximo 10 campos a preencher, e o documento só tem uma pagina..

acao já procurei no forumgnr e não encontrei, foi por isso que ando a ver se descubro como se faz... o código do que me mandaste parece ser muita fruta para mim... mas vou estuda-lo a ver se compreendo.

editei o post porque tinha uma pergunta mas já descobri a resposta.. sou mesmo básico.. :)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Gnrtuga    10
Gnrtuga

Ora bem, depois de ver o código que o acao me deu, tirei o que achei que faria o meu form funcionar, por isso criei um novo documento do word(como modelo do word), meti-lhe duas caixas de texto que ficaram com o nome de nomeword e moradaword, depois no formulário criei outras duas caixas de texto e dei-lhes o nome de nomeform e moradaform, meti também 2 botões, um que executa as acções e outro para sair.. e já funciona, ainda não esta bem, mas esta quase...  :cheesygrin:

o código ficou assim:

Sub mudanca()


Private Sub CommandButton1_Click()


'esta parte penso que seja para seleccionar os campos de texto a inserir no documento activo
ActiveDocument.FormFields("nomeword").Select
Selection.Text = nomeform.Text
ActiveDocument.FormFields("moradaword").Select
Selection.Text = moradaform.Text
End Sub
Sub nome1()
nomeform.Text = StrConv(nomeform.Text, vbProperCase)
'aqui ia inserir o nome que estivesse no formulario no campo do word para o nome
Sub morada()
'aqui ia inserir a morada que estivesse no formulario no campo do word para a morada
moradaform.Text = StrConv(moradaform.Text, vbProperCase)

End Sub

End Sub


End Sub


End Sub

Private Sub CommandButton2_Click()
Unload me
End Sub

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
acao    19
acao

boas

é aqui que tens que tens que centrar as atenções.  fica no comando imprimir

If vErroImprimir = True Then Exit Sub  ' aqui se há erro sai não imprime nada

      On Error GoTo MergeButton_Err

      ' cria o objecto word

        Dim objWord As Word.Application

        ' inicia o word 97

        Set objWord = CreateObject("Word.Application")

        With objWord

            'torna a aplicaçao visivel

            .Visible = True

            'abre o documento

            If ckApreensaoMercadoria.Value = True Then

            .Documents.Open ("D:\FormAutoIvaE4V2\NaoAbrir\AutoIva.dotx")      'isto é o caminho do doc word

            Else

            .Documents.Open ("D:\FormAutoIvaE4V2\NaoAbrir\AutoIva1.dotx")      'Isto é o caminho do doc word

'PS: neste exemplo uso 2 documentos 

            End If

            'Tipo de auto numero e ea

            If optAutoApreenssao.Value = True Then

            .ActiveDocument.FormFields("TipoAuto").Select

            .Selection.Text = "Auto de Apreensão"

            Else

            .ActiveDocument.FormFields("TipoAuto").Select

            .Selection.Text = "Auto de Notícia"

            End If

            ' move para cada indicador e substitui os dados

            .ActiveDocument.FormFields("NºEA").Select        'isto é os campos que existem no doc word

            .Selection.Text = txtNumAutoEa.Text                'isto é os campos no formulário

            .ActiveDocument.FormFields("AnoAuto").Select

            .Selection.Text = txtNumAutoAno.Text

            .ActiveDocument.FormFields("NºAuto").Select

            .Selection.Text = txtNumAutoNum.Text

            .ActiveDocument.Bookmarks("CabecalhoAutoN").Select

            .Selection.Text = txtNumAutoNum.Text

End With

        'imprime o documento

        objWord.ActiveDocument.PrintOut Background:=False

        'salve o documento sem alterações

        objWord.ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges

        ' sair do word e libera as váriaveis

        objWord.Quit

        Set objWord = Nothing

        Exit Sub

cumps

acao

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Gnrtuga    10
Gnrtuga

Boas Acao, o teu código e muito avançado para mim, eu quero uma coisa mesmo básica, que e para ir percebendo o que estou a fazer, e o que eu queria, era que ao abrir o documento do word ele lançasse logo o form, fiz umas pesquisas e parece que há-de ser qualquer coisa assim do género...

mas nem sei se estou a meter o código no sitio certo..

Private Sub UserForm_Initialize()
UserForm1.Show

End Sub

Sub mudanca()

Private Sub CommandButton1_Click()


'esta parte penso que seja para seleccionar os campos de texto a inserir no documento activo
ActiveDocument.FormFields("nomeword").Select
Selection.Text = nomeform.Text
ActiveDocument.FormFields("moradaword").Select
Selection.Text = moradaform.Text
End Sub
(...)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
acao    19
acao

boas

tens aqui um pequeno exemplo

[ftp=ftp://www.megaupload.com/?d=LQ0DSRW4]http://www.megaupload.com/?d=LQ0DSRW4

[/ftp]

em Microsoft Wor Objects\ThisDocument  metes o codigo a seguir

Private Sub Document_Open()
UserForm1.Show
End Sub

no form metes este

Private Sub CommandButton1_Click()
Dim objWord As Word.Application
         ' inicia o word 97
         Set objWord = CreateObject("Word.Application")
         With objWord
            'torna a aplicaçao visivel
            .Visible = True
            'abre o documento
         
            .Documents.Open ("D:\teste 2\teste.docx")
           
            
            ' move para cada indicador e substitui os dados
            .ActiveDocument.FormFields("Texto1").Select
            .Selection.Text = TextBox1.Text
            .ActiveDocument.FormFields("Texto2").Select
            .Selection.Text = TextBox2.Text
            End With
         'imprime o documento
         objWord.ActiveDocument.PrintOut Background:=False
         'salve o documento sem alterações
         objWord.ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
         ' sair do word e libera as váriaveis
         objWord.Quit
         Set objWord = Nothing
         Exit Sub
MergeButton_Err:
         ' campo em branco
         If Err.Number = 94 Then
            objWord.Selection.Text = ""
            Resume Next
         Else
            MsgBox Err.Number & vbCr & Err.Description
         End If
         Exit Sub


End Sub

é só este o codigo que precisas de alterar

  .Documents.Open ("D:\teste 2\teste.docx")

         

            .ActiveDocument.FormFields("Texto1").Select

            .Selection.Text = TextBox1.Text

            .ActiveDocument.FormFields("Texto2").Select

            .Selection.Text = TextBox2.Text

também tens que desactivar as macros.

para o ficheiro exemplo funcionar tens que o colocar no disco D:

boa sorte

cumps

acao

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Gnrtuga    10
Gnrtuga

ola acao, depois das tuas excelentes dicas e sem as quais não tinha conseguido fazer isto, nas minhas pesquisas não encontrei em lado nenhum a explicação para o userform1.show, já estava a ficar maluco com isto! agora já funciona, mas ainda tenho um problema, só funciona se eu abrir o original com o botão direito, se tento abrir normalmente ele abre um ficheiro novo, mas o form não aparece... meti o código que achava que ia tratar disso, mas ele não abre a mesma....

eu no meu form não tenho nenhum botão para imprimir, tenho só um para criar e outro para sair, e como isto e só para mim, chega..clico sair e imprimo normalmente..

Não consegui abrir o link do megaupload....

o meu codigo ficou assim :

Sub mudanca()


Private Sub CommandButton1_Click()

Dim objword As Word.Application
Set objword = CreateObject("word.application")
With objword
Visible = True
Documents.Open ("D:\OFICIOS\Termos Entrega\TermoEntrega.doc")
objword.ActiveDocument.PrintOut Background:=False
         'salve o documento sem alterações
        objword.ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
         ' sair do word e libera as váriaveis
        objword.Quit
         'Set objword = Nothing
         Exit Sub



ActiveDocument.FormFields("numautow").Select
Selection.Text = numautof.Text
ActiveDocument.FormFields("diaw").Select
Selection.Text = diaf.Text
ActiveDocument.FormFields("mesw").Select
Selection.Text = mesf.Text
ActiveDocument.FormFields("anow").Select
Selection.Text = anof.Text
(...)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
acao    19
acao

boas

analisa bem o meu post anterior

não estás a fazer igual, estás a imprimir antes de passares o valor dos campos para o doc word, mas se assim resulta!.  Ok.

o problema de não abrir o forme pode ser  derivado ás macros , desactiva-as.

:cheesygrin:Peço desculpa é activar as macros é a ultima opção

o link do ficheiro está correcto mas  ao redemensionar para ele corta o http: ficando assim

htp:    ,  coloca o http: que ele funciona.

cumps

acao

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Gnrtuga    10
Gnrtuga

Ora bem... ja percebi que para para abrir o documento normalmente e aparecer o form, tenho de guardar o ficheiro como documento do word com permissão para macros... e depois abrindo esse documento ele abre logo o form. já  fiz três milhões de coisas e houve uma altura em que ele ia para um documento e abria o formulário novamente, e tinha de clicar em sair para ele me mostrar o que tinha escrito, e ao fazer isso ele imprimia...mas depois ao fechar ele pergunta-me se quero guardar as alterações...ou então aparece-me que o documento esta bloqueado para edição.. mas vou ver e o documento esta como acesso sem restrições...

:wallbash: vou ficar completamente maluco a conta disto... :nono1:

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
acao    19
acao

boas

Faz assim

Segue os seguintes passos:

Abres o word.

1. Aba programador, visualBasic, botão insert userForm,    (e inseres o form)

2. Vê se tens aberto o «explorador de projecto» se é negativo faz Ctrl+R

3. No explorador de projecto vê se tens a pasta «Microsoft Word Project» se é negativo para adicionares abres a pasta reference e selecionas «reference to Normal» e clikas na pasta «toggle Folders» que se encontra acima do explorador do projecto ao lado aonde se abre o código.

4. Abres a pasta Microsoft word Project e dás 2 clikes em DisDocument, abre a pagina para o código e na caixa á esquerda selecionas document, na caixa à direita selecionas open, inseres o código «UserForm1.Show»

Assim!

Private Sub Document_Open()

UserForm1.Show

End Sub

5. Guardas com o formato de documento com permissão para macros de word

6. Abres novamente, Se o form não abrir vais a aba programador, segurança de macros e selecionas  activar todas as macros??????.  E fechas o documento guardando as alterações

7. Abres o doc se abrir o form vais a programador, explorador do projecto, abres a pasta forms e clikas 2 vezes na form, form aberta clikas 2 vezes no botao imprimir ou outro e colocas o restante código.

Boa sorte

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Gnrtuga    10
Gnrtuga

Boas Acao, já tenho o que queria, e simples eu sei, mas era mesmo isto que precisava, por isso mil obrigados pela tua preciosa ajuda, sem ti não tinha conseguido! Ja tenho um novo projecto  :biggrin:, por isso devo estar a pedir ajuda brevemente... :shocking: aqui esta o meu código todo.

Com isto tudo já aprendi umas coisas novas!!! Mais uma vez, OBRIGADO!!!!

a parte do Microsoft Word Objects\ThisDocument

Private Sub Document_Open()
UserForm1.Show   'faz com que o formulário apareça quando se abre o word
End Sub

e a parte do formulário


Private Sub CommandButton1_Click()

'esta parte selecciona os campos de texto (txtbox criadas no word) , e diz qual o texto do formulário que e inserido nessas textbox
ActiveDocument.FormFields("numautow").Select           ' as acabadas em W são as que tenho no word
Selection.Text = numautof.Text                                      ' as acabadas em F são as do formulário
ActiveDocument.FormFields("diaw").Select
Selection.Text = diaf.Text
ActiveDocument.FormFields("mesw").Select
Selection.Text = mesf.Text
ActiveDocument.FormFields("anow").Select
Selection.Text = anof.Text
ActiveDocument.FormFields("horaw").Select
Selection.Text = horaf.Text
ActiveDocument.FormFields("minutosw").Select
Selection.Text = minutosf.Text
ActiveDocument.FormFields("coimaw").Select
Selection.Text = coimaf.Text
ActiveDocument.FormFields("sfinw").Select
Selection.Text = sfinf.Text
ActiveDocument.FormFields("doccarw").Select
Selection.Text = doccarf.Text
ActiveDocument.FormFields("numdoccarw").Select
Selection.Text = numdoccarf.Text
ActiveDocument.FormFields("marcaw").Select
Selection.Text = marcaf.Text
ActiveDocument.FormFields("matriculaw").Select
Selection.Text = matriculaf.Text
ActiveDocument.FormFields("nomew").Select
Selection.Text = nomef.Text
ActiveDocument.FormFields("docw").Select
Selection.Text = docf.Text
ActiveDocument.FormFields("numdocw").Select
Selection.Text = numdocf.Text
ActiveDocument.FormFields("moradaw").Select
Selection.Text = moradaf.Text
ActiveDocument.FormFields("dia2w").Select ' nestes como o valor só era introduzido uma vez no formulário e várias vezes no word fiz assim
Selection.Text = diaf.Text
ActiveDocument.FormFields("mes2w").Select
Selection.Text = mesf.Text
ActiveDocument.FormFields("ano2w").Select
Selection.Text = anof.Text
ActiveDocument.FormFields("dia3w").Select
Selection.Text = diaf.Text
ActiveDocument.FormFields("mes3w").Select
Selection.Text = mesf.Text
ActiveDocument.FormFields("ano3w").Select
Selection.Text = anof.Text
ActiveDocument.FormFields("nome2w").Select
Selection.Text = nomef.Text
ActiveDocument.FormFields("localemissaow").Select
Selection.Text = localemissaof.Text
ActiveDocument.FormFields("diaemissw").Select
Selection.Text = diaemissaof.Text
ActiveDocument.FormFields("mesemissw").Select
Selection.Text = mesemissf.Text
ActiveDocument.FormFields("anoemissw").Select
Selection.Text = anoemissaof.Text
ActiveDocument.FormFields("funcaow").Select
Selection.Text = funcaof.Text
ActiveDocument.FormFields("doc2w").Select
Selection.Text = docf.Text
ActiveDocument.FormFields("numdoc2w").Select
Selection.Text = numdocf.Text
End Sub


Private Sub CommandButton2_Click()
Unload Me ' este comando diz que ao clicar no segundo botao ele vai fechar o formulario e
ActiveDocument.PrintOut Background:=False 'este comando vai imprimir (neste caso 2x)
ActiveDocument.PrintOut Background:=False
End Sub

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
lupum    0
lupum

Ora retomando este exemplo, para não criar um tópico novo, Tenho algo do género, mas como faço para sair sem gravar? O exemplo demonstrado dá-me erro. E outra coisa, escrever um número, ele converter automaticamente para extenso no formulário, tipo "http://www.jorgepaulino.com/2008/05/vbnet-converter-nmeros-para-extenso.html", (NÃO CONSIGO APLICAR) e copiar para o meu documento word. Há maneira? Não sei se me estou a explicar bem... Se for necessário posso enviar um exemplo de doc.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
lupum    0
lupum

Ou seja, para abrir o formulário:

Private Sub Document_Open()
UserForm1.Show   'faz com que o formulário apareça quando se abre o word
End Sub

Para o documento é:

Private Sub CommandButton1_Click()
'esta parte selecciona os campos de texto (txtbox criadas no word) , e diz qual o texto do formulário que e inserido nessas textbox
ActiveDocument.FormFields("num1w").Select           ' as acabadas em W são as que tenho no word
Selection.Text = num1f.Text                                      ' as acabadas em F são as do formulário
ActiveDocument.FormFields("num2w").Select
Selection.Text = num2f.Text
ActiveDocument.FormFields("valorw").Select
Selection.Text = valorf.Text

End Sub

Private Sub TextBox1_Change()

End Sub

Private Sub TextBox2_Change()

End Sub

Private Sub CommandButton2_Click()
Unload Me ' este comando diz que ao clicar no segundo botao ele vai fechar o formulario e
ActiveDocument.PrintOut Background:=False 'este comando vai imprimir (neste caso 2x)
End Sub

Private Sub CommandButton3_Click()
         'salve o documento sem alterações
         objWord.ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
         ' sair do word e libera as váriaveis
         objWord.Quit
         Set objWord = Nothing
         Exit Sub
End Sub

O comando 3 não consigo executar. Dá erro. E op extenso nem sei fazer :///

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Gnrtuga    10
Gnrtuga

Pois eu também acho que tive problemas com isso..então obtei por fazer de forma diferente...

Private Sub CommandButton2_Click()
ActiveDocument.SaveAs ("D:\OFICIOS\") & autonf.Text & ".doc"
MsgBox (" O Ofício foi guardado em D:\OFICIOS com o nome ") & autonf.Text, vbInformation
Unload Me
End Sub

Ou seja, em vez de sair e não gravar as alterações, grava com o nome (neste caso número) da caixa de texto, e no caminho especificado... no fundo faz quase a mesma coisa, e para o que eu queria até ficou melhor assim...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
acao    19
acao

boas

lupum deixo aqui um pequeno exemplo para veres.

a função para extenso tem limites e é para euros, caso queiras apenas para numerário é só alterares.

quando tiver tempo coloco um post a comentar o exemplo.

http://www.mediafire.com/?5cebkn5jc3og2eo

link para o post comentado

http://www.portugal-a-programar.pt/forums/topic/0-find-topic/?do=findComment&comment=437141

cumps

acao

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
acao    19
acao

Pois eu também acho que tive problemas com isso..então obtei por fazer de forma diferente...

Private Sub CommandButton2_Click()
ActiveDocument.SaveAs ("D:\OFICIOS\") & autonf.Text & ".doc"
MsgBox (" O Ofício foi guardado em D:\OFICIOS com o nome ") & autonf.Text, vbInformation
Unload Me
End Sub

Ou seja, em vez de sair e não gravar as alterações, grava com o nome (neste caso número) da caixa de texto, e no caminho especificado... no fundo faz quase a mesma coisa, e para o que eu queria até ficou melhor assim...

boas

boa opção. :thumbsup:

também tens a opção de colocar a impressoara pdf como predefenida, e imprimir em pdf.

cumps

acao

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Gnrtuga    10
Gnrtuga

Olá acão! sempre em cima do acontecimento! :D

Esta função do número por extenso também me vai dar jeito a mim para os termos de entrega para o tribunal e para o campo apreensões do auto de noticia.

:thumbsup:

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
lupum    0
lupum

Já sei que estou a incomodar, mas... 2 questões:

1 - Há algum comando para, caso nos enganemos, fazer um Clear aos textfield, para voltarmos a criar o doc com a info correcta?

2 - No caso das datas, há maneira de ter um calendário no form para inserir a data?

Mais uma vez obrigado à rápida ajuda :thumbsup:)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Gnrtuga    10
Gnrtuga

Não sei se é isto que queres, é para limpar os conteudos dos formulários

Private Sub CommandButton1_Click()
Dim c As Control
' Faz um ciclo em todos os controls
For Each c In Me.Controls
' Se o controlo for um TextBox
' limpa o texto do controlo
If TypeOf c Is MSForms.TextBox Then
c.Text = ""
End If
If TypeOf c Is MSForms.ComboBox Then
c.Text = ""
End If
Next

End Sub

Em relação ao calendário, na barra do visual basic tens a opção tools, depois adicional controls, procuras controlo de calendário, e depois já te aparece na toolbox, é só clicares lá e no formulário escolhes o tamanho do calendário.

Só não sei como se faz para ele escolher a data que tens para uma textbox... mas se descobrir logo te digo!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade