With a BIG PROVISO [see below], try this, which uses a different approach [just a Scale command, which means there's no need to calculate what the new XY scale factors should be, and if there's a Z component, also changes that accordingly], and also lets you select as many as you want at once, not one at a time:
(defun C:SBXS ; = Scale Blocks to same X-direction Size
(/ xs2 ss n blk xs1)
(if
(and
(setq xs2 (getdist "\nSize in X direction <exit>: "))
(setq ss (ssget '((0 . "INSERT"))))
); and
(repeat (setq n (sslength ss)); then
(setq blk (ssname ss (setq n (1- n))))
(vla-getboundingbox (vlax-ename->vla-object blk) 'minpt 'maxpt)
(setq xs1 (- (car (vlax-safearray->list maxpt)) (car (vlax-safearray->list minpt))))
(command "_.scale" blk "" "_non" (cdr (assoc 10 (entget blk))) (/ xs2 xs1))
); repeat
); if
(princ)
); defun
The BIG PROVISO is that you need to do something about your Block definitions. Both @ВeekeeCZ 's suggestion and mine depend on the bounding boxes of the Blocks. But those are wacky, much larger than the drawn content of the Blocks [hugely larger in some cases]. Here are some of them with their [white] bounding boxes drawn around them and the bounding boxes all the same width [I used the routine to scale them for that same width, and another routine I have to draw the bounding boxes around the results]:

The second and fourth are some of your green arrow things [almost invisibly small in the middle], and the third is the thing with the two yellow triangles [the actual content is invisibly small down along the bottom edge].
I haven't dug in to figure out why their bounding boxes are so much bigger than they themselves are, but you'll need to fix that for either of our routines to work as you expect.
Kent Cooper, AIA