如何从batch file只打开Excelmacros的用户窗体

我试图通过batch file打开Excelmacros的UserForm1。 我可以打开,但Excel也随着打开。 我只想用户窗体1打开不是Excel。 以下是我的做法:

我写了一个macros来打开UserForm1

Sub open_form() UserForm1.Show End Sub 

batch file:

 @echo off cd "c:\Test\" openFormTest.xlsm 

通过上面的方法,当我运行batch file时,UserForm1和Excel都打开,但我只想打开UserForm1。 请帮助我

您需要以modeless模式模式显示UserForm ,然后隐藏应用程序。

尝试这个

 Sub open_form() Application.Visible = False UserForm1.Show vbModeless End Sub 

并在一个button中,您需要将其设置为true,或者您可以使用UserForm_QueryClose事件

 Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) Application.Visible = True ThisWorkbook.Close SaveChanges:=False End Sub 

有几个原因(比如在Application.Visible被重置为True之前,未处理的exception崩溃),这样做不是一个好主意,但是我假设你已经考虑了这些:

 Private Sub UserForm_Initialize() Application.Visible = False End Sub Private Sub UserForm_Terminate() Application.Visible = True End Sub Private Sub Workbook_Open() UserForm1.Show vbModeless End Sub 

如果有人想运行一个用户表单“一样”一个独立的应用程序:

我正面临的问题:

  1. 我不想使用Workbook_Open事件,因为excel被locking在只读状态。
  2. 批处理命令是有限的,(据我所知),它不能调用macros。

我首先写了一个macros来启动我的用户表单,同时隐藏应用程序(基于上面的注释):

 Sub open_form() Application.Visible = False frmAddClient.Show vbModeless End Sub 

然后我创build了一个vbs来启动这个macros(用相对path做这件事一直很棘手):

 dim fso dim curDir dim WinScriptHost set fso = CreateObject("Scripting.FileSystemObject") curDir = fso.GetAbsolutePathName(".") set fso = nothing Set xlObj = CreateObject("Excel.application") xlObj.Workbooks.Open curDir & "\Excels\CLIENTES.xlsb" xlObj.Run "open_form" 

我终于做了一个batch file来执行VBS …

 @echo off pushd %~dp0 cscript Add_Client.vbs 

请注意,我还在我的Userform_QueryClose包含了“设置回可见”

 Private Sub cmdClose_Click() Unload Me End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) ThisWorkbook.Close SaveChanges:=True Application.Visible = True Application.Quit End Sub