Propósito

✔ Programação GLOBAL® - Quaisquer soluções e/ou desenvolvimento de aplicações pessoais, ou da empresa, que não constem neste Blog devem ser tratados como consultoria freelance. Queiram contatar-nos: brazilsalesforceeffectiveness@gmail.com | ESTE BLOG NÃO SE RESPONSABILIZA POR QUAISQUER DANOS PROVENIENTES DO USO DOS CÓDIGOS AQUI POSTADOS EM APLICAÇÕES PESSOAIS OU DE TERCEIROS.

.: Vitrine

Carregando artigos...

Views

Mostrando postagens com marcador CreateObject. Mostrar todas as postagens
Mostrando postagens com marcador CreateObject. Mostrar todas as postagens

PIECE OF CAKE - Criando Arquivo Texto Externo



#A&A #PIECEOFCAKE #POC #VBA


Criar arquivos texto externos a aplicação que trabalhamos é um recurso muito usado, especialmente quando queremos registrar algum log de acesso.

O código abaixo é muito funcional, quando passamos os dados que serão o conteúdo do arquivo.

Function CreateAfile(PathFileNameExt As String, nFrase As String)
    ' © 2007-20 Alefe & Bete Processamento de Dados LTDA - ME, except where noted, all rights reserved.
    '      Author: André Bernardes
    '     Contact: andreluizbernardess@gmail.com | https://goo.gl/EUMbSe/
    ' Description: Cria uma nova aba

    Dim fs, a
    
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set a = fs.CreateTextFile(PathFileNameExt, True)

    a.WriteLine (nFrase)

    a.Close

End Function

Consulte-nos

⬛◼◾▪ Social Media ▪◾◼⬛
• FACEBOOK • TWITTER • INSTAGRAM • TUMBLR • GOOGLE+ • LINKEDIN • PINTEREST

⬛◼◾▪ Blogs ▪◾◼⬛ 


⬛◼◾▪ CONTATO ▪

VBA Excel - Enviando emails via CDO - Send Email Using CDO

O que é CDO?

É uma biblioteca de objetos que expõe as interfaces do Messaging Application Programming Interface (MAPI). 

O CDO permite que manipulemos os dados do Exchange para enviar e receber mensagens.

O uso do CDO pode ser preferível em casos onde gostaríamos de evitar a segurança pop-up que aparecem, tais como: "um programa está tentando enviar automaticamente um e-mail em seu nome", atrasando o nosso envio de e-mail até que o usuário forneça um resposta.

Neste exemplo usaremos a função CreateObject ("CDO.Message").

Um ponto importante a observar aqui é definir a configuração SMTP corretamente, de modo a evitar o temido "Erro em tempo de execução -2147220973 (80040213) " ou o " valor de configuração SendUsing erros é inválido "de aparecer.

Sub EnvieMail_CDO()
Dim CDO_Mail_Object As Object
Dim CDO_Config As Object
Dim SMTP_Config As Variant
Dim Email_Subject, Email_Send_From, Email_Send_To, Email_Cc, Email_Bcc, Email_Body As String

Let Email_Subject = "Enviando email via CDO"
Let Email_Send_From = "< Seu endereço de email >"
Let Email_Send_To = "< Endereço de email para envio >"
Let Email_Cc = "< Endereço de email de cópia >"
Let Email_Bcc = "< Endereço de email de cópia oculta >"
Let Email_Body = "Parabéns!!!! Seu envio através de CDO funcionou !!!!"

Set CDO_Mail_Object = CreateObject("CDO.Message")
On Error GoTo debugs

Set CDO_Config = CreateObject("CDO.Configuration")
CDO_Config.Load -1

Set SMTP_Config = CDO_Config.Fields

With SMTP_Config
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

' Coloque o nome do seu SERVIDOR abaixo:
Let .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "YOURSERVERNAME"

Let .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25

.Update
End With

With CDO_Mail_Object
Set .Configuration = CDO_Config
End With

