It didn't occur to me that running as admin could be the issue, so I wasn't much help there, but perhaps this is of use to you:
scroll [up;down] [1..4,5]
Begin Text Compare : [{CMD}] Contains 'up'
Start Loop : Repeat [{TXTNUM:"{CMD}"}] Times
Scroll mouse wheel forward 1 click
Pause 0.01 seconds
End Loop
Else
Start Loop : Repeat [{TXTNUM:"{CMD}"}] Times
Scroll mouse wheel backward 1 click
Pause 0.01 seconds
End Loop
End Condition
It uses some of VoiceAttack's more advanced features like dynamic command sections, conditions, (nested)tokens, and for loops:
"[up;down]" means either "up" or "down" can be spoken as part of the command phrase, and the command will be recognized.
"[1..4,5]" in the command name will be extrapolated by VoiceAttack into 5, 10, 15, and 20, meaning any of those numbers can be spoken as part of the command phrase and be recognized.
If you want finer control or a wider range you can change or remove the multiplier(E.G. "[1..20]" will allow you to speak any number between 1 and 20), or manually specify the numbers(E.G. "[5;10;20]). You can also combine both options(E.G. "[1..4;1..4,5]" to allow 1, 2, 3, 4, 5, 10, 15, and 20).
See the "Dynamic command sections" section on page 17 of VoiceAttackHelp.pdf for more information on both of the above and other applications of dynamic command sections.
The "{CMD}" token will be substituted with the command phrase that was recognized(E.G. "scroll down 10"), whereas the "{TXTNUM:}" token will be replaced with any numbers filtered from the input, which in this case is '"{CMD}"'(E.G. "scroll down 10" would return "10"); Note the double quotes around the "{CMD}" token used as input, which are used to indicate literal input rather than a variable name.
See the "Text (and Text-To-Speech) Tokens" section on page 115 of VoiceAttackHelp.pdf for more information on tokens and their utility.
The condition will check whether the spoken command phrase contains "up", and either execute the first block of actions(from "Begin" to "Else") and ignore the second if it does, or ignore the first block and execute the second(from "Else" to "End" if it doesn't.
See the "'Begin a Conditional (If Statement) Block'" and subsequent sections starting on page 53 for more information on conditions and their various branching options. Also have a look at the "Using the Condition Builder" section on page 106 of VoiceAttackHelp.pdf for even more advanced options.
The For loop will repeat anything between its "Start Loop" and "End Loop" actions a given number of times.
As it is given the nested "{TXTNUM:"{CMD}"}" tokens as input, this number is filtered from the spoken command.
Loops are covered as a continuation of the conditions section, starting with the "'Add a Loop Start'" section on page 60 of VoiceAttackHelp.pdf
Delays are set to Gary's proposed 10ms, but can of course be tweaked or removed depending on your own findings.
I've attached a .vap containing the command which you can import into your own profile, if you're interested.