7

次のワークブックのセットアップがあります。

ここに画像の説明を入力

ワークブック A には x 個のワークブック B へのリンクがあり、それらからデータをフェッチします。ワークブック B には他のワークブックへのリンクがあり、そこからデータを取得します。

ワークブック A は、他のすべてのワークブックに含まれている内容の一種の「要約」です。今のところ、ワークブック A を開く前に、すべてのワークブック B を開いて更新し、保存する必要があります。これを行わないと、ワークブック B はワークブック C のデータで更新されません。

.bat または vbs スクリプトを使用してすべてのワークブック B を更新することは可能ですか? または、ワークブック A 内からそれらを更新することは可能ですか?

このコンピューターでExcelスターターを使用していることを付け加えるかもしれないので、ソリューションはそれと互換性があることが望ましいです。

4

3 に答える 3

2

したがって、VBA はオプションではないため、VB スクリプト ソリューションを試してみましょう。

dim objFSO, objExcel, objWorkbook, objFile
'
set objExcel= CreateObject("Excel.application")
'
objExcel.visible=false
objExcel.displayalerts=false
'
Set objFSO = CreateObject("Scripting.FileSystemObject")
objStartFolder = path
'
Set objFolder = objFSO.GetFolder(objStartFolder)
' get collection of files from folder
Set colFiles = objFolder.Files
' begin loop through all files returned by Files collection of Folder object
For Each objFile in colFiles
    ' sanity check, is the file an XLS file?
    if instr(objfile.name,"xls")<>0 then ' could also use right(objfile.name,4)=...
        Wscript.Echo "Opening '" objFile.Name & "' ..."
        set objWorkbook=objexcel.workbooks.open objfile.name, updatelinks:=true
        objexcel.workbooks(objfile.name).close savechanges:=true
    end if
Next
' close Excel
objexcel.quit
' kill the instance and release the memory
set objExcel=nothing

それを試してみて、どうやってうまくいくか見てください

VB スクリプト SDK は次のとおりです: MSDN ライブラリ - VB スクリプト

于 2013-04-15T10:03:52.813 に答える
2

はい、すべてのソース B ワークブックをループしてバックグラウンドで開き、UpdateLinks フラグを True に設定できます ...

strFiles=Dir(*path & \.xls*)

do
    workbooks.open strfiles, UpdateLinks:=true
    workbooks(strfiles).close savechanges:=true
    strFiles=Dir
loop while strfiles<>""

それはあなたにスタートを与えるはずです

于 2013-04-15T09:41:10.370 に答える