Just so you know.
VB Code:
  1. Dim pofsuccess As Double
  2. Dim nfactorial, kfactorial, lfactorial, mfactorial As Integer
  3. Dim p, q, r As Single
  4. Dim dicerolled, successes, botches, failures As Variant
In the above declarations what you are really doing is probably not what you think you're doing.

pofsuccess = double
nfactorial = variant
kfractorial = variant
lfactrorial = variant
mfactorial = integer

In VB you have to decalare the type of EVERY variable or it will be a variant

Dim x, y , z as integer

x = variant
y = variant
z = integer

This...
Dim x as integer, y as integer, z as integer

or this...

Dim X as integer
dim Y as integer
dim Z as integer

will make them all integers