2013-12-16 53 views
6

我想通過批處理文件打開Excel宏的用戶窗體1。我可以打開,但excel也隨之打開。我只想要打開用戶窗體1而不是Excel。下面是我的做法:如何只從批處理文件打開Excel宏的用戶窗體

我已經寫了一個宏來打開UserForm1

Sub open_form() 
    UserForm1.Show 
End Sub 

在批處理文件:

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

通過上述方法,當我對運行批處理文件UserForm1和Excel正在打開,但我只想打開UserForm1。請幫我出

回答

10

您需要在modeless模式下顯示UserForm模式,然後隱藏應用程序。

試試這個

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

,要麼在一個按鈕,你需要將其設置回真實的,或者你可以使用UserForm_QueryClose事件

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

Application.Visible = false會隱藏所有打開的excel工作簿,有沒有什麼建議? – Michael

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 
+0

+ 1打我吧:) –

+1

一個建議雖然:)你需要表現出其他非模態模式的形式表單也會隱藏起來。 –

+0

@leemo正如你所說,這不是一個好主意,我可以知道你在說什麼這方面 – Samraan

2

如果有人想運行一個用戶窗體「一點通「一個獨立的應用程序:

我正面臨的問題:

  1. 我不想使用Workbook_Open事件,因爲excel被鎖定爲只讀。
  2. 批處理命令是有限的,(據我所知)它不能調用宏的事實。

我第一次寫一個宏來啓動我的用戶窗體隱藏應用程序(基於上面您的意見),同時:

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 
相關問題