zgyxn 发表于 2003-4-4 12:10:00

请问怎么才能在命令行里输函数名或过程名就能动行VBA程序

我是一个新手,VB还可以,对VBA不太在行,我发觉你们可以直接在
COMMAND:   中运行VBA工程,我就是不行,我每次用都是先进入VBA界面,然后按F5运行,可是这样很,能告诉我怎么才能在命令行里输函数名或过程名就能动行VBA程序吗,下面是个例子:
Public Sub a1()
Dim aa As Integer
aa = MsgBox("fals;jkdf;alksd", vbInformation, "jfkladsjdl;")
End Sub

mccad 发表于 2003-4-2 22:28:00

可以说,不利用LISP程序页直接在命令行中简单加载运行VBA程序的可能性是没有的。
通过一个简短的LISP程序来加载运行是最简单的,方法有以下几种:
(例中假设VBA工程为:addtol.dvb,模块为:mouldaddtol,过程为:subaddtol
1.定义并使用-vbarun来运行:如
(defun c:addtol()
    (setvar "cmdecho" 0)
    (command "-vbarun" "addtol.dvb!mouldaddtol.subaddtol")
    (setvar "cmdecho" 1)
(princ)
)
2.通过定义使用vl-vbaload和VL-VBARUN函数来运行,如:
(vl-vbaload (findfile "AddTol.dvb"))
(defun c:addtol()
    (setvar "cmdecho" 0)
;      (vl-vbarun "mouldaddtol.subaddtol")
(princ)
)
3.通过自定义的加载函数及相关词句来完成,如:
(vl-load-com)
;;自动加载VBA程序的函数
(defun AutoVBALoad (cmdname project macro)
(eval
    (list 'defun
          (read (strcat "C:" cmdname))
          nil
          (list
            'vl-vbarun
            (strcat
            project
            "!"
            (if macro
                macro
                cmdname
            )
            )
          )
          (princ)
    )
)
)
;;自动加载VBA程序
(AutoVBALoad "AD" "addtol.dvb" "mouldaddtol.subaddtol")
4.还有一种就是通过VBA中的事件结合定义一个空的LISP程序来完成,如:
;;一些VBA程序的触发程序(LISP程序)
(defun c:ad()(princ))
'VBA事件:
Private Sub AcadDocument_BeginLisp(ByVal FirstLine As String)
Select Case UCase(FirstLine)
       Case "(C:AD)"
             subaddtol
End Select
End Sub
这四种方法都是要通过LISP程序来辅助完成,你看哪种简单一点。

zgyxn 发表于 2003-4-4 18:37:00

可能我太笨了,用你的方法老是说找不到宏,能不能给我一个例子,我好依样而为,最好是有VBA源代码的,谢谢您了
页: [1]
查看完整版本: 请问怎么才能在命令行里输函数名或过程名就能动行VBA程序