ちょっと変えたのでコピペお願いします。
③の選択の仕方は図を見てください。
④で最後エンターを押しているのでもう一度コマンドを実行しています。
④で縦のTEXTを選択した後、横のTEXTを選択するダイアログが出るはずです。
横のTEXTを選択した後、コマンドラインに印刷するかどうかのメッセージが選択した行数分出ます。
これは確認のためのものでTEXTが変わったかどうか確認するためのもので、
印刷のコマンドラインがわかればこの部分はコメントアウトしても良いです。
TEXTと書いたのはTEXTオブジェクトで寸法オブジェクトでは駄目です、単なる一行TEXTを選択してください。
;----------------ここからコピペ---------------------------------
;zukki-作
(vl-load-com)
(defun c:tateyoko nil
(setq xlapp (vlax-create-object "Excel.Application"))
;(vlax-dump-object xlapp t)
(vlax-put xlapp 'visible t)
(setq fn (vlax-invoke xlapp 'getopenfilename "Microsoft Excelブック,*.xls?"))
(if (= fn 0)
(exit))
(vlax-invoke (vlax-get xlapp 'workbooks) 'open fn)
(setq rng (vlax-invoke xlapp 'inputbox
"貼り付けるテキストの縦横セルを選択"
nil nil
nil nil
nil nil
8))
(if (= rng 0)
(exit))
;rngから縦横をを取り出す
(setq dimlis nil)
(vlax-for tmp rng
(setq dimlis (cons (vlax-get tmp 'text) dimlis)))
(setq dimlis (reverse dimlis))
;;; (setq i 0)
;;; (repeat (vlax-get rng 'count)
;;; (vla-item rng i)
;;; (setq i (1+ i)))
(vlax-invoke xlapp 'quit)
(vlax-release-object rng)
(vlax-release-object xlapp)
(setq rng nil
xlapp nil)
;(縦 . 横)のリストにする
(setq tmp dimlis
dimlis nil)
(while tmp
(setq dimlis (cons (cons (car tmp) (cadr tmp))
dimlis))
(setq tmp (cddr tmp)))
(setq dimlis (reverse dimlis))
(alert "縦のTEXTを選択")
(setq tate (ssname (ssget ":S" '((0 . "TEXT"))) 0))
(alert "横のTEXTを選択")
(setq yoko (ssname (ssget ":S" '((0 . "TEXT"))) 0))
(mapcar '(lambda (arg)
(entmod (subst (cons 1 (car arg)) (assoc 1 (entget tate)) (entget tate)))
(entupd (cdr (assoc -1 (entget tate))))
(entmod (subst (cons 1 (cdr arg)) (assoc 1 (entget yoko)) (entget yoko)))
(entupd (cdr (assoc -1 (entget yoko))))
;(command "regen")
(initget (+ 1) "Yes No")
(getstring "印刷します? [Yes/No]:")
;印刷の処理
)
dimlis)
(princ)
)
;defun
(princ "\nc:tateyokoがロードされました。")
- zukki-
- 2017/02/07 (Tue) 08:24:57