Let CDO_Mail_Object.Subject = Email_Subject
Let CDO_Mail_Object.From = Email_Send_From
Let CDO_Mail_Object.To = Email_Send_To
Let CDO_Mail_Object.TextBody = Email_Body
Let CDO_Mail_Object.cc = Email_Cc 'Use se achar necessário
Let CDO_Mail_Object.BCC = "bernardess@gmail.com" 'Use se achar necessário
'CDO_Mail_Object.AddAttachment FileToAttach 'Use se achar necessário
CDO_Mail_Object.send

debugs:
If Err.Description <> "" Then MsgBox Err.Description
End Sub



Deixe os seus comentários! Envie este artigo, divulgue este link na sua rede social...




Tags: VBA, Excel, e-mail, email, mail, send, CDO, SMTP, CreateObject, MAPI, 



VBA Advanced Excel - Usando o Late Bound - Using the CreateObject Function to Create a Late-Bound Instance of Excel


Segue um pequeno exemplo de utilização do Late Bound com o MS Excel

Sim, precisamos continuar treinando para não esquecermos. Lembre-se que a mesma técnica pode ser usada com qualquer outra aplicação da suite do MS Office.

Sub LateBinding()
    'Declare a generic object variable
    Dim objExcel As Object

    'Point the object variable at an Excel application object
    Set objExcel = CreateObject("Excel.Application")

    'Set properties and execute methods of the object
    With objExcel
        Let .Visible = True
        
