Modules & VBA :: Parse Email Messages - Feed Data To MDB
Jul 28, 2014
I've built an HTML web form that sends an email to me upon submission with all the field inputs. I have previously found success using VBA in Outlook to parse out these emails and feed the substrings into an Excel Sheet (hooray!), but now am looking to feed the substrings into Access, specifically into a table in an existing .mdb file. I figure the way Outlook will "talk to" Access will likely be a bit different from the way it does for Excel.
The way my previous script engaged with Excel was through a rule; every time a new email was received, the following script would run if the message had the subject line generated by my web form. The script would check whether Excel and the target workbook/sheet was open, act accordingly, and then input the substrings (I've excluded that part below), then return Excel and the wb/ws to their initial state. I imagine though, that with Access I might be able to feed the substrings into the .mdb without having to open it proper, the way a front-end talks to a back-end. But perhaps I'm mistaken on that front.
Code:
Option Explicit
Option Compare Text
Public Const xlUp As Integer = -4162 'I genuinely do not know what this is _
about. It came with the initial _
borrowed code.
Public Const wbPath As String = "C:...Workbook.xlsx" 'Workbook path
I have made a query with the name "Confirmation" and it is setup like this:
Name trainee Email Training John John@mail.com Tr one Mary Mary@mail.com Tr two
I also made a button in a report with the title "Send Mail" now is my goal that if i press that button automatically multiple e-mail message's will be generated with data from people in that query. So if click on that "Send Email" button i want two different mails messages generated that will be send to John@mail.com and Mary@mail.com with in the mail body their data.
I wrote VBA code to pull email messages from Outlook in order to create an alert if a message with a specific subject line is not received. I have the system coded to send the alert if the message isn't found before the system encounters a message with a SentOn date/time more than two hours old.
The code has worked great for over a year, but now my company is migrating to Win8 and I'm having issues with the code. The machine that normally runs the process uses XP and Access 2007. The code also works on another machine running Windows 7 and Access 2010.
The issue I'm having in Win8, with Access 2010, is that the code isn't pulling the most recent message first. Instead, it is selecting a message from about two weeks ago, and then cycling through the other messages from that point. I know there are ways I can code around this, but I don't want to if I don't have to.
Is there a setting that I'm missing? I've included the basic code to pull the email messages below:
Code: DoCmd.SetWarnings False Dim ol As Outlook.Application Dim ns As Namespace Dim Inbox As MAPIFolder Dim Item As Object Dim strSubject, strSentDate As String
Currently have an Access db filled with different departmental information. Trying to build a workflow mechanism that will validate the status of a certain "Event".
70-80 different projects in one table. This table has Due Date for the project in itlAll of the days between milestones are static. There are 18 different Milestones covered by 6 departments.Table built to hold status of project. which includes notes for every milestone and date completed. 37 fields (date and memo field each with id number to relate back to project table
A generated email that emails the parties who are late or their milestone is upcoming. (can do this already, but see the other requirement)When users receive email they need to reply in the email that was sent to them the date and what the result of what they did in the email. Users will be using mobile devices, laptops and desktops to respond.Could use Collect Data feature, but it is not easily manipulated with vb. Also, it will not all information to be edited in a query.
I have a form which has a button to email the data out in a standard email message.
Private Sub Command60_Click() Dim MyDb As dao.Database Dim rsEmail As dao.Recordset Dim sToName As String Dim sSubject As String Dim sMessageBody As String
[code]...
This works well enough, however, FIELDS 11 through to 16 contain the venue address. This is all we ll and good if every field of the venue address is populated. here are times when not all of the fields are populated, for instance, the address might only be 5 lines.I know I can do this using IIf statements on a report, but how can i achieve the same thing for the email.
I am using a public function to feed a variable string to a query. So far I have got:
Code: Public Function ClientStreetModule(firstLVar As Variant, streetVar As Variant, newFL As Variant) As String Dim cslStr1 As String, newStreet As String newStreet = Right(streetVar, Len(streetVar) - Len(newFL))
[code]....
However, I only need to use newStreet as the true part of iif, in which instance all are longer. At least I think this is the problem. I realise I might need to use NZ but am not sure how. Why it is evaluating and giving errors for all records and not just when the iif criteria is true as I want it to?
I have a User Defined Type which stores an array..I have 2 instances of this UDT, one storing matched data, the other storing exception data..I was to parse these arrays to an Excel output routine. However, the parameter variable contains no data when accessing it..
Here is my code:
Code: Private Type TOutputRow RACFID As String FullName As String Access As String LastLoggedIn As Date End Type
Can someone get me started in the right direction?
I have an unbound field on a form "txtScan". This field is populated by a barcode scanner.
The data looks like this ~Field1~Field2~Field3~Field4~Field5~Field6~Field7~ Field8~Field9 I am using ~ as a delimiter. Since I am encrypting the barcode, I can pretty much do anything to the barcode.
I need to parse ~Field1~ into txtFirstName ~Field2~ into txtLastName ~Field3~ into txtCompany etc. A key point is that one of the fields may be blank so, if field 2 in the string is blank, "Field2" does not get populated.
I've never tackled anything like this before and don't know where to start.
If I have an XML file, I can load it into an XML document and parse it.
For an HTML file, I have been unable to find similar parsing methods - that is, using DOM and not involving a browser (other than simply treating the file as text). I'd prefer to avoid the browser control because it is different for a number of different Access versions, so the only option remaining that I see is to run Internet Explorer with visibility off.
Can one parse HTML using the DOM without a browser?
Here is what I need to do: I have 1 table that contains groups responsibilities, there is a field Code-group that the initiator uses to track the groups & their % of impact to the overall project hours. Sadly enough he enters the data as such (EX: PROJECT1 GROUP1-25%, GROUP2-50%, GROUP3-25%.
The problem is that he has varied instances of groups listed in each record & wants me to be able to parse the data out regardless of how many groups are listed. I know how to parse data when there are a specific number of groups what I can't figure out is how to parse data regardless of how many groups is in the field.
I have a process which imports a txt file into a memo field of my TBLORIGINAL table Each file may have one record or it may have multiple records Every record begins (exactly) with
Quote:
FRE Order Order RAD ShipDate Customer City State Postal Code
For each record in the memo field, I need to create a new record into my TBLPROCESSED table
This can probably be done while it is importing but I need to keep the original file intact
I suppose I could copy and paste but there must a vba way of doing this
In a query, I have the following data. If a number has more than six digits, I need to parse past the fifth digit and that becomes a new field. If it has five or fewer digits, no record is entered into Column2. For example:
I've got a Table with a string of data delimited by an "*". The first part of the string before the "*" can be variable in length, so if I use a LEFT expression to break apart the 2 parts of the string on each side of the "*", my results are incorrect. In MS Excel, I can use the following formula to solve the problem:
=LEFT(B6,(FIND("*",B6)))
You are just substituting the number of positions with a Find command that looks for the "*", and returns anything left of the "*". Unfortunately, the brilliant programmers at Microsoft, once again, don't have an Excel function in Access. how to recreate that functionality in a table in Access?
I have a spread sheet which on a per line basis contains columns whose cells contain the path to a file. It looks as if many of the files are tif, pdf, word and excel etc, so multiple file types.
Writing a routine which would take each row and then for each line of file paths turn them into one multi-page document - pdf or something?
how to change Access default error messages with custom messages? Like, if I enter some data in a sub form where the parent form is empty new record, default error message says that 'You must enter a value in the 'column name' field'.
I want to disable this default message and display my own error message. Now I know MessageBox and MsgBox fuctions to display custom messages, but how to disable the default message.
I'm trying to put multiple records of data from a subform in a single e-mail, and my Outlook calendar. I have a contracting business, and on my Orders form (which details a single client), I have a sub-form that lists all the items to be done at that client's home (a different record for each work item). When I send an e-mail, or post the appointment to the Outlook calendar, I am trying to list all those records in the body of the e-mail, and/or in the Notes section of the appointment. I created the query to call the records, but have not figured out a way to use it in the code.
So, I'm very new to Access and not all that skilled in VBA. I have, through trolling the internet found some code that does allow me to send an email on the click of a button on a form through Lotus Notes.
However, I cannot get any of the data on the form to show up in the email.
How do I even do something simple like, have the subject line come from a text box on the form or have the body come from a text box (or 2)?
Here is the code I have so far - also, the "attachment" part does not work - but one problem at a time...
---- Public Sub Command15_Click() '------------------------------------------------------------------------------- ' Date: 02-06-2003 ' ' Sends an email via Lotus Notes. '------------------------------------------------------------------------------- 'Set up the objects required for Automation into lotus notes Dim Maildb As Object 'The mail database Dim UserName As String 'The current users notes name Dim MailDbName As String 'THe current users notes mail database name Dim MailDoc As Object 'The mail document itself
[Code] ....
Again, I literally just have this as an event on "On Click" for the button. Nothing too fancy. It sends an email....with whatever text I manually put in to this code....which is not ideal....
I have a database that stores expiration dates of department charge numbers. The database emails personnel, that I enter into each record, at 15 and 30 days prior to expiration using SendObject.the database emails personnel, that I enter into each record, at 15 and 30 days prior to expiration using SendObject. I have a total of three fields where I enter an email address for each record; Email, E2, and E3. If I enter data in Email and E2 an email is sent. If I enter data in Email,E2, and E3 an email is sent. The problem happens when I only enter data in Email, I get an error 2295. I'm sure that it has something to do with the below piece of code and my use of Nz:
I have a query that I run from VBA which basically resets a field on every row, where it is set, back to it's original default value - this works!.However I get 2 pop up windows, 1 of which is no use and the other is worth keeping.
The first Window says "you are about to run an update query that will modify data in your table" - I want to suppress this one.
The 2nd more useful one tells me I'm about to update (x) rows. I want to keep this.
Obviously if I put DoCmd.SetWarnings False in my code all warnings are switched off so how, if at all possible, do I only display the 2nd more useful message?I presume I have to trap the error, but how do I know what the error number (??) is for the first message?
I have two text boxes for which I am trying have show and error message when the proper data is not entered. One text box is for PLANID and the other is for Date. I would like the PLANID to be checked 1st. The PLANID needs to be either 7 digits or 10. If it is not, the message would be "Please enter a valid PLANID". If it is 7 or 10 digits, then it should check the Date text box.
If it is blank, the message would be "Please enter a valid Date". If they are both blank, the PLANID message should appear 1st. Below is what I have written. The problem that I am having is that when the PLANID is 10 digits and the date is blank, the "Please enter a valid PLANID" message is showing rather than the "Please enter a valid Date" message.
Private Sub Btn_Refresh_Data_for_One_Plan_Click() Me.txtboxPLANID.Value = UCase(Me.txtboxPLANID.Value) If ((Len(Me.txtboxPLANID.Value) = 7 And Len(Me.txtboxPLANID.Value) = 10) And (Not IsNull(Me.txtboxPLANID.Value)) And (Not IsNull(Me.TxtboxDate.Value))) Then Dim stDocName As String stDocName = "Mcr_RUN_MATCH_DIFFERENCES"
I am currently using vb code to send an email in Access on the click of a button. I want the database user to be able to enter the recipient in a text box [ToEmail] which is on form [GroupStockProfiler]. However, I'm unsure how to put this into my code. I currently have the following which doesn't work (unless I put a specific email after 'To'):
I have an automated email system (Lotus Notes) in a Access database I have created and am looking for the code needed to add up to 3 c.c addresses into an email prior to sending automatically.
The code I have to send the email to the To: individual is all working but what code I need to add and where for the c.c addresses of which there could be 1, 2 or 3. The control for To address is EmailTo = CustCopyEmail The controls for the 3 c.c emails are cc_EmailAddress, cc_EmailAddress1 and cc_EmailAddress2.
Here's the code I have:
Private Sub SEND_CC_Click() ' Set up the objects required for Automation into Lotus Notes. Dim Maildb As Object 'The mail database. Dim Session As Object 'The Lotus Notes session. Dim MailDoc As Object 'The mail document itself. Dim UserName As String 'The current users Lotus Notes name.
Last monday's [Feed Inv]+ this weeks [Feed Del] - this weeks [Feed Inv]= Feed Consumed
Table:
Autonumber (is PK) Date Farm Barn Lbs Del (pounds delivered) Lbs Inv (pounds inventoried, this is a physical inventory done at farm)
I can use Between[Start Date] And [End Date] in the criteria to show this weeks Lbs Del and Lbs Inv in a query, no problem. How do I tell the query or report to subtract 7 from the Start Date to pull last weeks feed inventory?
The result will be displayed in a report, so calculating in a report would be ideal.
I have a Sub form titled Training that has the the following two fields:
[Department],[Jobs]
The jobs is a pull down select box that contains all of the job titles for the entire plant. What i would like to happen is for the user to be forced to select the appropriate department first and then use the [Department] selected to feed the criteria to the query that the [Jobs] field is located in. In addition i have been un-able to get the fields to be locked until the [Department] field is entered. I have tried the following unsuccessfully:
Jobs Query Criteria: =[Foms]![Training]![Department]
e.g: InputText is 123, InputText2 is abc I wanted to display the text inside textbox of frmCalendar as: 123 abc instead of 123abc. how shall i use the vbCrLf?