我正在尝试通过批处理文件打开excel宏的UserForm1。我能够打开它,但excel也随之打开。我只想打开UserForm1而不是excel。以下是我的方法:
我已经编写了一个宏来打开UserForm1
Sub open_form()
UserForm1.Show
End Sub
批处理文件:
@echo off
cd "c:\Test\"
openFormTest.xlsm
通过上面的方法,当我运行批处理文件时,UserForm1和excel都打开了,但我想只打开UserForm1。请帮助我
答案 0 :(得分:12)
您需要在UserForm
模式下显示modeless
,然后隐藏该应用。
试试这个
Sub open_form()
Application.Visible = False
UserForm1.Show vbModeless
End Sub
并在按钮中将其设置为true,或者您可以使用UserForm_QueryClose
事件
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Application.Visible = True
ThisWorkbook.Close SaveChanges:=False
End Sub
答案 1 :(得分: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
答案 2 :(得分:5)
如果有人想要运行一个“相似”的用户表单,那就是一个独立的应用程序:
我面临的问题:
我首先写了一个宏来隐藏应用程序时启动我的用户窗体(根据你上面的评论):
Sub open_form()
Application.Visible = False
frmAddClient.Show vbModeless
End Sub
然后我创建了一个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"
我最后做了一个批处理文件来执行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