Ir ao conteúdo
  • Cadastre-se

Excel Preencher um Formulario PDF com VBA


Posts recomendados

Prezados boa tarde,

 

Necessito de Ajuda com uma automatização,

tenho 1 Formulário em PDF, este por sua vez tem Campos Específicos que são "Preenchíveis" 

eu Consegui fazer com que o VBA Abra este Arquivo PDF, com o seguinte Código:

____________________________________________________________________________

Sub PreencherPDF()
Dim AdobeApp As String
Dim AdobeFile As String


AdobeApp = "C:\Program Files (x86)\Adobe\Acrobat 11.0\Acrobat\Acrobat.exe"
AdobeFile = "\Raylan\Formularios\FORMULARIO.pdf"
StartAdobe = Shell("" & AdobeApp & " " & AdobeFile & "", 1)


End Sub

____________________________________________________________________________

 

porém preciso fazer com que as informações contidas no Excel, sejam transpostas no PDF, isso é possível?

 

já tentei transformar esse Formulário PDF em outros formatos, já fiz as conversões possíveis, e com o auto rigor de proteção impregado nele, impede a edição.

executar esse preenchimento automático?

Supondo que as informações estão nas Colunas (A1, B1 e C1) preciso colocar em determinado campo no PDF.

 

Agradeço desde Já.

 

Link para o comentário
Compartilhar em outros sites

Boa tarde @Basole,

agradeço o retorno, eu tenho o Adobe Pro, gostaria de fazer o Insert no formulário PDF, com os dados que estão no Excel,

que já foram extraídos de um BD, o Excel é a "Ponte" entre o BD e o Formulário, queria entender só como faço a Istância do Formulário, e a referencia a seus campos para Preenchimento, caso você saiba, por favor me auxilie.

 

Existem Campos Determinados, cada um tem seu Nome especifico como se fossem "Variáveis" no PDF, o preenchimento com Dados de Clientes que são extraídos do BD.

queria fazer uma forma de preencher automaticamente, já que a conexão do PDF com o BD vem do Excel.

 

Desde já Agradeço a Atenção !!

 

 

Capturar.PNG

Link para o comentário
Compartilhar em outros sites

Basole bom dia,

 

Referente a Aplicação, consigo emular o "Formulario" que preciso diretamente? e identificar os campos?

consigo abrir o formulario via vba, não consigo manusear o formulario apenas, é preciso JSO?

conforme Cod a seguir:

 

Function ListPDFFormFields(FilePath As String) As Variant
	Set ListPDFFormFields = CreateObject("Scripting.Dictionary")
    Dim AcroExchAVDoc As Object, objAcroPDDoc As Object, objJSO As Object
    Dim AcroExchApp As Object
    Dim AFORMAUT As Object 'AFORMAUTLib.AFormApp
    Dim FormField As Variant 'AFORMAUTLib.Field
    Dim FormFields As Variant 'AFORMAUTLib.Fields
    Dim bOK As Boolean
    Dim sFields As String
    Dim sTypes As String
    Dim sFieldName As String
   
    On Error GoTo ErrorHandler
    
   Set AcroExchApp = CreateObject("AcroExch.App")
    Set AcroExchAVDoc = CreateObject("AcroExch.AVDoc")
    
    bOK = AcroExchAVDoc.Open(FilePath, "")
    AcroExchAVDoc.BringToFront
    AcroExchApp.Hide
    
    If (bOK) Then
        Set objAcroPDDoc = AcroExchAVDoc.GetPDDoc
        Set objJSO = objAcroPDDoc.GetJSObject
      
        Set AFORMAUT = CreateObject("AFormAut.App")
        Set FormFields = AFORMAUT.Fields
        
        For Each FormField In FormFields
           If FormField.IsTerminal Then ListPDFFormFields.Add FormField.Name, objJSO.GetField(FormField.Name).UserName & "|" & FormField.Type
        Next FormField
        
        AcroExchAVDoc.Close True
    End If
    
    Set AcroExchAVDoc = Nothing
    Set AcroExchApp = Nothing
    Set AFORMAUT = Nothing
    Exit Function
         
ErrorHandler:
MsgBox "FieldList Error: " + Str(Err.Number) + " " + Err.Description + " " + Err.Source
    
End Function

________________________________________________________________________________________

