如何使用VBScript有效刷新多个Excel电子表格的外部数据?

我有一个macros在一个XLSM工作簿的模块刷新所有的外部数据,然后保存并closures该工作簿。

ActiveWorkbook.RefreshAll ActiveWorkbook.Save ActiveWorkbook.Close Application.Quit 

我使用VBScript文件作为计划任务的一部分运行该macros

 objExcel.Workbooks.Open(fname) objExcel.Visible = True On error resume next objExcel.Run "RefreshAllData" 

问题:如何重新使用现有工作簿中的现有macros来刷新多个其他工作簿的所有数据? (即我正在寻找对VBScript文件的必要修改,我想最大限度地减less对macros本身的更改,文件名将包含在VBScript文件中)TIA。

我build议不要重新使用这样一个微不足道的macros。 而是在VBScript中包含刷新function:

 Set fso = CreateObject("Scripting.FileSystemObject") Set xl = CreateObject("Excel.Application") xl.Visible = True For Each f In fso.GetFolder("C:\some\folder").Files If LCase(fso.GetExtensionName(f.Name)) = "xlsx" Then Set wb = xl.Workbooks.Open(f.Path) wb.RefreshAll wb.Save wb.Close End If Next xl.Quit 

如果你根本不改变macros,你将不得不重新加载Excel,然后打开macros工作簿,然后打开目标工作簿,然后运行macros。 如果你可以删除:

 Application.quit 

那么你至less可以保持excel打开,并且每次运行macros之前都要打开目标工作簿。 在我看来,将macros代码放入vbs文件会更简单

我想你可以做这样的事情。

  1. find给定文件夹中的所有excel文件
  2. select每个Excel文件并激活
  3. 调用refreshdata函数

代码片段来支持这一点

 Sub RefreshAllExcelInFolder() Dim fso Dim ObjFolder Dim ObjFiles Dim ObjFile Dim objExcel 'Creating File System Object Set fso = CreateObject("Scripting.FileSystemObject") 'Getting the Folder Object Set ObjFolder = fso.GetFolder("<<C:folder path>>") 'Getting the list of Files Set ObjFiles = ObjFolder.Files 'On Error Resume Next For Each ObjFile In ObjFiles If LCase(Right(ObjFile.Name, 5)) = ".xlsx" Or LCase(Right(ObjFile.Name, 4)) = ".xls" Then Workbooks.Open(ObjFile).Activate RefreshAllData End If Next End Sub Sub RefreshAllData() ActiveWorkbook.RefreshAll ActiveWorkbook.Save ActiveWorkbook.Close MsgBox ("Going back In") End Sub 

希望这会有所帮助