Solved

access vba code for separating lists

Posted on 2013-01-25
11
738 Views
Last Modified: 2013-01-26
I have a text field which causes a lookup from a list;

eg the list is apples, oranges, pears, grapes.

What I want to do is make a report out of that list so that:

if the chosen list item is oranges, the report is able to make a list of the other items in the list.

How this would work:
The Report would say "Thank you for buying Oranges"

"you are now entitled to a discount against:

apples, pears, and grapes

So its a question of how the list can be split to display the exceptions.
0
Comment
Question by:topUKlawyer
  • 5
  • 4
  • 2
11 Comments
 
LVL 61

Accepted Solution

by:
mbizup earned 250 total points
Comment Utility
-->> apples, pears, and grapes

If you can make do without the 'and', a simple solution might be (assuming a textbox for the chosen item):


dim strMessage as string
strMessage = "Thank you for buying " & me.txtChosen & ".  you are now entitled to a discount against: " & vbcrlf  & replace (replace(strList,  me.txtChosen  & "," & ""), Me.txtChosen, "")

Open in new window

0
 
LVL 61

Expert Comment

by:mbizup
Comment Utility
This will actually split the string and format the message with the AND before the last item and commas between the rest:

Function getMessage(strList As String, strChosen As String) as string
    Dim s() As String
    Dim sTemp As String
    Dim sListTemp As String
    Dim I As Integer
    
    sTemp = "Thank you for purchasing " & strChosen & "! You are now entitled to a discount on: " & vbCrLf
    s = Split(strList, ",")
    
    For I = 0 To UBound(s)
        If Trim(s(I)) = Trim(strChosen) Then
            s(I) = ""
        Else
            Select Case I
                Case UBound(s) - 1
                    s(I) = Trim(s(I)) & " AND"
                Case UBound(s)
                    s(I) = Trim(s(I)) & "."
                Case Else
                    s(I) = Trim(s(I)) & ","
            End Select
        End If
    Next
    sListTemp = Replace(Join(s, " "), "  ", " ")
                    
    
    getMessage = sTemp & sListTemp
    
    
End Function

Open in new window


Call it like this:

msgBox getmessage("Apples, Oranges, Bananas, Pears","Oranges")

Open in new window


or

dim strList as string
dim strChosen as string

strList = "Apples, Oranges, Bananas, Pears"
strChosen = "Oranges"

msgBox getmessage(strList,strChosen)

Open in new window

0
 
LVL 10

Assisted Solution

by:LukeChung-FMS
LukeChung-FMS earned 250 total points
Comment Utility
Are you familiar with using not-in outer-join queries?  You can easily query for the items that aren't the one selected. You could use the query in your report directly or in a subreport.

Wrote a paper on it entitle:
Microsoft Access Outer Join Query: Finding All Records in One Table but Not Another and Creating "Not In" Queries
http://www.fmsinc.com/MicrosoftAccess/query/outer-join/index.html

It's part of our Microsoft Access Query Help Center: http://www.fmsinc.com/MicrosoftAccess/query/help-center.html

Hope this helps.
0
 

Author Comment

by:topUKlawyer
Comment Utility
Thanks LukeChung-

My cup is overflowing with help.

Will look at this too.
0
 

Author Comment

by:topUKlawyer
Comment Utility
LukeChung

I have looked at your article but I cant see how that would work for me if I have one list item in a field (as opposed to a table) selected and I want to group together in a Report the ones that have not been selected.

Mbizup, is there anything in what LukeChung is saying? Your additional comment would be welcome.
0
Free Trending Threat Insights Every Day

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

 
LVL 10

Expert Comment

by:LukeChung-FMS
Comment Utility
If it's one item, you can simply have a query that retrieves all records except that item.

No need for an outer join in that case. I thought you had more than one selection that you needed to exclude.
0
 
LVL 61

Expert Comment

by:mbizup
Comment Utility
<<
Mbizup, is there anything in what LukeChung is saying?
>>

Absolutely.

From the way you posted your question, I assumed you wanted/needed to work with a comma delimited list.  The code I posted does do that (tested).

However, using a table and a query gives you more flexibility.
0
 

Author Comment

by:topUKlawyer
Comment Utility
Thanks guys thts helpful but I dont know how to separate using a query ad the current stored value of the textfield




any more help please?
0
 

Author Comment

by:topUKlawyer
Comment Utility
OK progress.

I have a query which shows the record and this shows the right field for apples
call the field slected fruit type if you like and another filed in the query which shows fruit type 2
which is a list of all the fruit.

now I gather hopefully correctly that I have to creat an outer join and that will give me a list of those items not in the slected fruit list ie the remainder.

HOWEVER when I join them with an outer join it says that the query is ambiguous and I should create a first query but I Have no idea wat to do to run or make that.

help please
0
 

Author Comment

by:topUKlawyer
Comment Utility
I have now worked out how to do a Not in Outer join. thanks
0
 
LVL 61

Expert Comment

by:mbizup
Comment Utility
Wow! Different time zones!  It looks like you got a lot done while the US East Coast was sleeping.

Glad you worked it out...
0

Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

This article will show you how to use shortcut menus in the Access run-time environment.
In this article we discuss how to recover the missing Outlook 2011 for Mac data like Emails and Contacts manually.
In Microsoft Access, learn the trick to repeating sub-report headings at the top of each page. The problem with sub-reports and headings: Add a dummy group to the sub report using the expression =1: Set the “Repeat Section” property of the dummy…
The viewer will learn how to use the =DISCRINV command to create a discrete random variable, use this command to model a set of probabilities and outcomes in a Monte Carlo simulation, and learn how to find the standard deviation of a set of probabil…

763 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

7 Experts available now in Live!

Get 1:1 Help Now