Passare Argomento da VBS a VBA

Provo a chiamare una subroutine VBA da VBS con il passaggio di una variabile stringa da VBS a VBA, ma non riesce a trovare i giusti sintassi:

'VBS:
'------------------------
Option Explicit

Set ArgObj = WScript.Arguments 
Dim strPath

mystr = ArgObj(0) '?

'Creating shell object 
Set WshShell = CreateObject("WScript.Shell")

'Creating File System Object
Set objFSO = CreateObject("Scripting.FileSystemObject")

'Getting the Folder Object
Set ObjFolder = objFSO.GetFolder(WshShell.CurrentDirectory)

'Getting the list of Files
Set ObjFiles = ObjFolder.Files

'Creat a Word application object
Set wdApp = CreateObject("Word.Application")
wdApp.DisplayAlerts = True
wdApp.Visible = True

'Running macro on each wdS-File
Counter = 0
For Each objFile in objFiles
  If UCase(objFSO.GetExtensionName(objFile.name)) = "DOC" Then
    set wdDoc = wdApp.Documents.Open(ObjFolder & "\" & ObjFile.Name, 0, False) 
    wdApp.Run "'C:\Dokumente und Einstellungen\kcichini\Anwendungsdaten\Microsoft\Word\STARTUP\MyVBA.dot'!Test_VBA_with_VBS_Args" (mystr) 'how to pass Argument???
    Counter = Counter + 1
  End if
Next

MsgBox "Macro was applied to " & Counter & " wd-Files from current directory!"

wdApp.Quit
Set wdDoc = Nothing
Set wdApp = Nothing



'------------------------
'VBA:
'------------------------
Sub Test_VBA_with_VBS_Args()

    Dim wdDoc As Word.Document
    Set wdDoc = ActiveDocument
    Dim filename As String
    Dim mystr As String

    'mystr = how to recognize VBS-Argument ???

    filename = ActiveDocument.name
    MsgBox "..The file: " & filename & " was opened and the VBS-Argument: " & mystr & "recognized!" 

    wdDoc.Close

End Sub
'------------------------
separati da virgola? oXL.Run “MyBook.xls!Miomodulo.La macro”, var1, var2
ok, provato con VBS: var1 = ArgObj(0) e wdApp.Run "'C:\Dokumente und Einstellungen\kcichini\Anwendungsdaten\Microsoft\Word\STARTUP\MyVBA.dot'!Test_VBA_with_VBS_Args", var1, e in VBA: mystr = var1 senza successo

OriginaleL’autore Kay | 2012-12-14

2 Replies
  1. 8

    È necessario specificare i parametri di VBA Sub e utilizzare come si potrebbe fare se la si usa da VBA normalmente.

    Per esempio ho provato il seguente codice VBScript

    dim wd: set wd = GetObject(,"Word.Application")
    wd.Visible = true
    wd.run "test", "an argument"

    e VBA

    Sub Test(t As String)
        MsgBox t
    End Sub

    che ha lavorato con successo, generando una finestra di messaggio.

    accidenti, è davvero facile – @ocp, molte grazie per la sintetica esempio!

    OriginaleL’autore

  2. 8

    Addendum @user69820 risposta, se gli argomenti sono VBScript variabili, hanno bisogno di essere lanciato come il tipo appropriato prima di chiamare la subroutine:

    Questo non funziona:

    dim argumentVariable
    argumentVariable = "an argument"
    wd.run "test", argumentVariable

    Questo:

    dim argumentVariable
    argumentVariable = "an argument"
    wd.run "test", CStr(argumentVariable)

    Testato su Excel 2010, Win7SP1 x64

    OriginaleL’autore junglejim63

Lascia un commento