Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations biv343 on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

HOW and WHERE TO INSERT CLICK CLICK/YES CODE

Status
Not open for further replies.

netrusher

Technical User
Feb 13, 2005
952
US
I am not sure how to present this problem but here goes:

Below I have inserted three sections of code.

The first one is my accSendObject Module.

The seconde one is the Click/Yes Code.

The third one is code used when a checkbox is clicked that invokes a email.

I currently have a form in Access that when a Checkbox is clicked it sends an email. Below is the code that I am using. It is a module called accSendObject. My dilemma is because we are using Access2003 when Outlook is called it requires us to click yes about three times delaying the email while we are waiting. There is a click/yes program that alleviates that problem but my MIS department does not want us to use that program they want this functionality included in the code itself. I have also put a sample of the click/yes code below. My question is how to insert the click/yes code or where to insert the code to make it work?

Below the click/yes code is code that works off of a checkbox that is checked to invoke the email. I probably have confused everyone but please help if you can.

accSendObject Module Code

Code:
Option Compare Database
Option Explicit

Private MAPISession As MAPI.Session
Private MAPIMessage As message
Private MAPIRecipient As MAPI.Recipient
Private MAPIAttachment As MAPI.Attachment
Private reciparray
Private strFileName As String


Private Type OSVERSIONINFO
    dwOSVersionInfoSize As Long
    dwMajorVersion As Long
    dwMinorVersion As Long
    dwBuildNumber As Long
    dwPlatformId As Long
    szCSDVersion As String * 128
End Type

Private Const REG_SZ As Long = 1
Private Const REG_DWORD As Long = 4
Private Const HKEY_CURRENT_USER = &H80000001
Private Const ERROR_NONE = 0
Private Const ERROR_BADDB = 1
Private Const ERROR_BADKEY = 2
Private Const ERROR_CANTOPEN = 3
Private Const ERROR_CANTREAD = 4
Private Const ERROR_CANTWRITE = 5
Private Const ERROR_OUTOFMEMORY = 6
Private Const ERROR_INVALID_PARAMETER = 7
Private Const ERROR_ACCESS_DENIED = 8
Private Const ERROR_INVALID_PARAMETERS = 87
Private Const ERROR_NO_MORE_ITEMS = 259
Private Const KEY_ALL_ACCESS = &H3F
Private Const REG_OPTION_NON_VOLATILE = 0

Private Declare Function GetVersionEx Lib "kernel32" _
   Alias "GetVersionExA" _
         (ByRef lpVersionInformation As OSVERSIONINFO) As Long


Private Declare Function RegCloseKey Lib "ADVAPI32.dll" _
         (ByVal hKey As Long) As Long

Private Declare Function RegOpenKeyEx Lib "ADVAPI32.dll" _
   Alias "RegOpenKeyExA" _
         (ByVal hKey As Long, _
         ByVal lpSubKey As String, _
         ByVal ulOptions As Long, _
         ByVal samDesired As Long, _
         phkResult As Long) As Long

Private Declare Function RegQueryValueExString Lib "ADVAPI32.dll" _
   Alias "RegQueryValueExA" _
         (ByVal hKey As Long, _
         ByVal lpValueName As String, _
         ByVal lpReserved As Long, _
         lpType As Long, _
         ByVal lpData As String, _
         lpcbData As Long) As Long

Private Declare Function RegQueryValueExLong Lib "ADVAPI32.dll" _
   Alias "RegQueryValueExA" _
         (ByVal hKey As Long, _
         ByVal lpValueName As String, _
         ByVal lpReserved As Long, _
         lpType As Long, lpData As Long, _
         lpcbData As Long) As Long

Private Declare Function RegQueryValueExNULL Lib "ADVAPI32.dll" _
   Alias "RegQueryValueExA" _
         (ByVal hKey As Long, _
         ByVal lpValueName As String, _
         ByVal lpReserved As Long, _
         lpType As Long, _
         ByVal lpData As Long, _
         lpcbData As Long) As Long

