2013-12-16 3 views
6

배치 파일을 통해 Excel 매크로의 UserForm1을 열려고합니다. 나는 그것을 열 수 있지만 Excel도 함께 열리고 있습니다. UserForm1 만 엑셀이 아닌 열리길 원합니다. 내가 배치 파일에서 UserForm1을배치 파일에서 Excel 매크로의 UserForm 만 여는 방법

Sub open_form() 
    UserForm1.Show 
End Sub 

를 열려면 매크로를 작성했습니다

: 다음은 내 접근 방식이다

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

위의 방법으로, 둘 다 배치 파일을 실행 해요 때 UserForm1과 Excel이 열려 있지만 UserForm1 만 열려고합니다. 친절하게 밖으로 도와

답변

10

UserFormmodeless 모드로 표시 한 다음 응용 프로그램을 숨겨야합니다.

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

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 이벤트를 사용하고 싶지 않았습니다.
  2. 배치 명령은 (필자에게) 매크로를 호출 할 수 없다는 사실이 제한되어 있습니다. 응용 프로그램을 숨기고 (위의 의견에 따라) 동안

은 내가 먼저 내 사용자 정의 폼을 실행하는 매크로를 썼다 : 다음이 매크로를 실행하기 위해 VBS를 만들어

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

(상대 경로와 함께 그 일을) 까다로운되었습니다 :

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 
관련 문제