@ Robert: Ich habe versucht, Ihren Code mit einem relativen Pfad anzupassen, und eine Batch-Datei zum Ausführen des VBS erstellt.
Der VBS startet und schließt, startet aber das Makro nicht ... Haben Sie eine Vorstellung davon, wo das Problem liegen könnte?
Option Explicit
On Error Resume Next
ExcelMacroExample
Sub ExcelMacroExample()
Dim xlApp
Dim xlBook
Set xlApp = CreateObject("Excel.Application")
Set objFSO = CreateObject("Scripting.FileSystemObject")
strFilePath = objFSO.GetAbsolutePathName(".")
Set xlBook = xlApp.Workbooks.Open(strFilePath, "Excels\CLIENTES.xlsb") , 0, True)
xlApp.Run "open_form"
Set xlBook = Nothing
Set xlApp = Nothing
End Sub
Ich habe "Application.Quit" entfernt, weil mein Makro ein Benutzerformular aufruft, das sich darum kümmert.
Prost
BEARBEITEN
Ich habe es tatsächlich ausgearbeitet, nur für den Fall, dass jemand ein Benutzerformular "wie" eine eigenständige Anwendung ausführen möchte:
Probleme, mit denen ich konfrontiert war:
1 - Ich wollte das Workbook_Open-Ereignis nicht verwenden, da das Excel schreibgeschützt ist. 2 - Der Batch-Befehl ist darauf beschränkt, dass er meines Wissens das Makro nicht aufrufen kann.
Ich habe zuerst ein Makro geschrieben, um mein Benutzerformular zu starten, während ich die Anwendung versteckte:
Sub open_form()
Application.Visible = False
frmAddClient.Show vbModeless
End Sub
Ich habe dann ein vbs erstellt, um dieses Makro zu starten (es war schwierig, es mit einem relativen Pfad zu machen):
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"
Und ich habe endlich eine Batch-Datei erstellt, um die VBS auszuführen ...
@echo off
pushd %~dp0
cscript Add_Client.vbs
Beachten Sie, dass ich auch das "Zurück zum Sichtbaren setzen" in mein 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
Wie auch immer, danke für deine Hilfe und ich hoffe, dass dies hilft, wenn jemand es braucht