Private Declare Function GetTempPath Lib "kernel32" _
         Alias "GetTempPathA" (ByVal nBufferLength As Long, _
         ByVal lpBuffer As String) As Long

Public Enum accSendObjectOutputFormat
    accOutputrtf = 1
    accOutputTXT = 2
    accOutputSNP = 3
    accOutputXLS = 4
End Enum

Public Sub SendObject(Optional ObjectType As Access.AcSendObjectType = acSendNoObject, _
                      Optional ObjectName, _
                      Optional OutputFormat As accSendObjectOutputFormat, _
                      Optional EmailAddress, _
                      Optional CC, _
                      Optional BCC, _
                      Optional Subject, _
                      Optional MessageText, _
                      Optional EditMessage)


    Dim strTmpPath As String * 512
    Dim sTmpPath As String
    Dim strExtension As String
    Dim nRet As Long

    StartMessagingAndLogon
    Set MAPIMessage = MAPISession.Outbox.Messages.add
    If ObjectType <> -1 Then
        If IsMissing(ObjectName) Or IsMissing(OutputFormat) Then
            MsgBox "The object type, name, or output format is not valid. Cannot send message.", vbCritical
            MAPISession.Outbox.Messages.delete
            GoTo accSendObject_Exit
        Else
            strExtension = GetExtension(OutputFormat)
            nRet = GetTempPath(512, strTmpPath)
            If (nRet > 0 And nRet < 512) Then
                If InStr(strTmpPath, Chr(0)) > 0 Then

                    sTmpPath = RTrim(Left(strTmpPath, InStr(1, strTmpPath, Chr(0)) - 1))
                End If
                strFileName = sTmpPath & ObjectName & strExtension
            End If
            On Error Resume Next
            DoCmd.OutputTo ObjectType, ObjectName, GetOutputFormat(OutputFormat), strFileName, False

            If Err.Number = 0 Then
                Set MAPIAttachment = MAPIMessage.Attachments.add
                With MAPIAttachment
                    .Name = ObjectName
                    .Type = CdoFileData
                    .source = strFileName
                End With
                Kill strFileName

            Else
                MsgBox "The object type, name, or output format is not valid. Cannot send message.", vbCritical
                MAPISession.Outbox.Messages.delete
                GoTo accSendObject_Exit
            End If
        End If
    End If

    If Not IsMissing(EmailAddress) Then
        reciparray = Split(EmailAddress, ";", -1, vbTextCompare)
        ParseAddress CdoTo
        Erase reciparray
    End If
    If Not IsMissing(CC) Then
        reciparray = Split(CC, ";", -1, vbTextCompare)
        ParseAddress CdoCc
        Erase reciparray
    End If

    If Not IsMissing(BCC) Then
        reciparray = Split(BCC, ";")
        ParseAddress CdoBcc
        Erase reciparray
    End If

    If Not IsMissing(Subject) Then
        MAPIMessage.Subject = Subject
    End If

    If Not IsMissing(MessageText) Then
        MAPIMessage.Text = MessageText
    End If

    If IsMissing(EditMessage) Then EditMessage = True

    MAPIMessage.Update
    MAPIMessage.Send savecopy:=True, ShowDialog:=EditMessage

accSendObject_Exit:
    'Log off the MAPI session.
    MAPISession.Logoff
    Set MAPIAttachment = Nothing
    Set MAPIRecipient = Nothing
    Set MAPIMessage = Nothing
    Set MAPISession = Nothing
    Exit Sub

End Sub

Private Sub ParseAddress(RecipientType As MAPI.CdoRecipientType)
    Dim I As Variant
    For Each I In reciparray
        Set MAPIRecipient = MAPIMessage.Recipients.add
        With MAPIRecipient
            .Name = I
            .Type = RecipientType
            .Resolve
        End With
        Set MAPIRecipient = Nothing
    Next
End Sub

Private Function GetExtension(ObjectType As Long) As String
    Select Case ObjectType
        Case 1 'RTF
            GetExtension = ".RTF"
        Case 2 'TXT
            GetExtension = ".TXT"
        Case 3 'SNP
            GetExtension = ".SNP"
        Case 4 'XLS
            GetExtension = ".XLS"
    End Select
