[Webinar] Streamline your web hosting managementRegister Today

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 746
  • Last Modified:

access vba code for separating lists

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
topUKlawyer
Asked:
topUKlawyer
  • 5
  • 4
  • 2
2 Solutions
 
mbizupCommented:
-->> 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
 
mbizupCommented:
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
 
Luke ChungPresidentCommented:
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
Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

 
topUKlawyerAuthor Commented:
Thanks LukeChung-

My cup is overflowing with help.

Will look at this too.
0
 
topUKlawyerAuthor Commented:
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
 
Luke ChungPresidentCommented:
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
 
mbizupCommented:
<<
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
 
topUKlawyerAuthor Commented:
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
 
topUKlawyerAuthor Commented:
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
 
topUKlawyerAuthor Commented:
I have now worked out how to do a Not in Outer join. thanks
0
 
mbizupCommented:
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: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

  • 5
  • 4
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now