« first day (1441 days earlier)      last day (1739 days later) » 
00:00 - 19:0019:00 - 00:00

12:00 AM
RELOAD!
[Cardshifter/HTML-Client] 4 commits. 2477 additions. 8308 deletions.
[rubberduck-vba/Rubberduck] 5 commits. 5 opened issues. 1 closed issue. 11 issue comments. 48 additions. 74 deletions.
 
12:33 AM
I wanted to bring one of my favorite #cartoons to life, so here's Wile E. Coyote continuing his quest to catch the Roadrunner in AR. #LooneyTunes #madewithunity #ARKit https://t.co/juh3u0UuDw
 
1:06 AM
@HackSlash inspections are basically just queries against the parser state, and/or parse tree traversals; the simplest inspections simply query/filter declarations, and the more complex ones involve walking parse trees, evaluating expressions, and whatever they need to do.
The hard part is coming up with a way to make that easy to do
ParseTreeInspection inspections are the ones involving a "listener"; the inspector initiates a traversal of each module's parse tree, and all inspections "listen in" for specific nodes being hit, and act accordingly
I need to write about these mechanics
 
A new article?
 
I guess yeah
Looking at your stuff in a minute
@IvenBach where did you get Assert.Pass from?
I'll send you an email reply =)
 
1:36 AM
kind of wishing that VS would allow loading 2 solutions....
 
@MathieuGuindon Prolly me still thinking Pass is a member...
 
yay, events working (again)
it's really annoying that the build hangs forever on account of having forgotten to unload the RD.
 
2:31 AM
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/3975?src=pr&el=h1) Report
> Merging [#3975](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/3975?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/67c765707768cc330d9ed1202de38f7e7af9aea5?src=pr&el=desc) will **decrease** coverage by `0.07%`.
> The diff coverage is `15.09%`.


```diff
@@ Coverage Diff @@
## next #3975 +/- ##
=========================
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/3975?src=pr&el=h1) Report
> Merging [#3975](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/3975?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/67c765707768cc330d9ed1202de38f7e7af9aea5?src=pr&el=desc) will **decrease** coverage by `0.07%`.
> The diff coverage is `15.09%`.


```diff
@@ Coverage Diff @@
## next #3975 +/- ##
=========================
[rubberduck-vba/Rubberduck] build for commit c0058325 on unknown branch: AppVeyor build succeeded
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/3975?src=pr&el=h1) Report
> Merging [#3975](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/3975?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/67c765707768cc330d9ed1202de38f7e7af9aea5?src=pr&el=desc) will **decrease** coverage by `0.05%`.
> The diff coverage is `12.7%`.


```diff
@@ Coverage Diff @@
## next #3975 +/- ##
========================
[rubberduck-vba/Rubberduck] build for commit c0058325 on unknown branch: 53.61% (target 0%)
 
3:22 AM
does any one know why the Tools -> References doesn't always list all available DLLs? (the library is registered and works but one must browse to the TLB file manually and only then it will show up in the list of the references)
 
 
1 hour later…
4:41 AM
hey @this
@this it comes down to client support. most clients will be fine with providing a dual implementation.
but for something like vbDotNetLoader, it's much harder to generate vtables at runtime, with the appropriate function stubs etc, so vbDotNetLoader simply doesn't support vtable binding, and so dual source interfaces aren't compatible with it.
@this is it registered in HKLM? IIRC the references dialog list only looks at HKLM not HKCU
 
5:02 AM
Another one suited to you lot stackoverflow.com/questions/50381793/… though might be considered a little open-ended.
 
 
2 hours later…
7:17 AM
@DainIronfootIII: How would we track that? Easilly I think? You have a way to save information about something even when RD is closed (settings and so on) so when someone writes TODO and it will firstly appear, after refreshing, on TODO Explorer, it would write a datetime for that time. When refreshed again, it could compare the string with existing and if it's the same, the datetime will stay. If it's modified, it would write the newer one?
I don't know how exactly the TODO works. But if it's not persistent (no ToDo when RD is firstly run) what about saving somewhere the String or Hash (fo
 
 
2 hours later…
9:24 AM
AFAIK, the to do items are simply based on the to do markers found in the comment contexts in the parse trees and do not get persisted.
 
10:04 AM
@WaynePhillipsEA first time, no, but then I tried per-machine install -- the same thing happens - it isn't listed until I browse to th efile.
 
10:25 AM
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/3975?src=pr&el=h1) Report
> Merging [#3975](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/3975?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/85d75346282060886013aad30c4a93b5b304b8f5?src=pr&el=desc) will **decrease** coverage by `0.07%`.
> The diff coverage is `0%`.


```diff
@@ Coverage Diff @@
## next #3975 +/- ##
===========================
 
@M.Doerner Okay so it was as I mentioned in the second part. :) Still much work for this kind of functionality I suppose by your reaction. :)
 
