Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Caros, boa tarde!
Estou com uma dificuldade no processo para exportar pra PDF. Vale lembrar que para exportar um único projeto ou mesmo vários selecionados em um único PDF já funciona. Minha dificuldade está em gerar um PDF para cada projeto selecionado. Eu montei toda a macro porém não está funcionando. Como o editor não mostra o erro, ou mesmo aponta onde está enroscando, gostaria da ajuda dos amigos.
Sub GR_Chamados
'Chama a sub PrintPDF de acordo com os projetos selecionados
Dim FieldName
FieldName = "PJ_ID"
set mySelections = ActiveDocument.Fields(FieldName).GetPossibleValues
msgbox "Projetos selecionados: " & mySelections.Count
Dim i
For i = 0 to mySelections.Count -1
Dim FieldValue
FieldValue = mySelections.Item(i).text
ActiveDocument.Fields(FieldName).Select FieldValue
MSGBOX "campo: " & FieldValue & " FieldName: " & FieldName
Print_PDF FieldValue, "Status Report", "RP01"
MSGBOX "volta: " & i
Next
ActiveDocument.GetApplication.WaitForIdle
End Sub
'---------------------------------------------------------------------------------------------------------------
Sub PrintPDF(FieldValue, ReportName, ReportID)
msgbox "PrintPDF"
'Caminho a ser gerado o relatório encontra-se na variável
Path = ActiveDocument.Evaluate("C:\Exporta")
'Nome do arquivo a ser criado
set sPDFName = ReportName & " - " & FieldValue
'Criando instância do PDFCreator
Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")
'Variáveis de configuração da biblioteca PDFCreator
With pdfjob
'Verificações da fila da impressora
If .cStart("/NoProcessingAtStartup") = False Then
If .cStart("/NoProcessingAtStartup", True) = False Then
'Caso não tenha nenhum objeto na fila de impressão, termina a macro.
Exit Sub
End if
'Caso tenha objeto na fila de impressão, torne a impressão visível
.cVisible = True
End If
.cOption("UseAutosave") = 1 'Permitir o Autosave
.cOption("UseAutosaveDirectory") = 1 'Permitir que grave no diretório
.cOption("AutosaveDirectory") = Path 'Caminho que será gravado o relatório
.cOption("AutosaveFilename") = sPDFName 'Nome que será gravado o relatório
.cOption("AutosaveFormat") = 0 'Formato PDF
.cClearCache
'Finalizando as configurações da biblioteca PDFCreator
End With
'Imprime o relatório
ActiveDocument.PrintReport "RP01", "PDFCreator"
'Aguarde até que o processo entre na fila de impressão
Do Until pdfjob.cCountOfPrintjobs = 1
ActiveDocument.GetApplication.Sleep 20
Loop
pdfjob.cPrinterStop = False
'Aguarda até que a fila de impressão esteja vazia
Do Until pdfjob.cCountOfPrintjobs = 0
ActiveDocument.GetApplication.Sleep 20
Loop
'Termina o processo
pdfjob.cClose
'Zerando a variável
Set pdfjob = Nothing
End Sub
Até fazer a chamada para a SUB PrintPDF td vai normal. Nesse momento simplesmente pára e retorna para o editor de macros. Aquela msgbox não é mostrada. Se coloco dois argumentos na chamada da sub ela passa a ser chamada. Depois dá erro mas é decorrente de não ter passado o terceiro parâmetro.
Ex:
PrintPDF "Status Report", "RP01"
Sub PrintPDF(ReportName, ReportID)
msgbox "PrintPDF"
Não entendo o fato de parar de funcionar só por eu colocar mais um argumento.
É possível indicar uma pasta do desktop do usuário para gravar os arquivos? Tipo %windir%\%user% ...
Alguma dica?
Vlw
Marcelo,
para rodar tem que usar o scheduler do windows e o QlikView Desktop.....
O cuidado sempre esta nas permissões da macro, especialmente quando abre com outro usuário diferente do que esta rodando......
Sobre loop dos campos eu uso...
Set TabelaEmails = ActiveDocument.Fields("Gerente").GetPossibleValues(1000) |
For contEmail = 0 to TabelaEmails.Count - 1 |
ActiveDocument.Fields("Gerente").Select TabelaEmails.Item(contEmail).Text |
Tem um select que não vi no seu código, mas vale ressaltar que me viro em vbs, e portanto posso estar falando bobagem.....
Marcelo, você vai ter que debuggar o seu código utilizando vários msgbox, em pontos diferentes do código, para identificar em qual momento esta ocorrendo o erro.
Eu tenho um exemplo pronto desse loop, mas consigo te enviar só a noite
Blz ... eu consegui acertar alguns pontos e agora a macro está funcionando parcialmente. Ela imprime o primeiro registro porém não imprime o segundo selecionado. Também estou tentando descobrir como fazer para que o(s) arquivo(s) pdf(s) gerado(s) no browser seja(m) gravado(s) na pasta downloads do desktop do usuário.
Outro ponto que estou com dificuldades é o fato da macro não rodar no server. Já vi outro post onde vc passa uma série de instruções. Executei todas elas e ainda nada acontece. A opção de executar macro não segura estava desabilitada no server. Habilitei e apliquei. Até o momento nada acontece quando eu pressiono os botões. Sabe se leva algum tempo até que a alteração se propague?
Segue meu código como está no momento:
Sub GR_Chamados
Dim FieldName, FieldDt
Dim FieldValue, FieldValueDt
Dim dia, mes, ano
Dim i
FieldName = "PJ_ID"
FieldDt = "HT_DATA"
set mySelections = ActiveDocument.Fields(FieldName).GetPossibleValues
set mySelectionsDt = ActiveDocument.Fields(FieldDt).GetPossibleValues
'Loop para pegar todos os registros selecionados
For i = 0 to mySelections.Count -1
FieldValue = mySelections.Item(i).text
FieldValueDt = mySelectionsDt.Item(i).text
'Separa a data
dia = day(FieldValueDt)
mes = month(FieldValueDt)
ano = year(FieldValueDt)
'Monta o nome do arquivo
FieldValueDt = ano & mes & dia
FieldValue = FieldValue & " - " & FieldValueDt
'sub PrintPDF
PrintPDF FieldValue, "RP01"
Next
ActiveDocument.GetApplication.WaitForIdle
End Sub
'---------------------------------------------------------------------------------------------------------------
Sub PrintPDF(ReportName, ReportID)
'Caminho a ser gerado o relatório encontra-se na variável
Path = ActiveDocument.Evaluate("vPathArquivos")
'Criando instância do PDFCreator
Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")
'Variáveis de configuração da biblioteca PDFCreator
With pdfjob
'Verificações da fila da impressora
If .cStart("/NoProcessingAtStartup") = False Then
If .cStart("/NoProcessingAtStartup", True) = False Then
'Caso não tenha nenhum objeto na fila de impressão, termina a macro.
Exit Sub
End if
'Caso tenha objeto na fila de impressão, torne a impressão visível
.cVisible = True
End If
.cOption("UseAutosave") = 1 'Permitir o Autosave
.cOption("UseAutosaveDirectory") = 1 'Permitir que grave no diretório
' .cOption("AutosaveDirectory") = "C:\Exporta" 'Caminho que será gravado o relatório
.cOption("AutosaveFilename") = ReportName 'Nome que será gravado o relatório
.cOption("AutosaveFormat") = 0 'Formato PDF
.cClearCache
'Finalizando as configurações da biblioteca PDFCreator
End With
'Imprime o relatório
ActiveDocument.PrintReport "RP01", "PDFCreator"
'Aguarde até que o processo entre na fila de impressão
Do Until pdfjob.cCountOfPrintjobs = 1
ActiveDocument.GetApplication.Sleep 20
Loop
pdfjob.cPrinterStop = False
'Aguarda até que a fila de impressão esteja vazia
Do Until pdfjob.cCountOfPrintjobs = 0
ActiveDocument.GetApplication.Sleep 20
Loop
'Termina o processo
pdfjob.cClose
'Zerando a variável
Set pdfjob = Nothing
End Sub
'Teste de macro
Sub Macro
msgbox "Macro Ok!!"
End sub
Grato,
Marcelo
Marcelo,
para rodar tem que usar o scheduler do windows e o QlikView Desktop.....
O cuidado sempre esta nas permissões da macro, especialmente quando abre com outro usuário diferente do que esta rodando......
Sobre loop dos campos eu uso...
Set TabelaEmails = ActiveDocument.Fields("Gerente").GetPossibleValues(1000) |
For contEmail = 0 to TabelaEmails.Count - 1 |
ActiveDocument.Fields("Gerente").Select TabelaEmails.Item(contEmail).Text |
Tem um select que não vi no seu código, mas vale ressaltar que me viro em vbs, e portanto posso estar falando bobagem.....
Olá Alessandro!!
Realmente é necessário utilizar o select para posicionar o ponteiro no registro a ser impresso. Havia outro problema na minha macro uma vez que eu alternava entre os registros do campo HT_Data. Esse campo só possui uma seleção e deixei o parâmetro fixo. A exportação está funcionando corretamente e criando um PDF para cada registro selecionado.
Com relação ao uso da macro ela não funciona nem no meu desktop com o webview ativado. Só estou utilizando o meu usuário mesmo no servidor. Alguma nova ideia? Não acredito que as macros não sejam habilitadas no ambiente server. Do contrário porque haveriam as opções de segurança no servidor para habilitar/desabilitar macros? Me perdoe se eu estiver falando bobagens.
Abraços!!
Marcelo,
Ao abrir o modelo, tem que ter um disparador para rodar a macro. Assim, se você schedular no Windows, toda vez vai rodar....
Eu instalei o plugin da versão 12 e as macros estão funcionando corretamente agora no IE.
criei uma macro e realizei as configuras recomendadas, não funcionou, consegue me ajudar?
Qual problema vc está enfrentando Fernando? Instalou o plugin da versão 12?
Habilitou as questões de segurança do browser?