Let .Workbooks.Add
        Let .Range("A1""Hello World"
    End With
End Sub

Tags: VBA, Excel Basic, tips, Example, Early, Binding,Late-Bound, Instance, CreateObject



VBA Advanced - Compreendendo o Early Binding e o Late Binding - Early Binding & Late Binding



Blog Office VBA | Blog Excel | Blog Access |

Sim, o desenvolvimento da linguagem VBA nos permite abordagens distintas. E é bom que isso ocorra, pois nos possibilita variância, adequação, e certa liberdade na escolha do caminho que percorreremos em busca de uma solução plausível para o nosso cliente.

Falaremos sobre 2 métodos de programação que dizem respeito ao uso de objetos no VBA, os quais são definidos na fase de declaração das variáveis:


Early Binding (Ligação Atual)  
No método Early Binding as variáveis são declaradas com o tipo de dados assumirão antes de serem invocadas.

Late Binding (Ligação Tardia)
No método Late Binding as variáveis são declaradas como objeto e assumem seu tipo na primeira vez que uma atribuição é feita ao mesmo.


Suponhamos que fôssemos automatizar uma aplicação MS Outlook a partir do MS Excel:
Primeiramente precisamos ter acesso ao Modelo de Objetos (object model) do Outlook.

Segundo, para manipularmos um objeto do Outlook, precisamos vê-lo e isso só é possível através de 2 métodos, isso mesmo, conhecendo os métodos Early Binding e Late Binding.

Para "encapsularmos" o Outlook (Client) na nossa aplicação Excel (Host). O OB (Object model) armazenado no arquivo OLB (Object Library) precisa estar vinculado ao Excel.

CheckBinding
Podemos fazer isso através do menu Ferramentas no VBE, especificamente em Referências. A caixa de diálogo Referências será mostrada com uma lista de arquivos com os quais podemos nos ligar. É provável que a lista seja bastante longa e cheia de opções que você nunca vai usar.

Inline image 2

A ligação (bindingOLB é chamada ligação inicial (early binding). É early (cedo) porque expomos o modelo de objeto durante o momento do design e não no tempo de execução. 

No exemplo acima pode observar a versão do Microsoft Outlook 9.0 Object Library. A parte 9.0 do nome será diferente se você estiver usando uma versão diferente do Outlook. Incidentalmente, o nome do arquivo OLB que aloja esta biblioteca é msoutl9.olb. Você pode ver o caminho onde ele é armazenado na parte inferior da caixa de diálogo.

Apenas selecionar uma referência nesta caixa diálogo não fará absolutamente nada. Algumas vezes simplesmente seleciono a referência e fecho a caixa de diálogo apenas para encontrar o erro de compilação: Tipo definido pelo usuário não definido (User Defined Type not Defined). Quando você receber esse erro, a primeira coisa que deve verificar é que tenha definido a referência corretamente.

Uma vez que tenha passado por este processo, pode criar um procedimento como este:

Sub CheckBinding()

    Dim olApp As Outlook.Application

    Set olApp = New Outlook.Application

    MsgBox olApp.Name

End Sub

A ligação (binding) tardia (Late) tem o mesmo efeito que o Early Binding. A diferença é que você efetua a ligação da biblioteca em tempo de execução (run-time). Não precisa usar as Referências previamente, mas sim as funções GetObject ou CreateObject. O código abaixo faz a mesma coisa que o CheckBinding acima, mas usa o Late Binding.

Sub CheckBindingLB()

    Dim olApp As Object

    Set olApp = CreateObject("Outlook.Application")

    MsgBox olApp.Name

End Sub

Na maioria dos exemplos que usamos aqui o CreateObject será muito útil. É usado quando precisamos criar uma nova instância do Outlook e usamos o GetObject se quisermos fazer referência a uma instância já em execução do Outlook.

Para enviarmos um e-mail, criarmos uma tarefa, ou diversas outras atividades, não importa se usamos uma instância nova ou existente. Usaríamos o GetObject se desejássemos mostrar algo no Outlook, por exemplo, um calendário. Nesse caso, não iríamos querer dois Outlooks executando só para exibir um calendário.

O código a seguir usa Late Binding para exibir a pasta do calendário na instância existente do Outlook, criando uma instância, se não houver uma.

Sub DisplayCalendar()

    Dim olApp As Object
    Dim olNs As Object

    On Error Resume Next
    Set olApp = GetObject(, "Outlook.Application")

    If Err.Number = 429 Then
        Set olApp = CreateObject("Outlook.application")
    End If

    On Error GoTo 0

    Set olNs = olApp.GetNamespace("MAPI")

    If olApp.ActiveExplorer Is Nothing Then
        olApp.Explorers.Add _
            (olNs.GetDefaultFolder(9), 0).Activate
    Else
        Set olApp.ActiveExplorer.CurrentFolder = _
            olNs.GetDefaultFolder(9)
        olApp.ActiveExplorer.Display
    End If

    Set olNs = Nothing
    Set olApp = Nothing

End Sub

Detalhando

Talvez para os que estão iniciando no VBA exista muita coisa acontecendo no código acima. E saiam já daqui! Não viram que o tópico é Advanced? Brincadeiras à parte, vamos olhar para as seções pertinentes uma de cada vez:

 Dim olApp As Object
 Dim olNs As Object

Na seção de declarações de variáveis usamos o tipo de dados Object. Com a Early Binding usamos Outlook.Application para dimensionar (Dim) a variável "olApp". Mas, sem um conjunto de referência, o VBA não saberá o que significa Outlook.Application porque ainda não expusemos o modelo de objeto. Portanto, quaisquer objetos que utilizarmos a partir do modelo de objeto do Outlook, devem ser declarados com o tipo genérico Object.

On Error Resume Next

Set olApp = GetObject(, "Outlook.Application")

If Err.Number = 429 Then
   Set olApp = CreateObject("Outlook.application")
End If

On Error GoTo 0

A função GetObject gerará um erro se não houver uma instância do Outlook, por isso usamos On Error Resume Next para ignorá-lo. Em seguida, testamos um erro específica, o qual se tiver ocorrido usaremos CreateObject. Redefiniremos o tratamento de erros com On Error GoTo 0, de modo a não disfarçarmos quaisquer erros no final do procedimento.

Porquê 2 métodos?

Ambos os métodos têm vantagens e desvantagens. A Late Binding é mais lenta do que a Early Binding porque ocorre durante o tempo de execução. Quando fazemos o trabalho durante o design, o código será executado mais rapidamente. Quando você está escrevendo o código usando a Late Binding, perde algumas conveniências. Mais especificamente, não ver o Intellisense mostrando as propriedades e métodos de objetos quando os digita. Além disso, o navegador de objetos (F2) não apresenta nenhum dos objetos do Outlook. E por fim, não terá a vantagem de usar constantes internas na Late Binding. Veja o código abaixo:

olNs.GetDefaultFolder (9)

O código ficaria assim numa ligação prévia:

olNs.GetDefaultFolder (olFolderCalendar)

olFolderCalendar é definido numa constante dentro do modelo de objeto do Outlook que não será exposto, se você não tiver definido uma referência. Embutidos constantes podem tornar o código muito mais legível e mais fácil de depurar.

Tudo parece fazer muito sentido e ser muito bom para a Early Binding, mas a Late Binding tem uma vantagem muito grande que não pode ser negligenciada. Ao se efetuar a Late Binding, não importa qual seja a versão do Outlook instalada, o VBA vai usar o nome da classe fornecido com GetObject ou o CreateObect ("Outlook.Application" no nosso caso) e encontrará o modelo de objeto correto para referência.

Ao discutir a Early Binding acima, vai notar que definir uma referência ao Microsoft Outlook 9.0 Object Library porque eu estou usando o Outlook 2000. Se fosse enviar um procedimento para alguém que estava usando uma versão anterior do Outlook, o código seria um fracasso, porque não teriam essa biblioteca objeto específica instalada. 

Para tirar o máximo proveito do ambiente de desenvolvimento VBA e ainda escrever um código robusto, devemos escrever o código com Early Binding, mas mudá-lo no final, antes de distribuí-lo. Mesmo que escreva apenas para uso pessoal, não faz sentido não convertê-lo no final. Algum dia terá um computador diferente ou enviará este código para o seu irmão e não vai funcionar porque eles vão ter uma versão anterior.


Referências:
Dick´s Clickshttp://www.dicks-clicks.com




Tags: VBA, Advanced, Early Binding, Late Binding, OLB, Object Library, MS Outlook,  Object Model, Object Library, msoutl9.olb, Microsoft Outlook 9.0 Object Library, GetObject, CreateObject, CheckBinding, 



VBA Powerpoint - Imprimindo Slides de uma apresentação - Use CreateObject to Print Slides From A Presentation

powerpoint-header.jpg

Sempre temos a oportunidade de utilizarmos uma chamada Shell para a impressão de uma apresentação do MS Powerpoint usando o parâmetro / P. Mas talves você  queira imprimir Slides específicos, que não podem ser alcançados com a chamada Shell. 

Este exemplo usa a chamar CreateObject para criar uma instância do MS Powerpoint, abrir um arquivo e, em seguida, imprimi-lo. Pode usar este código  a partir de qualquer aplicativo da suíte MS Office ou mesmo no VB para imprimir uma apresentação.

Sub PressPPT()
    Dim AppPPT As Object
    Set AppPPT = CreateObject("PowerPoint.Application")
    
Let AppPPT.Visible = True
    ' Se você desejar esconder a janela do PowerPoint, configure como visible=true, 
    ' além do parâmetro do comando OPEN.
    With AppPPT.Presentations.Open("c:\sample.ppt")
        DoEvents
   
 ' Use a propriedade .PrintOptions para especificar uma configuração adicional 
    ' Set background printing off else, PowerPoint will terminate
    ' before printing is completed.

        Let .PrintOptions.PrintInBackground = False
        
Let .PrintOut  
        Let .PrintOptions.PrintInBackground = True
    End With
    AppPPT.Quit
    Set AppPPT = Nothing
End Su
b

ReferênciaShyam Pillai


Tags: Powerpoint, Slide, UDF, Shell, CreateObject, print, imprimir

André Luiz Bernardes
A&A® - Work smart, not hard.





diHITT - Notícias