@Duga At first I thought I finally found a way to see the files that did decrease the test coverage here: codecov.io/gh/rubberduck-vba/Rubberduck/pull/3975/tree
drill again: codecov.io/gh/rubberduck-vba/Rubberduck/pull/3975/tree/… then.... ?!? no files changes? But Parent folder has negative coverage? Who's doing the math here?
 
[rubberduck-vba/Rubberduck] build for commit a62be583 on unknown branch: AppVeyor build succeeded
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/3975?src=pr&el=h1) Report
> Merging [#3975](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/3975?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/85d75346282060886013aad30c4a93b5b304b8f5?src=pr&el=desc) will **decrease** coverage by `0.07%`.
> The diff coverage is `0%`.


```diff
@@ Coverage Diff @@
## next #3975 +/- ##
===========================
[rubberduck-vba/Rubberduck] build for commit a62be583 on unknown branch: 53.61% (target 0%)
 
10:52 AM
@this Simple explanation: you moved the RootComWrapperFactory into that folder, which caused the folder coverage to drop because the file has less coverage than the previous folder coverage.
 
that'd make sense. what I am really frustrated is that codecov does not make it easy to see that fact
 
Also, please keep in mind that it compares against the PR base, not the current next.
Any new project with below average coverage, like Resources, will decrease the overall coverage unless it gets excluded in the configuration yaml.
 
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/3975?src=pr&el=h1) Report
> Merging [#3975](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/3975?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/85d75346282060886013aad30c4a93b5b304b8f5?src=pr&el=desc) will **decrease** coverage by `0.07%`.
> The diff coverage is `0%`.


```diff
@@ Coverage Diff @@
## next #3975 +/- ##
===========================
 
11:08 AM
Yeah, thanks for the reminder.
 
11:19 AM
[rubberduck-vba/Rubberduck] build for commit 3d0d0304 on unknown branch: AppVeyor build succeeded
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/3975?src=pr&el=h1) Report
> Merging [#3975](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/3975?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/85d75346282060886013aad30c4a93b5b304b8f5?src=pr&el=desc) will **decrease** coverage by `0.07%`.
> The diff coverage is `0%`.


```diff
@@ Coverage Diff @@
## next #3975 +/- ##
===========================
[rubberduck-vba/Rubberduck] build for commit 3d0d0304 on unknown branch: 53.62% (target 0%)
 
11:37 AM
> Installer needs to check for missing .NET 4.6 framework; otherwise it throws up a cryptic errors about missing method on System.Arryay.
 
12:07 PM
@SonGokussj4 It's certainly possible, but it adds a large element of things to do.
For example, the obvious way to track them is by module/line. But then you add a line.
It's not uncommon for todo's to have the exact same text (todo: fix me), so we can't rely on the hash.
 
12:19 PM
Exciting news! We’ve just gotten word that the show might be getting picked up by a sanitation worker along with the rest of the trash
 
@DainIronfootIII So maaaaaaybe in a long future :-) But the thing with line or the same text is true... I forgot about that :-) Thanks for the reaction though.
 
NP. It's crazy how many issues you can think of to delay development when you want.
Of course, you could always put the date in the comment for now.
 
Just like in real life :-D In the project I do now I have 42 TODOs... Thank god for ToDo Explorer and RD... I would be lost without it :-)
@DainIronfootIII Yeah, I've done that for some of them. It's working and really simple solution.
 
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/3975?src=pr&el=h1) Report
> Merging [#3975](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/3975?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/85d75346282060886013aad30c4a93b5b304b8f5?src=pr&el=desc) will **decrease** coverage by `0.07%`.
> The diff coverage is `0%`.


```diff
@@ Coverage Diff @@
## next #3975 +/- ##
===========================
 
Oh and I found a BUG. When I Indent procedure, it will delete the line under it if the line is blank. And add a line if it's not blank. :-D
 
12:26 PM
Nice catch.
 
12:40 PM
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/3975?src=pr&el=h1) Report
> Merging [#3975](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/3975?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/85d75346282060886013aad30c4a93b5b304b8f5?src=pr&el=desc) will **decrease** coverage by `0.07%`.
> The diff coverage is `0%`.


```diff
@@ Coverage Diff @@
## next #3975 +/- ##
===========================
[rubberduck-vba/Rubberduck] build for commit f211f426 on unknown branch: 53.61% (target 0%)
[rubberduck-vba/Rubberduck] build for commit f211f426 on unknown branch: AppVeyor build succeeded
> RD - Indent - Procedure

If another procedure under current procedure and there is a blank line between them then
> blank line deleted

If another procedure under current procedure and there is not a blank line between them then
> adds blank line

If another procedure not under current procedure and there is a blank line then
> everything is good

But if there is not a blank line
> adds a blank line

Video for better understanding :-)
https://i.imgur.com/nMyiceu.gif
 
2:00 PM
> Same as you. Okay, I didn't know about this. But that shouldn't remove the blank line if there is a single one, doesn't it? I think.

So. When I tried Vertial Spacing = 2, here's what happens.
From 2 blank lines it will remove the first one. On another run it will remove the second. As it is on video.
BUT when I try it for the third time, it will create not 1 blank line but 2.
 
@Duga that's not how it's supposed to work :)
 
:-) Figured.
 
2:24 PM
@Duga @mansellan / @MathieuGuindon just throwing it out -- if it doesn't feel justified to create separate implementations, it might be that Export is the wrong concept here? In this context, we are really interested in getting the attributes for the parse pass, after all.
 
that's the thing: it kinda does feel justified. The AttributesRewriter was written with a specific implementation of IVBE in mind, which means to adhere to OCP a new implementation should be written, against another IVBE implementation
 
even if the only difference boils down to just one method (Export)?
 
but it's only justified by SOLID principles; a pragmatic view rather says we can safely assume IVBE won't see another implementation anytime soon
 
the hairy reality view may barge in and say "can't do that cos that blows up VB6 so you gonna export temp anyway! You and your puny theories & principles! MWAHAHA!"
 
2:29 PM
the way I see it is that the Rewrite method needs to do ABC for VBA and XYZ for VB6
 
hmm. yeah. so it's not just one thing, I guess.
one more question just for my understanding - doesn't that also introduce a coupling?
 
that is, the implementation of a rewriter is now coupled to the implementation of IVBE?
 
it already was
otherwise we wouldn't be having this discussion :)
 
yeah thought so
 
2:31 PM
"hidden dependencies"
 
yeah, and that's even more evil
 
This discussion makes clear to me that there are circumstances where one shouldn't try to decouple but rather make the coupling (where it is required) explicit.
 
(mind, the less coupling, the better -- that doesn't change)
 
2:33 PM
it's basically like you have an IDbConnection interface, with a SqlConnection implementation and a MySqlConnection implementation
is SqlConnection coupled with SQL Server? absolutely!
does it matter? absolutely not!
 
but it's not just that.
 
well, we have an IModuleRewriter, and then a VbaModuleRewriter and a Vb6ModuleRewriter
 
from the IDbConnection, we could get (for example) IDataTable or IDataSet
does it mean we must implement SQLDataTable / MySQLDataTable ?
 
no
but you can if you need to
the IDbConnection becomes some kind of abstract factory for IDataSet
 
See, that's what I'm getting at. We would prefer to not have to write implementation for everything so if we can have IDataTable use some generic implementation that's always workable for various database engines but if there are implementation details that leaks through, then we must provide provider-specific implementation for IDataTable..... right?
 
2:39 PM
well that specific case is more complicated.. there's an IDataAdapter involved, that's where the implementation-specifics would be
 
right... datatable is just a data structure essentially
 
I have to say that I am a bit confused about this discussion: don't we just need an InPlaceExporter in addition to the exporter we already have?
 
we could... but then that one would just be no-op?
 
and the name would be confusing. InPlaceExporter exports by... not exporting.
 
Moreover, IIUC, so far, exporting happens via the Export member of IVbComponent, which has an implementation specific behaviour anyway.
 
2:45 PM
Correct and that method does not exist on a VB6's VBComponent
 
@mansellan don't extract the IVBE-specific rewriters just yet
 
@MathieuGuindon ok nw
still at work atm anyway
 
and IIRC, instead of Export, it has SaveAs method. In contrast, that method only exists on VBA's VBProject. (and doesn't work)
 
quite puzzling why they didn't implement Export functionality in the SaveAs method
 
@MathieuGuindon do you expect Microsoft to be consistent?
 
2:50 PM
Microsoft, MS, or MSFT?
 
Then, why not implement Export via SaveAs?
 
^ we could do that!!
(we didn't know about SaveAs until the VB6-IDE type library was wrapped)
 
sure then you'd end up with duplicate files because in VB6, you already have the file in the filesystem.
 
@this no, the other way around lol
 
?
 
2:51 PM
i.e. we remove the VBA-specific Export wrapper method and make our wrappers expose SaveAs instead
that way the interface is the same for both VBA and VB6
 
Just to get me on the same level (I never opened the VB6 editor), does it show attributes in its panes?
 
@MathieuGuindon I don't follow. You're just flipping the things around.
 
So, we have to write to the files, right?
 
2:53 PM
SaveAs doesn't exist on VBA component; only on VB6's. OTOH, Export exists only on VBA, but not on VB6.
@M.Doerner and the files are already there in the filesystem so you could just write to the same file in place, which is the goal of the PR
I don't know if SaveAs will throw an error if you target the same path
 
@this currently we have VBA.Export to export and VBA.SaveAs doesn't exist. then we have VB6.Export doing nothing and VB6.SaveAs doing what Export would do. the suggestion is to remove Export and move it to SaveAs, so VBA.SaveAs exports and VB6.SaveAs does what it does, and there's no need for an Export method anymore, and everyone has an implementation for SaveAs
 
Then Export would be something like GetFilename -> open the file and replace the content.
 
oh that's what you meant!
 
sorry for not expressing it right.
 
2:57 PM
meh, I'm just slow today
 
i was thinking that maybe it's just the Export that's the hypothetical battery on the duck.
 
so yeah, we could also express VB6's FileCount and FileNames[] properties in the VBA wrapper, so everything lines up completely
 
Now, I am completely confused. I thought this was about the attributes rewriter.
I.e. about writing the attributes, not about reading them.
 
is that rewriter even used anyway?
 
isn't the whole purpose of Export so that we can get the code w/ attributes for the attribute rewriter?
@MathieuGuindon even if not, we should be soon. ♪ AvalonEdit ♩
 
3:01 PM
hmm but the reason it was introduced in the first place, was for the doomed SynchronizeAttributesQuickFix
 
perhaps so but that won't change since we still need the original source code in order to rewrite any attributes we want into it.
 
okay the reason it was doomed was because it needed to make changes to both rewriters, and that is what we can't do
 
really I think this can be done w/o AvalonEdit. It's simply that it shouldn't be a "quickfix" but more like we should always push the rewritten file with our injected stuff
importing a new file every time is pretty quick.
 
we'd need the ModuleRewriter to be able to rewrite a module without trashing all attributes then
 
correct. it'd only insert/update what we ask to inject and leave all other attributes alone.
 
3:05 PM
also with the typelib api soon there won't be an "attributes pass" parse tree anymore
 
i thought of that but i'm not 100% clear if we already have all the attributes from type library alone?
 
not sure. in any case in order to bring the attributes into our avalon code panes we'll have to parse the "attributes pass" tokens anyway, so really it's the "code pane pass" that'll have to go
 
@WaynePhillipsEA can you confirm if type library will in fact expose all attributes? Or are there some exceptions (perhaps some VB specific attributes)?
yes, in the end, code pass pane should not needed. ATtributes should be the Gospel.
 
(also if there's a way to write to these attributes without blowing up, then it's all moot, we don't need a rewriter for it anymore)
 
that needs another set of API
 
3:09 PM
hm
 
no, maybe not API. More likely not possible.
must write to a file, then import it
 
yeah
so the typelib attributes aren't really needed then, since we'll have to parse the exported files anyway
 
there's ICreateTypeLib API but this isn't going to help us for VB stuff. The TypeLib stuff are always readonly
what typelib attribute can help us out is if the attribute got blown away, we can detect a mismatch
 
hmm
#want
 
so if we had @DefaultMember on a member, applied a rewriter (assuming code pass for now), which blows the VB_MemberID or whatever it was
we can see from the typelib that it's no longer default
export the file, inject the missing attribute, import, then reparse.
 
3:15 PM
but it's useless to implement a @DefaultMember annotation if we're going to end up with VB_Attribute UserMemId = 0 visible in the code panes anyway, no?
 
even if we weren't using the code pass rewriter, this would be still useful in case of flagrant user edits
depends on how long it'll take us to get to the AValonEdit vs. implementing this with what we have now.
 
I'd rather right-click the procedure and pick "Make this the class' default member" in some hypothetical Rubbereduck > Member Attributes menu, and have RD add the corresponding attribute values
 
if avalonedit is another year away..... seems much easier to implement the one-way write approach described.
 
and then trash it?
 
eventually all code get trashed. :p
 
3:17 PM
you know, ...you're right.
 
it's simply more about being pragamatic at getting problems solved.
BTW, I like the idea of right-click menu
that however won't tell you if it's mismatched
 
no but an inspection could :)
 
didn't we just go a full circle? :) If we're back to inspecting using typelib, we now can implement the annotations sanely.
 
hi. ITypeLib doesn't expose everything. it exposes everything important from a COM perspective. One attribute that comes to mind is VB_ProcData. That's not accessible from ITypeLib, as it is an internal VB thing
 
hm. never heard of that attribute.
 
3:19 PM
it's for shortcut keys or something. never used it myself
 
@this really? that's so surprising - attributes are so well documented! </sarcasm>
 
there's probably others that are just outside of the 'typelib' realm
 
(it's really annoying they didn't really bother documenting all VB attributes. At least I never found a real comprehensive list; all other source I found are basically guessing basing on observations)
@MathieuGuindon LOL
 
but... interestingly I know that some of the TypeLib API undocumented members DO update attributes
like Description, helpfile etc
 
Yeah makes sense. VB is bigger than just COM. For those attributes, I think we just need to basically ignore (but preserve) while using typelib API for checking the more important attributes.
 
3:21 PM
@WaynePhillipsEA ha, correct
Sub Macro1()
Attribute Macro1.VB_ProcData.VB_Invoke_Func = "A\n14"
^ macro-recorder
 
yeah that's the one
 
@WaynePhillipsEA hmm probably that's how OB lets us do that....
 
@this yes, probably
 
but IINM, it's only those 2 things. We are usually more interested in dispid and preclaredid, both which are exposed in lib API, AIUI
 
yes they are
 
3:23 PM
not sure about the globalnamespace/instancing.
 
i think they are too
 
yeah, that's the important attributes we usually want to tweak. For "ProcData".... bully to them, i say.
 
@this the VBE's properties toolwindow writes there, so there's gotta be a way :)
 
yeah that's what I was thinking of
 
@this would make assigning keyboard shortcuts to macros quite easy though...
 
3:26 PM
basically, most attributes you should find directly in the ITypeInfo. For anything else, we can probably find one of the undocumented members of the TypeLib API to access it.
 
@MathieuGuindon IDK if we parse it properly but if we do, then sure. It's only an implementation away.
@WaynePhillipsEA given that we'd have to read the source file w/ attributes, seems safer to use that as the source than trying to use undocumented method. We can stick to the documented stuff for comparing the state to handle cases where users may have accidentally blown away the customized attributes. (without having to re-export to find out)
 
our parser is probably picking it up as a member attribute named VB_ProcData.VB_InvokeFunc with a value of "A\n14", and then we're not doing anything with it
 
k
but then we have no way of knowing if it's in sync using documented typelib methods.
 
@this OTOH if we can write to attributes without exporting, then we don't need to have attributes in the code pane
 
@this sure, there's a few viable methods open to you. let me know if you need any help guys. gtg
 
4:22 PM
so, uh, what do I need to do on my PR ;-) ?
 
@mansellan nothing :)
 
[rubberduck-vba/Rubberduck] mansellan pushed commit 3ff0d4f7 to next: Closes #3994
[rubberduck-vba/Rubberduck] mansellan pushed commit c75ae906 to next: Merge branch 'next' of github.com/rubberduck-vba/Rubberduck into 3994
[rubberduck-vba/Rubberduck] mansellan pushed commit 1f3c3641 to next: Fixed off-by-1 error
Merge pull request #4015 from mansellan/3994

VB6 - rewrite files in-place
 
worst-case we've got a bit of cleanup to do... eventually
in the mean time I think it's good-enough; as I said breaking OCP here isn't much of a problem anyway, unless we're planning to extend support to yet-unknown IVBE implementations
 
@MathieuGuindon What other options are there?
Can there be any other option other than hosted/standalone?
 
no, but the point was that the enum is essentially masquarading a type check
in other news, my SO rep is now overflowing Int16 =)
 
4:43 PM
@MathieuGuindon lol
 
@DainIronfootIII sure, we could write our own IDE :-)
 
[rubberduck-vba/Rubberduck] build for commit 024eecde on next: 53.81% (target 0%)
 
That would probably a standalone one, no?
 
yep good point
 
4:44 PM
unless we figure how to intercept all the IStream calls from the host....
 
@this That would have a very hard time being host agnostic, no?
But either way, it's still either standalone or hosted.
 
I wouldn't want to anyway.
 
I don't see any option other than those two, so...
 
@DainIronfootIII again the concept is really just a work-around to avoid a hard dependency on the IVBE implementations and an explicit type check
 
Yes, I know.
Except, at the end of the day, no matter how many VBE's there are, they will be standalone or hosted.
 
4:54 PM
But, "good enough" IMO
 
hm. and sint' taht already exposed as an enum at the VBProject level?
 
@MathieuGuindon In C#, can you catch an exception and throw another exception with the previous exception included as the "root cause" for the new exception? If so, is that common practice?
(This is how Java would do it)
 
yeah it is --- vbide.vbext_ProjectType -- only 2 enum values; either hosted or standalone.
 
@this that's not quite the same I think - that relates to the project output. 2000 and XP office had developer editions that could compile standalones for COM add-ins etc
@SimonForsberg yes you can, and yes it is.
 
@mansellan Seriously? That's totally news to me.
would have been so convenient to be able to build a library from VBA alone.... :(
 
5:00 PM
yep, found that on my travels through the VBExt lib
 
the other approaches involving referencing another Office document file are.... blargh.
i guess that explains why we have SaveAs and FilePath in VBIDE at VBProject level, though.
that always puzzled me why they bothered exposing it at all.
 
its exactly for that yes
 
so why in the hell did they discontinue it then
 
@SimonForsberg you've described the concept of an InnerException :)
 
@MathieuGuindon In Java this is a feature of all exceptions.
 
5:04 PM
well InnerException is a member of System.Exception, so in C# as well
except your custom exceptions don't have to expose a constructor that takes an Exception
 
@this wanted to push VSTO maybe? not sure on timelines...
 
@MathieuGuindon Same in Java
 
prolly that's it .net was starting up around the time.
sigh. they so royally screwed this up
 
5:35 PM
So for a brief once-upon-a-time you could make a COM add-in from VBA?
 
with Office 2000 Developer Edition, I suppose
 
Interesting.
 
Microsoft has a long history of starting up something cool then dropping it like a hot potato
 
I wonder how that might have changed VBA over the long term.
 
I don't think by that much. The real failure is with them consistently failing to provide a meaningful migration path that didn't involve scrapping everything and starting all over.
 
5:50 PM
c.f. Silverlight...
 
and sadly, it's not just Silverlight. There's plenty of other debris that MSFT has seen fit to litter the landscape.
it's as if they have intense paranoia with version 2.0. NOOO! We must have a perfect version 1.0! REDO!!!
 
you are right. It compiles but gives unexpected results. Exports the sheets in my tool not the workbook containing 50 sheets. I am unable to install your plugin because of restrictions placed by company on installations. — Majid 5 mins ago
damn how locked-down can things be
 
@MathieuGuindon last bank I worked at, it took ~6 MONTHS to get an open source tool approved. Per version.
 
They mandate he must navigate via keyboard.
 
6:30 PM
@MathieuGuindon hm not clear if he tried user install....
 
good catch
@Majid FYI if it's any relevant or helpful, the installer doesn't require administrator privileges and can install per-user. Don't install it under-the-radar against company policies, but know that if the restrictions are about admin privs then v2.2 (latest, and subsequent 2.2.x pre-release builds) can be installed without worrying about that. — Mathieu Guindon 10 secs ago
 
@MathieuGuindon They can lock it down so you can't install anything.
 
@DainIronfootIII that's what I want to find out
e.g. how common this situation actually is
I also would think it'd make for a maintenance nightmare. The more you lock down things, the greater the IT burden becomes, and you just end up with a shadow IT.
 
6:46 PM
^
 
We did/do some work for a department in big-name companies exactly for that reason.
and of course, the conversations w/ the IT people from those environment always are pleasant.
WHAT DID YOU DO TO MY PRECIOUS NETWORK?!?!? YOU FILTHY HOBBITESES!
@MathieuGuindon it may be time to clean up all the pre-releases pre-2.2, btw....
 
00:00 - 19:0019:00 - 00:00

« first day (1441 days earlier)      last day (1739 days later) »