vba WScript.La Shell .file exe con il parametro

Io sono in esecuzione di una macro VBA di Word 2013. Sto cercando di eseguire un file eseguibile che richiede un argomento/parametro di un nome di file. Per esempio, c:\myfilefilter.exe filetobefiltered.htm

Vorrei utilizzare Shell Run perché voglio che il codice VBA per attendere che il file eseguibile è finito in esecuzione prima di riprendere il codice VBA. Le ultime tre righe nel codice riportato di seguito sono alcuni esempi di sintassi che ho provato che non funzionano. Penso che il problema è lo spazio tra il programma eseguibile e il file dei filtri. Qualcuno sa la sintassi corretta o un modo per attendere che il programma eseguibile per finire. Se avete bisogno di ulteriori informazioni, si prega di chiedere.

Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
Dim waitOnReturn As Boolean: waitOnReturn = True
Dim windowStyle As Integer: windowStyle = 1
Dim errorCode As Integer
Dim strProgramName As String
Dim strMyFile As String
Call Shell("""" & strProgramName & """ """ & strMyFile & """", vbNormalFocus, waitOnReturn"""")
wsh.Run(strProgramName & """ """ & fileToFilterB & """", vbNormalFocus, waitOnReturn)
wsh.Run "Chr(34)strProgramNameChr(34)strMyFile", waitOnReturn

Il codice riportato di seguito funziona. Dopo strCMD, il primo numero è un argomento booleano: 1 visualizza la finestra di dos e 0 nasconde la finestra di dos; il secondo numero è simile: 1 attende che il programma per completare prima di continuare il codice VBA, 0 non aspettare.

strCMD = sMyProgram + " " + sMyFile
Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
wsh.Run strCMD, 1, 1
  • Non so la risposta, e non hanno un buon modo per testare, ma nella tua ultima riga si dovrebbe rimuovere tutte le virgolette e partecipare Chr(34) e le variabili con e commerciali. Immagino che tu sia la definizione di tutte queste variabili da qualche parte?
InformationsquelleAutor user1892770 | 2014-11-05



2 Replies
  1. 7

    Si potrebbe provare questo. Per me funziona.

    Const BatchFileName = "P:\Export.bat"

    Dim wsh Come Oggetto

    Set wsh = VBA.CreateObject("WScript.Shell")
    Dim waitOnReturn As Boolean: waitOnReturn = True
    Dim windowStyle As Integer: windowStyle = 1
    
    wsh.Run BatchFileName, windowStyle, waitOnReturn
    
    Kill BatchFileName
  2. 5

    questo funziona per me (da MsAccess 2013 VBA)

    Dim wShell As New WshShell
    Dim wsExec As WshExec
        Dim cmdline As String
        cmdline = "notepad c:\somefile.txt"
        Debug.Print Now, cmdline
        Set wsExec = wShell.Exec(cmdline)
        Do While wsExec.Status = 0
            DoEvents
        Loop
        Debug.Print Now, "done"

Lascia un commento