Пишу с телефона, поэтому минимум форматирования
Давненько уже принял за правило нечто типа:
(setq lst '(1 2 3 ... n))
(setq safe (vlax-make-safearray vlax-vbdouble (cons 0 (1- (length lst))))) ;; Основной момент
(setq safe-fill (vlax-safearray-fill safe lst))
(setq var (vlax-make-variant safe-fill))
Прошу прощения за отвратительный вариант форматирования. Код написан только в качестве примера, в реальной жизни такого количества присвоений, конечно, нет.
P.S. К сожалению, форум на arcada.com.ua закрылся, а там (если я правильно помню) было интересное обсуждение касаемо нижней границы безопасного массива.