Ou até mesmo algo semelhante á este aqui:
Private Sub Command()
    Dim AcroApp As Acrobat.CAcroApp
    Dim theForm As Acrobat.CAcroPDDoc
    Dim jso As Object
    Dim text1, text2 As String

    Set AcroApp = CreateObject("AcroExch.App")                 '<- Da Erro de Automação, e Não Especificado.
    Set theForm = CreateObject("AcroExch.PDDoc")
    theForm.Open ("C:\temp\Formularios\1999.pdf")
    Set jso = theForm.GetJSObject

	text1 = jso.getField("Text1").Value
    text2 = jso.getField("Text2").Value

    MsgBox "Values read from PDF: " & text1 & " " & text2

    ' set a text field
    Dim field2 As Object
    Set field2 = jso.getField("Text2")

    field2.Value = 13   ' assign the number 13 to the fields value

    ' get the information from the form fields Text1 and Text2
    text1 = jso.getField("Text1").Value
    text2 = jso.getField("Text2").Value

    MsgBox "Values read from PDF: " & text1 & " " & text2

    theForm.Close

    AcroApp.Exit
    Set AcroApp = Nothing
    Set theForm = Nothing

    MsgBox "Done"
End Sub

 

 

ou preciso ainda estanciar algum obj? o arquivo enviado dá erro.

Link para o comentário
Compartilhar em outros sites

@R de Freitas Como eu disse, nao tenho o Adobe pro, sendo assim nao posso testar e dar uma opiniao, pois podem ser varias coisas que estão interferindo no funcionamento do codigo de exemplo.

 

De qualquer forma, veja se este outro exemplo lhe atende e ai adapta a sua planilha e seu formulário.

Formulario_PDF.zip

 

* Quem nao tem o adobe-pro e quiser testar pode imprimir os formularios gerados ou instalar uma impressora virtual, como por exemplo CutePDF Writer 

 

Link para o comentário
Compartilhar em outros sites

@Basole Muito Obrigado, vou testar logo mais, e te retorno.

@CasaDoHardware não é estão simples transcrever o Formulario para o Excel, são 55 Paginas Preenchiveis, muitas informaçoes duplicadas, mas mesmo assim é pagina pra caramba, e este atualiza constantemente, havendo mudança terei de transcrever tudo de novo.

Link para o comentário
Compartilhar em outros sites

  • 3 anos depois...

Olá, boa tarde. O código está preenchendo todos os campos do formulário, porém, preciso manter a formatação dos dados que estão base cadastral - se maiúscula = maiúscula e, se minúscula = minúscula.

Esse é o código (tem vários outros, mas só esses para exeplificar):

 

Application.SendKeys "{CapsLock}", False
Application.SendKeys .Range("E" & Lin).Value
Application.Wait Now + TimeValue("00:00:01")
Application.SendKeys "{Tab}", True

Application.SendKeys "{CapsLock}", False
Application.SendKeys .Range("F" & Lin).Value
Application.Wait Now + TimeValue("00:00:01")
Application.SendKeys "{Tab}", True

 

Se CapsLock estiver ativo funciona certinho, mas se estiver inativo, o que é maiúsculo vira minúsculo e vice-versa. Se setar  - Application.SendKeys "{CapsLock}", True -, tb ocorre o problema ao inverso. 

 

Tem como resolver isso?

 

Link para o comentário
Compartilhar em outros sites

Em 20/07/2022 às 16:07, IVALINO ANDREAO disse:

Se CapsLock estiver ativo funciona certinho...

 

Então seria só você se certificar e garantir que a CapsLock esteja ativa antes de iniciar a sequência de envios de pressionamentos de teclas, correto?

Como sugestão para resolver isso, você poderia tentar usar uma velha API do Windows para ver se está ligada ou desligada.

Bem no topo de seu módulo (área de Declarações), insira a seguinte chamada à API GetKeyState:

 

Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer

 

E no seu código, dê uma vez só o comando pra ligar CapsLock, mas somente se estiver desligada:

 

If Not (GetKeyState(vbKeyCapital)) Then Application.SendKeys "{CAPSLOCK}"

 

Outra opção talvez seja transformar em maiúscula o conteúdo da célula diretamente, quem sabe funcione:

 

Application.SendKeys UCase(.Range("E" & Lin).Value)

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...