つまり、基本的に、Excel 2010インスタンスを開き、その中でマクロを実行してスプレッドシートを閉じるこのVBScriptがあります。私はそれを自動化するためにスケジュールされたタスクを使用してそれを呼んでいます。 Windows XPを使用していたときは問題なく実行されましたが、最近会社がWindows 7にアップグレードし、Windows 7の新しいタスクスケジューラを使用してスケジュールしようとすると、タスクは実行ステータスのままになりましたが、[実行]を選択すると何も実行されませんでしたユーザーがログインしているかどうか、実行の有無にかかわらず、最高の特権がチェックされます。ただし、ユーザーがログオンしているときにのみ実行を使用すると、すべてが正常に実行されます。
これが私が問題をテスト/検証しようとしたいくつかのことです:
同じスクリプトをWindows XPで、スケジュールされたタスクを使用して、ユーザーがログオンしなくてもスケジュールできます。もちろん、スクリプト自体は、ダブルクリックすると機能します。
Excelインスタンスを使用しない別のスクリプトは、問題なくスケジュールできます。
VBSスクリプトを呼び出すための.batファイルを作成し、Windowsタスクスケジューラを使用してbatファイルをスケジュールしました。batファイルは1行のコードです。
C:\ Windows\System32\CScript.exe // Nologo // B "C:\ myscript.vbs"
私がそれを実行したとき、それはタスクが完了したことを示しましたが、何も起動も実行もされませんでした。
私が試した他のことには、プログラムとしてCMDを使用することが含まれます。/scriptおよび/ c start "" "C:\ myscript.vbs"を引数として使用するか、C:\ Windows\System32\CScript.exeをプログラム/スクリプトとして使用して// Nologo // B "C:\ myscript.vbs"を引数として。すべて運がない。
この場合、タスクマネージャーに追加のExcelプロセスがないことがわかるため、Excelは起動されませんでした。
Windows XP)との互換モードでタスクをスケジュールするオプションがあるようですが、右クリックして[プロパティ]を選択しようとすると、[全般]タブで[構成]に表示されるのは次のとおりです。はWindows7とサーバー2008R2で、2番目のオプションはWindowsVistaとサーバー2008です。
私のアカウントにはPCの管理者権限があります。
したがって、ログオンせずにこのスクリプトを実行するようにスケジュールする方法はありますか?私はどんな選択肢も受け入れます。 PCは、Excel2010がインストールされたWindows7 Enterprise64ビット上にあります。
よろしくお願いします!
グループポリシーオブジェクトエディターのクライアント側の拡張機能のログを有効にする
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon]
GPTextDebugLevel REG_DWORD 0x30002
0 /ログを参照:
%windir%\debug\usermode\gptext.log
1/32ビット実行vbscript:
%windir%\syswow64\cscript.exe "C:\myscript.vbs"
2/ WindowsVistaまたはWindows7でユーザーアカウント制御をオンにした後、プログラムが一部のネットワークロケーションにアクセスできない場合があります
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"EnableLinkedConnections" REG_DWORD 1
3/UACを無効にする
コマンドライン:
vbs-32.cmd ExcelSheetName.vbs ExcelSrc.xls
vbs-32.cmd:
SET WSH32=%windir%\SysWOW64\cscript.exe
%WSH32% %*
SheetName.vbs:
'Microsoft ActiveX Data Object 2.8 Library
'Microsoft ADO Ext. 2.8 for DDL And Security
Const ArrSize = 100
Dim ArrSheetName()
ReDim ArrSheetName(ArrSize)
IndexArr = 0
IF WScript.Arguments.Count = 0 Then
WScript.Echo "Script Usage:"
WScript.Echo "%windir%\SysWOW64\cscript.exe ExcelSheetName.vbs [Excel file full path]"
WScript.Echo "%windir%\SysWOW64\cscript.exe ExcelSheetName.vbs D:\Office\ExcelSrc.xls"
Wscript.Quit(10)
End If
Dim ExcelFileName
ExcelFileName=WScript.Arguments(0)
Dim ADOCatalog, ADOTable, ADODBConnection
Set ADOCatalog = Createobject("ADOX.Catalog")
Set ADOTable = Createobject("ADOX.Table")
Set ADODBConnection = CreateObject("ADODB.Connection")
Dim strConnString, strSheetName
strConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ExcelFileName & ";Extended Properties=Excel 8.0;"
ADODBConnection.Open strConnString
Set ADOCatalog.ActiveConnection = ADODBConnection
For Each ADOTable In ADOCatalog.Tables
strSheetName = ADOTable.Name
strSheetName = Replace(strSheetName, "'", "")
strSheetName = Left(strSheetName, InStr(1, strSheetName,"$", 1)-1)
'Wscript.Echo strSheetName
ArrSheetName(IndexArr)=strSheetName
IndexArr=IndexArr+1
Next
ReDim Preserve ArrSheetName(IndexArr-1)
ADODBConnection.Close
Set ADOCatalog = Nothing
Set ADOTable = Nothing
Set ADODBConnection = Nothing
For Each ArrValue in ArrSheetName
Wscript.Echo ArrValue
Next
私は同じ問題を抱えていて、数ヶ月間それと戦いました。最後に、Microsoftに電話して支援を求めました。修正は私が今までに見つけたものではないので、うまくいけば、これは他の人にも役立つでしょう。スクリプトは、Powershell(およびコマンドライン)で起動すると正常に実行されますが、スケジュールされたタスクとして起動すると実行されますが、期待される結果は得られません。 Microsoftから、Excelを「非対話型モード」で実行することに問題があるとの連絡がありました。2つのディレクトリを作成する必要があります。
(32ビット、常に)C:\ Windows\System32\config\systemprofile\Desktop
(64ビット)C:\ Windows\SysWOW64\config\systemprofile\Desktop
非対話型モードで実行しようとしているMSExcelはこれを探しますが、存在しない場合は非対話型モードで開きません。
これらが作成されると、スケジュールされたタスクは問題なく実行されます。