not that its my business to interfere with what you like to do, but my $0.02 is , VB6 is old. You should get on and learn modern languages.
In a response that I'm sure will stun us all, I agree.
At least, they can do what VB6 can, (Python/Perl/VB.NET/Ruby/Java etc) and is catered to modern IT technology
C# FTW.
Also, my experiments with IronPython (and to a lesser extent, IronRuby) are great; I haven't upped to VS 2010 yet, but to my knowledge it's quite possible to have a single project that uses any number of CLR languages- you could implement one part in python, other parts in C#, Ruby, VB.NET, and so forth. it's great for taking advantage of the abilities of each language where their purposes make the feature nice and short.
Technically you can do it with the older versions as well but the ability to have them all integrated in a single project in the IDE wasn't until 2010.
Another nice "side-effect" of the CLR-ization of Python into IronPython is that when you compile it, your users won't need to have the python interpreter. Sure, it's only a small download and I believe there are ways to inline it and stuff, but It's cool to be able to reflect on python/perl etc. defined CLR classes as if they were any other C# or VB.NET class, without any special treatment.
On the flip-side of course is that although on windows the .NET framework (in more recent versions) is preinstalled, python isn't, but with Linux, Python is almost always available, and it's Mono (the Linux/Mac framework implementation) that would need to be installed. Either way, though, nearly any of them will be better then VB6 as far as built-in language features go. Just thinking back to my attempts at implementing IEnumVariant in VB6 to define a custom enumerator which required like 5 extra classes and Actually memory editing the Vtable due to Visual Basic limitations on method names is enough for me to shudder. C# (and I'm sure VB.NET, and of course python and perl and other languages) can have an enumerator via a simple function/method.
When I first went into C# I figured I would still use VB6 a lot. I hardly ever use it now, and when I do, it feels, well, clunky. As ghostdog likes to point out in our little arguments now and then, it doesn't even have a way to sort arrays or pretty well anything built in. That's sort of silly. I mean, sure, it's not designed for short scripts... but VBScript is and it doesn't have Sort either. I wrote a class and interface (the latter a result of VB6's lack of delegates/function pointers, which is more a artifact of age then it is of design oversight (or maybe some of both)) to sort Variant Arrays, but it's still type sensitive (it can't sort arrays of integers, for example) and I shouldn't have had to write it. The best sort of implementation is one where you call a sort function or method and optionally pass in a comparison routine delegate. This is how almost all modern languages implement this, and the more Object oriented languages even define interfaces that allow objects to sort themselves, as well, by defining comparison routines and interfaces.
And this doesn't even yet touch on the rising paradigm of "functional programming" epitomized in .NET as the first-class language F#. but most languages are capable of "functional programming" that have a concept of either function pointers (more messy, but still... doable) or lambda expressions/closures (python, perl (? I think) .NET languages, java, etc).
I got stuck with VB6 and refused to switch until a few months ago (3?) and now I consider C# my main language, and only really use VB6 for maintaining my older projects, which have for the most part fallen by the wayside. For example, BCFile was a file library intended to replace the file access statements (Open, Put, Get, etc) with an Object Model- MS does this sort of with the FileSystemObject but that's more geared for scripting and text files, mine was also going to be able to read and write binary data as well as alternate data streams.
It works fine, and is rather powerful, but there is a lot of stuff I had to do for the aforementioned custom enumerator that I ended up undoing because it turns out that messing around with the machine code of a compiled program can be unpredictable (who knew?
). But the thing is, That is the type of thing that should be built in.
Whatever you choose to switch to, make sure to stick with it. For your next project, instead of immediately starting a VB project, do it in Python, or C#, or whatever language you want to try. And STICK to it, don't give up and do it in VB anyway. The more small, and the more large projects you do in the language the better you will get and the more familar you will be with it. I started by rewriting my expression evaluator in C# from scratch, the idea was to best leverage the far more powerful Object capabilities of the language. I had the algorithms pretty well memorized and it was merely a matter of learning the syntax- the language, and learning how to best express myself. I started out constantly missing semicolons (due to my long years with VB6) but now I find myself adding semicolons to my old VB6 programs when performing maintenance.