2017-07-31 1 views
1

Work Schedulerを使用してWorkbook Xでvbaサブプロシージャを開始するVBScriptを管理します。このプロシージャは2つの他のブックを開き、データをWorkbook Xに移動し、 。手順の結果は、保存する必要がある更新されたワークブックXです。 VBAプロシージャは正常に動作し、VBScriptによって予期されるようにトリガされます。ただし、ファイルを保存する必要があるVBScriptの部分は機能しません。 VBScriptは、Stackoverflow.comや他のサイトで見つけたコードに基づいています。 ファイルXを開いたときにVBScriptで保存しようとしましたが、ファイルを保存するかどうかを決定するよう求められます。私がそうするならば、私は上記の手順が作成したデータを見ることができます。 タスクマネージャで、VBScriptで作成したExcelインスタンスは、VBScriptで処理しようとしましたが、決して閉じられません。私もSaveメソッドを試しましたが、運がありません。私は運がないメソッドのさまざまなパラメータを試しました。私はこのサイトや他のサイトでこの問題をどのように解決できるかを検索しています。しかし、彼らはSaveとSaveAsメソッドを提案しています。Excelアプリケーションを終了するVBScript/VBAは、標準のExcelイベントの影響を受けます。

解決策ではなく根本的な原因が見つかりました。スクリプト自体とは何の関係もありません。開いているブックのイベントで。 私はuserform(StartUpForm.Show)を起動するコードを持っています。クローズイベントとオープンイベントの前のワークブックで、フィルタリングされたデータのセットでフィルタを削除するRemoveFilterプロシージャを呼び出します。 UserForm.ShowとRemoveFilterを閉じる前のブックブックイベントで表記法としてマークした場合、それは機能します。 StartUpForm.Showの呼び出しを避けるだけでは不十分です。 StartUpForm.Showは表記法としてマークするか削除する必要があります。どのようにすることができますか?回避策はありますか?

これは動作しません:

Private Sub Workbook_Open() 
    Dim batRun As Boolean 

    RemoveFilter 
    ResolveStartUp (batRun) 
    If Not batRun Then 
     StartUpForm.Show vbModal 
    End If 

End Sub 

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    RemoveFilter 
End Sub 

これは動作します:

Private Sub Workbook_Open() 
    Dim batRun As Boolean 

    RemoveFilter 
    ResolveStartUp (batRun) 
    If Not batRun Then 
     ' StartUpForm.Show vbModal 
    End If 

End Sub 

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    ' RemoveFilter 
End Sub 

のVBScript:ドライブ:

On Error Resume Next 

ImportAccesFilesToHolidaysAndWorkshops 

Sub ImportAccesFilesToHolidaysAndWorkshops() 

    Dim xlApp 
    Dim xlBook 

    Set xlApp = CreateObject("Excel.Application") 
    xlApp.DisplayAlerts = False 
    Set xlBook = xlApp.Workbooks.Open ("Z:\ResourceManagement\Holiday and workshops input.xlsm", 0, False,,,,,,,,True) 
    xlApp.Run "ImportResourcesAndProjects" 
    xlApp.ActiveWorkbook.Close 

    xlBook.SaveAs "Z:\ResourceManagement\Holiday and workshops input.xlsm",,,,,,xlExclusive, xlLocalSessionChanges 

    xlBook.Close 
    Set xlBook = Nothing 

    xlApp.Quit 
    Set xlApp = Nothing 

    WScript.Echo "Finished." 
    WScript.Quit 

End Sub 
+0

xlBook.Save'は、既存のファイルを上書きするために期待している場合は '使用してみてください - .SaveAs'isはファイル – Dave

+0

感謝のコピーを保存しようとして'あなたの入力のために。私はそれを試した。しかし、あなたが編集した問題の説明を読んだら、私は解決策ではなく問題を発見したことがわかります。 –

答えて

0

は、あなたのCに保存してください。それがうまくいけば、おそらく予定されたタスクの問題にぶつかっているでしょう。ユーザーがログインしているかどうかに関係なく、タスクが実行されているか、または最高の特権を使用するように設定されている場合は、自分が思っているセキュリティコンテキストでは実行されていません。いずれの場合も、ジョブスケジューラはS4U認証を使用します。これにより、ネットワークリソースにアクセスできなくなります。私はZ:ドライブがマップされたネットワークドライブであると推測しています。マップされたドライブは、ドライブを割り当てたユーザーに属しているため、ドライブを割り当てたユーザーとして実行していて、そのユーザーがログインしていない限り利用できません。

"最高の特権で実行する"実際には組み込みAdministratorアカウントで実行されています。これは別のアカウントであり、ドライブのマッピングはありません。

Task Security Context

Some Programs Cannot Access Network Locations When UAC Is Enabled

windows 7 scheduled tasks run with highest privileges

+0

あなたの提案をありがとう。私はあなたのCドライブでそれを実行するように提案したことをしました。私は上記の問題と同じ問題に遭遇しました。しかし、今回は、ポップアップを避けるための私の努力がうまくいかなかったかのように思えます。 –

関連する問題