如何从批处理文件中仅打开Excel宏的UserForm

Sam*_*aan 6 excel vba batch-file excel-vba

我正在尝试通过批处理文件打开excel宏的UserForm1.我能够打开它,但excel也随之打开.我只想打开UserForm1而不是excel.以下是我的方法:

我写了一个宏来打开UserForm1

Sub open_form()
   UserForm1.Show
End Sub
Run Code Online (Sandbox Code Playgroud)

在批处理文件中:

@echo off
cd "c:\Test\"
openFormTest.xlsm
Run Code Online (Sandbox Code Playgroud)

通过上面的方法,当我运行批处理文件时,UserForm1和excel都打开了,但我想只打开UserForm1.请帮助我

Sid*_*out 12

您需要显示UserFormin modeless模式,然后隐藏应用程序.

试试这个

Sub open_form()
    Application.Visible = False
    UserForm1.Show vbModeless
End Sub
Run Code Online (Sandbox Code Playgroud)

并且在按钮中需要将其设置为true或者您可以使用该UserForm_QueryClose事件

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


ham*_*mus 5

有几个原因(例如Application.Visible未重置的异常会在重置之前导致代码崩溃True)这样做不是一个好主意,但我会假设你已经考虑过这些:

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 
Run Code Online (Sandbox Code Playgroud)


小智 5

如果有人想要运行一个"相似"的用户表单独立应用程序:

我面临的问题:

  1. 我不想使用Workbook_Open事件,因为excel被锁定为只读.
  2. 批处理命令是有限的事实(据我所知)它无法调用宏.

我首先编写了一个宏来启动我的用户窗体,同时隐藏应用程序(基于上面的评论):

Sub open_form()
 Application.Visible = False
 frmAddClient.Show vbModeless
End Sub
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个vbs来启动这个宏(用相对路径做这件事很棘手):

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"
Run Code Online (Sandbox Code Playgroud)

我终于做了一个批处理文件来执行VBS ......

@echo off
pushd %~dp0
cscript Add_Client.vbs
Run Code Online (Sandbox Code Playgroud)

请注意,我还在我的网站中包含了"设置回可见" 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
Run Code Online (Sandbox Code Playgroud)