End Function

Private Function GetOutputFormat(ObjectType As Long)
    Select Case ObjectType
        Case 1 'RTF
            GetOutputFormat = Access.acFormatRTF
        Case 2 'TXT
            GetOutputFormat = Access.acFormatTXT
        Case 3 'SNP
            GetOutputFormat = Access.acFormatSNP
        Case 4 'XLS
            GetOutputFormat = Access.acFormatXLS
    End Select
End Function

Private Sub StartMessagingAndLogon()
    Dim sKeyName As String
    Dim sValueName As String
    Dim sDefaultUserProfile As String
    Dim osinfo As OSVERSIONINFO
    Dim retvalue As Integer

    On Error GoTo ErrorHandler
    Set MAPISession = CreateObject("MAPI.Session")

    'Try to log on.  If this fails, the most likely reason is
    'that you do not have an open session.  The error
    '-2147221231  MAPI_E_LOGON_FAILED returns.  Trap
    'the error in the ErrorHandler.
    MAPISession.Logon ShowDialog:=False, NewSession:=False
    Exit Sub

ErrorHandler:
    Select Case Err.Number
       Case -2147221231  'MAPI_E_LOGON_FAILED
          'Need to determine what operating system is in use. The keys are different
          'for WinNT and Win95.
          osinfo.dwOSVersionInfoSize = 148
          osinfo.szCSDVersion = Space$(128)
          retvalue = GetVersionEx(osinfo)
          Select Case osinfo.dwPlatformId
             Case 0   'Unidentified
                MsgBox "Unidentified Operating System.  " & _
                   "Cannot log on to messaging."
                Exit Sub
             Case 1   'Win95
                sKeyName = "Software\Microsoft\" & _
                           "Windows Messaging " & _
                           "Subsystem\Profiles"

             Case 2   'NT
                 sKeyName = "Software\Microsoft\Windows NT\" & _
                            "CurrentVersion\" & _
                            "Windows Messaging Subsystem\Profiles"
          End Select

          sValueName = "DefaultProfile"
          sDefaultUserProfile = QueryValue(sKeyName, sValueName)
          MAPISession.Logon ProfileName:=sDefaultUserProfile, _
                           ShowDialog:=False
          Exit Sub
       Case Else
          MsgBox "An error has occured while trying" & Chr(10) & _
          "to create and to log on to a new ActiveMessage session." & _
          Chr(10) & "Report the following error to your " & _
          "System Administrator." & Chr(10) & Chr(10) & _
          "Error Location: frmMain.StartMessagingAndLogon" & _
          Chr(10) & "Error Number: " & Err.Number & Chr(10) & _
          "Description: " & Err.Description
    End Select
End Sub

Private Function QueryValue _
    (sKeyName As String, _
    sValueName As String)

    Dim lRetVal As Long     'Result of the API functions.
    Dim hKey As Long        'Handle of the opened key.
    Dim vValue As Variant   'Setting of the queried value.

    lRetVal = RegOpenKeyEx(HKEY_CURRENT_USER, _
                sKeyName, _
                0, _
                KEY_ALL_ACCESS, _
                hKey)

    lRetVal = QueryValueEx(hKey, _
                sValueName, _
                vValue)
    QueryValue = vValue
    RegCloseKey (hKey)

End Function

Private Function QueryValueEx _
       (ByVal lhKey As Long, _
       ByVal szValueName As String, _
       vValue As Variant) As Long

    Dim cch As Long
    Dim lrc As Long
    Dim lType As Long
    Dim lValue As Long
    Dim sValue As String

    On Error GoTo QueryValueExError

    ' Determine the size and the type of the data to be read.
    lrc = RegQueryValueExNULL(lhKey, szValueName, 0&, lType, 0&, cch)
    If lrc <> ERROR_NONE Then Error 5

    Select Case lType
       ' For strings
       Case REG_SZ:
          sValue = String(cch, 0)
          lrc = RegQueryValueExString(lhKey, szValueName, 0&, lType, _
             sValue, cch)
          If lrc = ERROR_NONE Then
             vValue = Left$(sValue, cch)
          Else
             vValue = Empty
          End If
       ' For DWORDS
       Case REG_DWORD:
          lrc = RegQueryValueExLong(lhKey, szValueName, 0&, lType, _
             lValue, cch)
          If lrc = ERROR_NONE Then vValue = lValue
       Case Else
          'All other data types that are not supported.
          lrc = -1
    End Select

