2017-07-07 53 views
0

我在寫入的兩個VBA腳本中遇到了一個相當奇怪的錯誤,並且無法完全將我的手指放在問題可能位於何處。 ..VBA「殺死文件」在第一次運行時不起作用,但在所有後續運行中

這是關於兩個VBA宏處理相同的功能,一個用於Word和一個用於Excel。 什麼宏不被解析的某些信息到被這樣創建一個臨時的.txt文件:

Dim Appl 
Set Appl = CreateObject("WScript.Shell").Exec("cmd.exe /k im viewissue " & issue & " > " & "D:\temp" & issue & ".txt") 
Appl.Terminate 

隨後的一些信息是從.txt文件提取並寫入了Excel/Word文件resprectively。

編輯:作爲這樣:編輯的

Set FileNum = CreateObject("Scripting.FileSystemObject").OpenTextFile("D:\temp" & issue & ".txt", 1) 
    'Read some lines and write them into the Word/Excel files... 
FileNum.Close 

端。

宏與文件完成後它會刪除它:

Kill "D:\temp" & issue & ".txt" 

一切正常,沒有任何問題:在創建文件,信息提取工作,文件將被刪除......除了在你第一次嘗試運行它。

第一次嘗試運行它時(在剛剛啓動的計算機上),您會收到一條「連接到kill命令行」的「Runtime Error 70:Access denied」。 如果你只是取消錯誤消息窗口,然後再試一次,它可以正常工作。

我檢查以下內容:

  • .txt文件創建(甚至在第一次運行)
  • 權限設置正確,以便能夠手動刪除它沒有問題
  • 啓動後Word和Excel宏上的相同問題
  • 在Word上運行腳本(帶有錯誤消息)消除了第一次運行Excel腳本時的問題,反之亦然(即使刪除了擱淺的.txt文件錯過後嘗試)

我真的不知道問題可能是什麼......不太明白第一次運行和後續運行之間的區別。

任何類型的提示都非常感謝。 乾杯。

編輯:在另一方面,我設法排除這種可能性,即FileSystemObject對象是問題的根源,因爲我不到底用的什麼文件運行腳本時得到了同樣的問題。

+0

嘗試之前的Application.Doevents。 – Jochen

+0

Jochen如何以及在哪裏調用函數? – budekatude

回答

1

所以我不小心碰到了解決方案:

原來在新機器的誠信客戶,我會繼續使用「IM」指令在命令行調用在第一次運行,是返回一些關於連接的信息。

此輸出似乎混淆了導致它不再關閉命令窗口的腳本,從而在.txt文件上保留文件句柄。 由於權限問題導致kill-command無法刪除文件。

感謝您的所有輸入,但! 還是非常感謝。

0

代碼問題,在調試或第二次「經常在清理或後臺處理時出現」。在很多情況下,在調用相關部分之後添加「doevents」會有所幫助。在你的情況下,你可以嘗試:

Dim Appl 
Set Appl = CreateObject("WScript.Shell").Exec("cmd.exe /k im viewissue " & issue & " > " & "D:\temp" & issue & ".txt") 
DoEvents 
Appl.Terminate 
Doevents 
Kill "D:\temp" & issue & ".txt" 

希望有所幫助。

+0

感謝您的建議Jochen,但它仍然無法正常工作。我仍然在第一次運行時遇到同樣的問題... 另請參閱我對上述問題描述的編輯。 – budekatude

0

假設MS Office的內部進程沒有在要刪除的文件中完成,最簡單的方法應該是延遲刪除直到其他時間,例如, Before_Close。殺死該文件的另一個顯而易見的時間是在再次使用該文件之前,但這會與直覺相反,因爲當該名稱被重用時,現有文件將被覆蓋。我的意思是指出,刪除文件並沒有這麼可怕的衝動,而設計他們的程序的MS工程師不會立即放棄它,可能已經考慮到了這一事實。

+0

一個很好的建議,但該文件只在腳本的最後被刪除... 我不會像在下一個腳本運行的實例中刪除舊文件的想法一樣,因爲您有一個文件躺在機器周圍很長一段時間,如果劇本沒有定期運行...... – budekatude

相關問題