excel - 自动更新外部工作簿中的值

标签 excel scripting vbscript wsh vba

我有以下工作簿设置:

enter image description here

工作簿 A 具有指向 x 个工作簿 B 的链接并从中获取数据。工作簿 B 具有指向其他一些工作簿的链接并从中获取数据。

工作簿 A 是所有其他工作簿所包含内容的“摘要”。就像现在一样,我必须在打开工作簿 A 之前打开所有工作簿 B、刷新它们并保存。如果我不这样做,工作簿 B 将不会使用工作簿 C 中的数据进行更新。

是否可以使用 .bat 或 vbs 脚本更新所有工作簿 B?或者是否可以从工作簿 A 中更新它们?

我可能会补充一点,我在这台计算机上使用 excel starter,因此解决方案最好与其兼容。

最佳答案

附件是一个潜在的解决方案,如 如果可用,可以从 vba 运行

感谢 Sid Rout 对 RecursiveFile(objWB) 的建议编辑

警告:同时打开的书籍过多(我在 vbs 递归 hell 期间达到 512 本书)可能会导致内存问题 - 在这种情况下,每个主要分支都应该更新反过来,这些工作簿在进入下一个分支之前关闭。

它的作用

  1. 打开 strFilePath 保存的工作簿
  2. 检查 1 中是否有任何链接的工作簿,如果有则打开它们(B、B1、B2 等)
  3. 然后,代码在 (2) 中的每个工作簿中查找任何链接,然后依次打开所有这些链接(C1 和 C2 用于 B 等)
  4. 每个打开的书名都存储在一个数组中,Arr
  5. 当所有书籍都打开时,初始工作簿将被更新,递归代码结束,并且除了 strFilePath 之外的所有打开的书籍都将关闭而不保存
  6. strFilePath 然后保存并关闭
  7. 代码整理完毕

编辑:更新代码以修复 vbs 递归问题

Public objExcel, objWB2, lngCnt, Arr()
Dim strFilePath, vLinks
`credit to Sid Rout for updating `RecursiveFileRecursiveFile(objWB)`

Erase Arr
lngCnt = 0

Set objExcel = CreateObject("Excel.Application")
strFilePath = "C:\temp\main.xlsx"

With objExcel
    .DisplayAlerts = False
    .ScreenUpdating = False
    .EnableEvents = False
End With

Set objWB = objExcel.Workbooks.Open(strFilePath, False)
Call RecursiveFile(objWB)

For Each vArr In Arr
    objExcel.Workbooks(vArr).Close False
Next

objWB.Save
objWB.Close
Set objWB2 = Nothing

With objExcel
    .DisplayAlerts = True
    .ScreenUpdating = True
    .EnableEvents = True
    .Quit
End With

Set objExcel = Nothing
MsgBox "Complete"

Sub RecursiveFile(objWB)
    If Not IsEmpty(objWB.LinkSources()) Then
        For Each vL In objWB.LinkSources()
            ReDim Preserve Arr(lngCnt)

            'MsgBox "Processing File " & vL

            Set objWB2 = objExcel.Workbooks.Open(vL, False)
            Arr(lngCnt) = objWB2.Name
            lngCnt = lngCnt + 1
            RecursiveFile objWB2
        Next
    End If
End Sub

工作屏幕截图

enter image description here

关于excel - 自动更新外部工作簿中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16011744/

相关文章:

vba - 确定调用属性是否引发错误的通用方法

vba - 我的代码有效,但 Excel 停止响应。代码中没有错误消息

scripting - 将消息从 Vim 脚本附加到缓冲区

linux - awk脚本将值放在另一个列值的列基础上

json - 使用 VBscript 访问 JSON 数据中的所有值

VBA : save a file with UTF-8 without BOM

excel =SIN(MOD($B5;23)/23*2*PI()) 错误

vb.net - 范围乘法 VB.NET(这段代码有什么问题?)

c# - 将脚本语言集成到 C# 应用程序是否有意义?

ruby - 使用 win32ole 从 Ruby 调用 vbscript 函数是否实用?