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

时间:2013-12-16 04:41:18

标签: excel vba excel-vba batch-file

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

我已经编写了一个宏来打开UserForm1

Sub open_form()
   UserForm1.Show
End Sub

批处理文件:

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

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

3 个答案:

答案 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)

如果有人想要运行一个“相似”的用户表单,那就是一个独立的应用程序:

我面临的问题:

  1. 我不想使用Workbook_Open事件,因为excel被锁定为只读。
  2. 批处理命令限制了(据我所知)它无法调用宏的事实。
  3. 我首先写了一个宏来隐藏应用程序时启动我的用户窗体(根据你上面的评论):

    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