讓我回答大家的腦海中首先第一個問題...傳遞文件路徑變量從批次到VBA
爲什麼要使用批次調用VBA宏?
我現在有一個非常複雜的批次,其中包括手錶,文件夾觸發,多片的第三方軟件進行文件轉換步驟的電話,文件歸檔步驟,電子郵件觸發根據具體步驟,等等。由於此批處理腳本已經通過批處理 - > VBS - > Excel VBA程序調用了另外兩封電子郵件,我想繼續這個過程,以便重用代碼。 (目前的VBA代碼可以很容易地添加附件了。)
我的問題
我的問題是我安裝的原批程序上生成的文件。因此,我需要將完整的文件名(UNC路徑&文件名)作爲單個字符串變量從批處理傳遞給VBA腳本(這意味着還要通過VBS傳遞它,因爲從批處理調用VBA宏需要中間步驟 - 即批量 - > VBS - > VBA - >我的電子郵件)。
我的代碼
傳遞從批次變量 - > VBS
set ArchiveFullName=\\myArchivePath\myFile.rtf
cscript //NoLogo "\\myEmailAutomationFolder\myEmailAutomation.vbs" /attachment:"%AttachmentFullName%"
**構想使用 'CSCRIPT'(的代碼第3行)的這個方法來從通過可變一批VBS來自:Pass variable from Batch to VBS
從VBS傳遞變量到VBA
Dim xlApp
Dim xlBook
Dim attachmentFullName
attachmentFullName = WScript.Arguments.Named("attachment")
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("\\myPath\EmailAutomation.xlsm", 0, True)
xlApp.DisplayAlerts = False
xlApp.Run "Email_Received_Files", Cstr(attachmentFullName)
xlApp.Quit
Set xlBook = Nothing
Set xlApp = Nothing
End Sub
**此代碼的大部分工作,因爲它用於其他兩個自動電子郵件的代碼。但是,第3,4和10行是從VBS收集變量,並嘗試從VBA傳遞。這些是基於從建議:Pass Argument from VBS to VBA
接受變量在VBA
Sub Email_Received_Files(t As String)
Dim placementAttachment As String
'Grab attachment path from .vbs (which grabbed it from .bat)
Set placementAttachement = t
Set Range(C6) = placementAttachement
End Sub
上面的代碼只是在VBS提供的代碼的第二部分 - > VBA螺紋前面相連。我剛剛添加了一個調試步驟,將字符串放在工作表上,以便我知道它是否有效(還有我的電子郵件代碼,但顯然只是拍了一張快照)。
錯誤消息
這不告訴真正幫助確定其批次 - > VBS代碼或VBS - > VBA,但我得到一個編譯器錯誤當Excel揭開序幕。錯誤消息:
Compile error: Object required
代碼
疑難解答我沒有Visual Studio的這臺電腦上,所以沒有爲我調試VBS腳本,看看是否一個好方法變量正在從批處理接受。因此,我不確定變量未正確傳遞的位置 - 步驟1(批處理 - > VBS)或步驟2(VBS - > VBA)。
任何幫助將不勝感激!
Excel中帶有一個內置的調試器,提供安裝了宏編輯器。對於VBScript調試,請參閱[這裏](http://www.robvanderwoude.com/vbstech_debugging.php)。一個好的第一步是使用'MsgBox'來顯示有問題的變量的值。至於你的錯誤信息:請顯示完整的錯誤信息,包括錯誤號碼。哪條線提高了錯誤?爲了調試,我還建議設置'xlApp.DisplayAlerts = True'和'xlApp.Visible = True'。 –
「Set placementAttachement = t」語句可能是問題。 'Set'只能用於一個對象;你正在用一個字符串來使用它。試試'placementAttachement = t'。 – xidgel