As I've mentioned far too many times, I often find myself on the edge of Visio functionality, and today I fell off another edge. Did you know that the shapesheet function OR has a limit to the number of arguments it accepts? Well, I didn't; but I found out today. It's 128.
But it gets worse, because Visio doesn't tell you when you've hit the limit. If you have an OR with 129 arguments, when you hit the Enter key it only keeps the last argument
How rude.
Here's what my VBA was trying to add to the document's shapesheet's User cell...
IF(OR(FALSE,STRSAME(User.Set,User.84__DataColor),STRSAME(User.Set,User.58__DataColor),STRSAME(User.Set,User.56__DataColor),STRSAME(User.Set,User.4__DataColor),STRSAME(User.Set,User.49__DataColor),STRSAME(User.Set,User.48__DataColor),STRSAME(User.Set,User.29__DataColor),STRSAME(User.Set,User.25__DataColor),STRSAME(User.Set,User.90__DataColor),STRSAME(User.Set,User.82__DataColor),STRSAME(User.Set,User.81__DataColor),STRSAME(User.Set,User.80__DataColor),STRSAME(User.Set,User.79__DataColor),STRSAME(User.Set,User.78__DataColor),STRSAME(User.Set,User.77__DataColor),STRSAME(User.Set,User.73__DataColor),STRSAME(User.Set,User.72__DataColor),STRSAME(User.Set,User.70__DataColor),STRSAME(User.Set,User.69__DataColor),STRSAME(User.Set,User.68__DataColor),STRSAME(User.Set,User.67__DataColor),STRSAME(User.Set,User.30__DataColor),STRSAME(User.Set,User.26__DataColor),STRSAME(User.Set,User.89__DataColor),STRSAME(User.Set,User.88__DataColor),STRSAME(User.Set,User.87__DataColor),STRSAME(User.Set,User.86__DataColor),STRSAME(User.Set,User.85__DataColor),STRSAME(User.Set,User.76__DataColor),STRSAME(User.Set,User.75__DataColor),STRSAME(User.Set,User.74__DataColor),STRSAME(User.Set,User.66__DataColor),STRSAME(User.Set,User.65__DataColor),STRSAME(User.Set,User.64__DataColor),STRSAME(User.Set,User.63__DataColor),STRSAME(User.Set,User.62__DataColor),STRSAME(User.Set,User.61__DataColor),STRSAME(User.Set,User.60__DataColor),STRSAME(User.Set,User.59__DataColor),STRSAME(User.Set,User.55__DataColor),STRSAME(User.Set,User.50__DataColor),STRSAME(User.Set,User.47__DataColor),STRSAME(User.Set,User.40__DataColor),STRSAME(User.Set,User.37__DataColor),STRSAME(User.Set,User.36__DataColor),STRSAME(User.Set,User.97__DataColor),STRSAME(User.Set,User.96__DataColor),STRSAME(User.Set,User.95__DataColor),STRSAME(User.Set,User.71__DataColor),STRSAME(User.Set,User.54__DataColor),STRSAME(User.Set,User.43__DataColor),STRSAME(User.Set,User.42__DataColor),STRSAME(User.Set,User.35__DataColor),STRSAME(User.Set,User.34__DataColor),STRSAME(User.Set,User.24__DataColor),STRSAME(User.Set,User.94__DataColor),STRSAME(User.Set,User.93__DataColor),STRSAME(User.Set,User.92__DataColor),STRSAME(User.Set,User.91__DataColor),STRSAME(User.Set,User.83__DataColor),STRSAME(User.Set,User.81__DataColor),STRSAME(User.Set,User.80__DataColor),STRSAME(User.Set,User.79__DataColor),STRSAME(User.Set,User.78__DataColor),STRSAME(User.Set,User.77__DataColor),STRSAME(User.Set,User.73__DataColor),STRSAME(User.Set,User.72__DataColor),STRSAME(User.Set,User.70__DataColor),STRSAME(User.Set,User.69__DataColor),STRSAME(User.Set,User.68__DataColor),STRSAME(User.Set,User.67__DataColor),STRSAME(User.Set,User.30__DataColor),STRSAME(User.Set,User.26__DataColor),STRSAME(User.Set,User.89__DataColor),STRSAME(User.Set,User.88__DataColor),STRSAME(User.Set,User.87__DataColor),STRSAME(User.Set,User.86__DataColor),STRSAME(User.Set,User.85__DataColor),STRSAME(User.Set,User.76__DataColor),STRSAME(User.Set,User.75__DataColor),STRSAME(User.Set,User.74__DataColor),STRSAME(User.Set,User.66__DataColor),STRSAME(User.Set,User.65__DataColor),STRSAME(User.Set,User.64__DataColor),STRSAME(User.Set,User.63__DataColor),STRSAME(User.Set,User.62__DataColor),STRSAME(User.Set,User.61__DataColor),STRSAME(User.Set,User.60__DataColor),STRSAME(User.Set,User.59__DataColor),STRSAME(User.Set,User.55__DataColor),STRSAME(User.Set,User.50__DataColor),STRSAME(User.Set,User.47__DataColor),STRSAME(User.Set,User.40__DataColor),STRSAME(User.Set,User.37__DataColor),STRSAME(User.Set,User.36__DataColor),STRSAME(User.Set,User.97__DataColor),STRSAME(User.Set,User.96__DataColor),STRSAME(User.Set,User.95__DataColor),STRSAME(User.Set,User.71__DataColor),STRSAME(User.Set,User.54__DataColor),STRSAME(User.Set,User.43__DataColor),STRSAME(User.Set,User.42__DataColor),STRSAME(User.Set,User.35__DataColor),STRSAME(User.Set,User.34__DataColor),STRSAME(User.Set,User.24__DataColor),STRSAME(User.Set,User.94__DataColor),STRSAME(User.Set,User.55__DataColor),STRSAME(User.Set,User.50__DataColor),STRSAME(User.Set,User.47__DataColor),STRSAME(User.Set,User.40__DataColor),STRSAME(User.Set,User.37__DataColor),STRSAME(User.Set,User.36__DataColor),STRSAME(User.Set,User.97__DataColor),STRSAME(User.Set,User.96__DataColor),STRSAME(User.Set,User.95__DataColor),STRSAME(User.Set,User.71__DataColor),STRSAME(User.Set,User.54__DataColor),STRSAME(User.Set,User.43__DataColor),STRSAME(User.Set,User.42__DataColor),STRSAME(User.Set,User.35__DataColor),STRSAME(User.Set,User.34__DataColor),STRSAME(User.Set,User.24__DataColor),STRSAME(User.Set,User.94__DataColor),STRSAME(User.Set,User.93__DataColor),STRSAME(User.Set,User.92__DataColor),STRSAME(User.Set,User.91__DataColor),STRSAME(User.Set,User.83__DataColor),STRSAME(User.Set,User.33__DataColor)),User.Set,User.Reset)
...and when you hit the Enter key, here's what Visio actually put into the User cell...
It only kept the last argument! And no error!! Fortunately, you can nest the ORs so I could replace groups of arguments, such as...
...with...
...and that works as expected. I assume each nested OR can have its own 128 arguments, meaning I can have 16,384 total arguments, then nest the nests 128 times. But it's a pain to code because I need to count how many arguments I have before I can add another. To repeat: How rude! But at least I have a solution.
I assume the same problem exists with many other similar functions, like AND. I didn't test that; I figure I'll wait until the next time Visio bites me again when I dance too close to the edge. I should've followed
from years ago.
I'm using Visio 2013 Professional, by the way. Your mileage may vary.