如何从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
如果有人想运行一个用户表单“一样”一个独立的应用程序:
我正面临的问题:
- 我不想使用Workbook_Open事件,因为excel被locking在只读状态。
- 批处理命令是有限的,(据我所知),它不能调用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