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

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

本帖最后由 mccad 于 2003-4-4 12:10:22 编辑

我是一个新手,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

关于VBA程序在命令行中的加载及运行,一句话说不清楚

可以说,不利用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源代码的,谢谢您了

mccad 发表于 2003-4-4 18:52:00

找不到宏主要是你的工程没有放到支持目录下,如果这样必须加上完整路径

myfreemind 发表于 2003-4-12 20:38:00

我感觉还是autovbaload简单!

页: [1]
查看完整版本: 请问怎么才能在命令行里输函数名或过程名就能动行VBA程序