Hahahaha! Just three weeks before Christmas I scored a two year permanent position with Government, hence I'm back online . I've been flat out for 8 years now and finally get a break. Currently programming System Architect, which is VBA integrated (though quirky at times)

 One of my up and coming tutorials, which is cool, is subclassing controls. I was building a form in System Architect and the FlexGrid control was unregistered. The spreadsheet control available was totally ugly, the ListView control didn't cut it. So I created a class that creates a matrix on a form given the number of columns and rows. Then I wrapped the checkbox control in a class for the matrix class control to use  (I need a smiley with a propeller hat on!). Anyhoo, the control works real cool, subclassing using With Events mostly and some methods calling public form methods if they exist.

Can you tell I have an afternoon free?  
Anyhow, back to creating code.

Thanks for the kudos. It was easier to write than the first part of the regular _expression_ one.

Duane.


--- In [email protected], "Tom Oakes" <[EMAIL PROTECTED]> wrote:
>
> Holy smokes - are you getting any actual work done down there?
>
> I'll second your enthusiasm regarding the Dictionary object - I use it
> often. The biggest advantage over the Collection object is the Exists
> property, in my opinion. If you reference the Microsoft Scripting Runtime
> library, you can early bind:
>
> Dim dicItems As Dictionary
>
> It's worth noting that you can store any object/data type in a dictionary.
> Collections, controls, recordsets, databases, forms, custom classes, etc.
> The dictionary comes in very handy in class module hierarchies - keeping
> track of a "collection" of subordinate/child classes in a class module.
>
>
> Kudos on a well-written tutorial.
>
> Tom Oakes
> Personal PC Consultants, Inc.
> [EMAIL PROTECTED]
> 503.230.0911 (O)
> 402.578.2648 (C)
> 512.727.9497 (F)
>
>
>
> _____
>
> From: [email protected]
> [mailto:[EMAIL PROTECTED] On Behalf Of Duane Hennessy
> Sent: Tuesday, January 24, 2006 5:49 PM
> To: [email protected]
> Subject: [AccessDevelopers] The Dictionary Object...Please Consider.
>
>
>
> Okay, I'll admit I'm a bit of a fan of the Array. You either love or hate an
> Array. People who dislike the Array will often opt for a Collection instead.
> Other languages do provide a really cool object called a Dictionary or Hash
> Table. This is like a Collection that behaves like a Collection combined
> with an Array with some extra handy methods. VBA does not have this but
> _vbscript_ does provide a Dictionary object, which is cool, and we can make
> use of this object within our Access VBA environment. To build a dictionary
> object do the following:
>
> Dim my_dictionary as Object
> Set my_dictionary = CreateObject("Scripting.Dictionary")
>
> Voila! We have a dictionary. What can we do with it? We can add items, check
> for the existence of items, return an array of keys, return an array of
> items, set how a dictionary compares keys and get the count and so on. An
> example:
>
> 'First create the Dictionary Object
> Dim my_dictionary as Object
> Set my_dictionary = CreateObject("Scripting.Dictionary")
>
> 'When adding an object or value to a dictionary you put the key first and
> the actual value or object second. The key is mandatory and you cannot add
> items without it.
> my_dictionary.Add "Key 1", "Value 1"
> my_dictionary.Add "Key 2", "Value 2"
> my_dictionary.Add "Key 3", "Value 3"
> my_dictionary.Add "Key 4", "Value 4"
>
> So now we've added four values to the dictionary. Let's do some things we
> cannot do cleanly or at all with a Collection. Say we want to replace "Value
> 3" with the name "Zebra". Too easy!
>
> my_dictionary.Item("Key 3") = "Zebra"
>
> You couldn't do that with a collection! In a collection you would have to
> remove one item and add another, thus losing the order or your items. A
> dictionary behaves like an Array in this respect. What if we were not sure
> there was a key called "Key 3" within the dictionary and wanted to avoid an
> error. Again, easy, we just use the Exists method of the dictionary object:
>
> if my_dictionary.Exists("Key 3") then
> my_dictionary.Item("Key 3") = "Zebra"
> else
> my_dictionary.Add "Key 3", "Zebra"
> end if
>
> We might want to know how many items are in the dictionary, just use the
> Count method which is the same as the one in a collection.
>
> MsgBox my_dictionary.Count
>
> If you want to iterate through the items in a dictionary, you can't use an
> integer counter as you would an Array or Collection but you can use two
> methods to do so:
>
> 'You can just grab the items from the dictionary like so:
> Dim items as Variant
> items = my_dictionary.Items
>
> 'Iterate through the array of items. These items can include objects aswell.
> Dim separate_item as Variant
> For Each separate_item in items
> MsgBox separate_item
> Next separate_item
>
> 'Or you can extract the keys and iterate through the items (which is another
> advantage over a Collection that does not give you it's keys or let you know
> what they are)
> Dim keys as Variant
> keys = my_dictionary.Keys
>
> 'Iterate through the array of items. These items can include objects aswell.
> Dim key as Variant
> For Each key in keys
> MsgBox my_dictionary.Item(key)
> Next key
>
> Too easy! To remove an item or all items you can use Remove and RemoveAll
> respectively:
>
> my_dictionary.Remove("Key 2")
>
> Or
>
> my_dictionary.RemoveAll
>
> These are the basics. I'll look at the CompareMode method in un minuto. The
> Dictionary object is a real advantage when we need to build a Collection of
> Collections or a Class Collection. For example; say we had to collect data
> on spys and their current missions. Usually we would have to create a Class
> Object called Spy and hold a Private or Public Collection within the class
> to which we would add their missions. One class too many (A Collection is a
> Class)! Let's use a Dictionary instead...
>
> Dim my_dictionary As Object
> Dim missions As Collection
> Dim spy_name As String
> Dim keys, key As Variant
>
> Set my_dictionary = CreateObject("Scripting.Dictionary")
>
> 'Add three lots of spies.
> Set missions = New Collection
> spy_name = "Alexander Poligraphovich"
> missions.Add "Vladivostok"
> missions.Add "Ukraine"
> missions.Add "Beijing"
> my_dictionary.Add spy_name, missions
>
> spy_name = "Mohammed Ramadan"
> Set missions = New Collection
> missions.Add "Munich"
> missions.Add "Tehran"
> missions.Add "Sydney"
> my_dictionary.Add spy_name, missions
>
> spy_name = "Sri FitzPatrick"
> Set missions = New Collection
> missions.Add "Dublin"
> missions.Add "San Francisco"
> missions.Add "Benin"
> my_dictionary.Add spy_name, missions
>
> keys = my_dictionary.Keys
> For Each key In Keys
> MsgBox key & vbCrLf & _
> my_dictionary(key).item(1) & vbCrLf & _
> my_dictionary(key).item(2) & vbCrLf & _
> my_dictionary(key).item(3)
> Next key
>
> Buenos!
>
> The CompareMode method lets you set how the dictionary compares it's keys
> when looking for duplicates etc. There are four compare modes
> vbBinaryCompare, vbTextCompare, vbDatabaseCompare (for MS Access only) and
> vbUseCompareOption (which uses the setting in the Option Compare statement
> at the top of a module). How can we use this? Say we add two values with the
> Keys of monkey and MONKEY' one in all lowercase and the other in all
> uppercase.
>
> my_dictionary.Add "monkey", "Giraffe"
> my_dictionary.Add "MONKEY", "Elephant"
> MsgBox my_dictionary.Count
>
> The MsgBox will show an item count of 2, because the two keys are
> essentially different. The dictionary is performing a binary comparison upon
> the keys so you can add more than one 'monkey' as long as they have some
> difference in character case. What if we wanted the word monkey in all of
> it's forms to be compared by name and not content? In other words we don't
> want more than one 'monkey' in the dictionary. We use CompareMode
> vbTextCompare:
>
> my_dictionary.CompareMode = vbTextCompare
> my_dictionary.Add "monkey", "Giraffe"
> my_dictionary.Add "MONKEY", "Elephant"
> MsgBox my_dictionary.Count
>
> On this example we don't even get to the Msgbox, instead we get an error
> stating "This Key is already associated with an element of this
> collection.". This stops two keys being added that have the same name.
> vbBinaryCompare behaves the same way as the first example does (it is the
> default) and vbDatabaseCompare....Well I read what it did once and never had
> to remember it again! You can find explanations for these, albeit very
> succinct, within the MS Help in Access, or better still Google it.
>
> Hopefully this gives you an extra tool alongside the Collection or Array and
> some ideas on future use. A Dictionary makes code structure cleaner and more
> humanly understandable. This _vbscript_ tool will really pay dividends.
> <http://us.i1.yimg.com/us.yimg.com/i/mesg/tsmileys2/01.gif>
>
> Any questions about Dictionaries and their usage please don't hesitate to
> ask.
>
> Buenos suerte!
>
> Duane Hennessy.
> Bandicoot Software
> Tropical Queensland, Australia
> (ABN: 33 682 969 957)
>
> Want Increased Productivity?
> <http://www.bandicootsoftware.com.au> http://www.bandicootsoftware.com.au
>
>
>
>
> Please zip all files prior to uploading to Files section.
>
>
>
> _____
>
> YAHOO! GROUPS LINKS
>
>
>
> * Visit your group "AccessDevelopers
> <http://groups.yahoo.com/group/AccessDevelopers> " on the web.
>
>
> * To unsubscribe from this group, send an email to:
> [EMAIL PROTECTED]
> <mailto:[EMAIL PROTECTED]>
>
>
> * Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service
> <http://docs.yahoo.com/info/terms/> .
>
>
> _____
>




Please zip all files prior to uploading to Files section.




SPONSORED LINKS
Microsoft access developer Microsoft access help Microsoft access database
Microsoft access training Microsoft access training course Microsoft access programming


YAHOO! GROUPS LINKS




Reply via email to