・ VBAのパートタイム利用
・ 文字列の変換
・ 日付文字列から曜日を取得
LispやActiveXの関数にはないけれど、VBAで簡単にできること。
たとえば、文字の変換、乱数の取得、時間の計算など。
これらはVBASTMTコマンドで Lisp から VBA
をパートタイムで利用することによって比較的簡単に実現できます。
値の引渡しには、ユーザー変数 USERS1〜5 を利用します。
初回の実行時に VBAシステムの初期化 に時間がかかるのが難点
次のは、文字列の変換(StrConv)のサンプルです。
(defun Jof_vb_StrConv (str_org ;変換対象文字列;
mode ;変換形式(VBAのStrConvに準ずる)整数;
; 1:大文字に変換;
; 2:小文字に変換;
; 3:単語の先頭を大文字に変換;
; 4:半角文字を全角文字に変換;
; 8:全角文字を半角文字に変換;
; 16:ひらがなをカタカナに変換;
; 32:カタカナをひらがなに変換;
/ usrs5_def usrs4_def str_com str_ret)
(setq usrs5_def (getvar "USERS5"))
(setq usrs4_def (getvar "USERS4"))
(setvar "USERS5" str_org)
(setvar "USERS4" (itoa mode))
(setq str_com "ThisDrawing.SetVariable \"USERS5\" , StrConv((ThisDrawing.GetVariable (\"USERS5\")) , (ThisDrawing.GetVariable (\"USERS4\")))")
(command "VBASTMT" str_com)
(setq str_ret (getvar "USERS5"))
(setvar "USERS5" usrs5_def)
(setvar "USERS4" usrs4_def)
str_ret
)
実行結果
コマンド: (load "Jof_vb_strconv")
JOF_VB_STRCONV
コマンド: (jof_vb_strconv "あいうエ緒" 16)
VBASTMT VBA システムを初期化中...
VBASTMT
式: ThisDrawing.SetVariable "USERS5" , StrConv((ThisDrawing.GetVariable
("USERS5")) , (ThisDrawing.GetVariable ("USERS4")))
コマンド: "アイウエ緒"
コマンド: (jof_vb_strconv "あいうエ緒" 32)
VBASTMT
式: ThisDrawing.SetVariable "USERS5" , StrConv((ThisDrawing.GetVariable
("USERS5")) , (ThisDrawing.GetVariable ("USERS4")))
コマンド: "あいうえ緒"
コマンド: 'VLIDE
コマンド:
次のは、曜日の取得(WeekdayName)のサンプルです。
(defun Jof_vb_WeekdayName (str_data ;日付文字列; / usrs5_def str_com str_ret) (setq usrs5_def (getvar "USERS5")) (setvar "USERS5" str_data) (setq str_com "ThisDrawing.SetVariable \"USERS5\" , WeekdayName (Weekday (ThisDrawing.GetVariable (\"USERS5\")))") (command "VBASTMT" str_com) (setq str_ret (getvar "USERS5")) (setvar "USERS5" usrs5_def) str_ret )
実行結果
コマンド: (load "Jof_vb_weekdayname")
JOF_VB_WEEKDAYNAME
コマンド: (jof_vb_weekdayname "2000/01/01")
VBASTMT
式: ThisDrawing.SetVariable "USERS5" , WeekdayName (Weekday
(ThisDrawing.GetVariable ("USERS5")))
コマンド: "土曜日"