QueryValueExExit:
    QueryValueEx = lrc
    Exit Function
QueryValueExError:
    Resume QueryValueExExit
    End Function

Click/Yes Code

Code:
' Declare Windows' API functions
Private Declare Function RegisterWindowMessage _
        Lib "user32" Alias "RegisterWindowMessageA" _
        (ByVal lpString As String) As Long

Private Declare Function FindWindow Lib "user32" _
        Alias "FindWindowA" (ByVal lpClassName As Any, _
        ByVal lpWindowName As Any) As Long

Private Declare Function SendMessage Lib "user32" _
        Alias "SendMessageA" (ByVal hwnd As Long, _
        ByVal wMsg As Long, ByVal wParam As Long, _
        lParam As Any) As Long

Private Sub SomeProc()
Dim wnd As Long
Dim uClickYes As Long
Dim Res As Long

' Register a message to send
uClickYes = RegisterWindowMessage("CLICKYES_SUSPEND_RESUME")

' Find ClickYes Window by classname
wnd = FindWindow("EXCLICKYES_WND", 0&)

' Send the message to Resume ClickYes
Res = SendMessage(wnd, uClickYes, 1, 0)

' ...
' Do some Actions
' ...

' Send the message to Suspend ClickYes
Res = SendMessage(wnd, uClickYes, 0, 0)

End Sub

Code invoked when checkbox is clicked

Code:
Private Sub BMS_OMS_Click()

DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
If Me.BMS_OMS.Value = True Then
SendMail4
End If

End Sub
Sub SendMail4()

       DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70

       Dim clsSendObject As accSendObject
       Dim strMsg As String
       Dim emailsubject As String
       Dim emailtext As String
       Dim SL As String, DL As String
      
       SL = vbNewLine
       DL = SL & SL
       
       emailtext = "The Below named BMS-OMS needs updated for viewing or a New OMS was Created." & DL & _
       "Process:=" & Me.Process & DL & _
       "OMS Name:=" & Me.OMS_Name & DL & _
       "If BMS-OMS does it require Immediate update:= " & Me.Combo448 & DL & _
       "Thank you," & SL & _
       Me.OMS_Worker
       
       emailsubject = "Form #: " & Me.Form__.Value & "; BMS-OMS NEEDS UPDATED FOR VIEWING or NEW OMS WAS CREATED; " & _
       "OMS Name:= " & Me.OMS_Name & "; Immediate Update Required:= " & Me.Combo448
       Set clsSendObject = New accSendObject
       strMsg = String(3000, "a")
       clsSendObject.SendObject , , accOutputrtf, _
       "abajacks@nmhg.com", "abmhende@nmhg.com", "", emailsubject, emailtext, True
       Set clsSendObject = Nothing
   
End Sub

 
Thank you but I already have the code listed above and am seeking help in and how to insert it. Anyone else out there with help with the code above. I do not need Outlook Redemption.
 
I already have the code listed above and am seeking help in and how to insert it
Do a google search for "cargo cult programming" ;-)

Furthermore, do a google search for outlook object model guard

Hope This Helps, PH.
Want to get great answers to your Tek-Tips questions? Have a look at FAQ219-2884 or FAQ181-2886
 
Thank you I enjoyed reading about "cargo cult programming". I have read about outlook object model guard till it is coming out of ears. All I want to do is click yes automatically when the outlook security Pop-up appears. I am not trying to circumvent security. Just click yes. I have listed the code above and am just hoping someone will be able to help me apply it correctly.
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top