Solved

access vba code for separating lists

Posted on 2013-01-25
11
741 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
ID: 38818254
-->> 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
ID: 38818293
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:Luke Chung
Luke Chung earned 250 total points
ID: 38819090
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
Salesforce Made Easy to Use

On-screen guidance at the moment of need enables you & your employees to focus on the core, you can now boost your adoption rates swiftly and simply with one easy tool.

 

Author Comment

by:topUKlawyer
ID: 38819367
Thanks LukeChung-

My cup is overflowing with help.

Will look at this too.
0
 

Author Comment

by:topUKlawyer
ID: 38820747
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
 
LVL 10

Expert Comment

by:Luke Chung
ID: 38820793
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
ID: 38820852
<<
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
ID: 38821589
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
ID: 38821653
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
ID: 38821710
I have now worked out how to do a Not in Outer join. thanks
0
 
LVL 61

Expert Comment

by:mbizup
ID: 38822034
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

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Technology opened people to different means of presenting information, but PowerPoint remains to be above competition. Know why PPT still works today.
Describes a method of obtaining an object variable to an already running instance of Microsoft Access so that it can be controlled via automation.
In Microsoft Access, learn how to use Dlookup and other domain aggregate functions and one method of specifying a string value within a string. Specify the first argument, which is the expression to be returned: Specify the second argument, which …
The viewer will learn how to simulate a series of sales calls dependent on a single skill level and learn how to simulate a series of sales calls dependent on two skill levels. Simulating Independent Sales Calls: Enter .75 into cell C2 – “skill leve…

820 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