You can write mini-programs in the Immediate window but you'll need to change how you write code. If you want a VBA code challenge this morning this will challenge you.
So a Stack Overflow answer to this question is due to be awarded a bounty. The prize winning answer doesn't actually solve the question which is how to print a two dimensional array to the Immediate window; instead, the answer highlights the Locals window (it's a favorite of mine as well). Nevertheless this question and its answers caught my attention and amongst them was a mini-program meant to be run entirely from the Immediate window, the code and output is show below.
arr = [ {"A",1; "B",2; "C",3 } ]: _
For r = LBound(arr, 1) To UBound(arr, 1): _
For c = LBound(arr, 2) To UBound(arr, 2): _
Debug.Print arr(r, c): _
Next c: _
Next
A
1
B
2
C
3
I have seen code for the Immediate window before and wondered 'Why bother?' when you can write a small function and so didn't register the pattern and syntax required but today for whatever reason I embraced this syntax.
I wasn't happy with the output of the given code and wanted to amend it and then I hit the syntactical challenges therein. A small list of bullet points is appropriate here.
- You can't use Dim statements; so write code as if Option Explicit is commented out
- You can't use a For statement with a Next statement so you are obliged to use multi-line statements
- If statements cannot be multi-line version they must be single line version. I.e. Don't use End If
- Feel free to use VBA.IIf instead of an If statement.
So I successfully amended the code to give output with which I'm happy.
arr = [ {"A",1; "B",2; "C",3 } ]: _
sAcc = "": _
For r = LBound(arr, 1) To UBound(arr, 1): _
For c = LBound(arr, 2) To UBound(arr, 2): _
bRowEnd = (c = UBound(arr, 2)): _
sAcc = sAcc & CStr(arr(r, c)) & VBA.IIf(bRowEnd, ";" & vbNewLine, ","): _
Next c: _
Next r: _
Debug.Print sAcc
A,1;
B,2;
C,3;
Be mindful that your variables in the 'ether' of the Immediate window will hang around until either (a) you suffer a state loss or (b) you type End which deliberately causes a variables wipedown. This is why I clear down sAcc at the start of the mini-program, otherwise repeated execution makes it build up.
You can instantiate classes in the Immediate window but the Intellisense didn't work (Intellisense did work for standard modules).
This is all a long way from Python's REPL I must say. If you any comments, suggestions or tips for working with the Immediate window do please drop me a line below.
No comments:
Post a Comment