首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从外部工作簿自动更新值

从外部工作簿自动更新值
EN

Stack Overflow用户
提问于 2013-04-15 01:25:28
回答 3查看 4.3K关注 0票数 7

我有以下工作簿设置:

工作簿A有一个指向工作簿B的x数量的链接,并从它们获取数据。工作簿B有指向其他工作簿的链接,并从它们获取数据。

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

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

我可能补充说,我在这台计算机上使用了excel启动器,所以更好的解决方案将与此兼容。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-15 04:51:53

附加是一个潜在的解决方案,作为一个vbs,可以从vba运行,如果可用的话。

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

警告:太多同时打开的书籍(我在vbs递归地狱中访问了512 )可能会导致内存问题--在这种情况下,每个主要分支都应该依次更新,然后这些工作簿在进入下一个分支之前关闭。

它做什么

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

Working ScreenShots

票数 5
EN

Stack Overflow用户

发布于 2013-04-15 01:41:10

是的,您可以循环遍历所有源B工作簿,在后台打开它们并将UpdateLinks标志设置为True .

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
strFiles=Dir(*path & \.xls*)

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

这应该给你一个开始

票数 2
EN

Stack Overflow用户

发布于 2013-04-15 02:03:52

因此,由于VBA不是一个选项,让我们尝试一个VB脚本解决方案:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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脚本:MSDN库- VB脚本

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16011744

复制
相关文章
ExcelVBA汇总多工作簿中指定工作表到新工作簿
哆哆Excel
2023/09/09
4750
ExcelVBA汇总多工作簿中指定工作表到新工作簿
Excel应用实践19:根据工作表某列中的值从另一工作簿中获取数据
在下图1所示的工作簿Data.xlsx的工作表Sheet1中,存放着待使用的数据。
fanjy
2019/08/27
19K0
Excel应用实践19:根据工作表某列中的值从另一工作簿中获取数据
VBA代码:拆分工作簿示例——将工作簿中的每个工作表保存为单独的工作簿
只需在要拆分的工作簿中运行上述代码,就可将该工作簿中的所有工作表全部保存为单独的工作簿。
fanjy
2022/06/04
4.1K0
VBA代码:拆分工作簿示例——将工作簿中的每个工作表保存为单独的工作簿
VBA实例一、工作簿按表拆分成多个工作簿
大家好,本节主要介绍,通过VBA程序,将单个工作簿中的多个工作表,按表拆分成多个独立工作簿。
无言之月
2022/11/11
3.8K0
VBA实例一、工作簿按表拆分成多个工作簿
Workbook工作簿对象属性
Activeworkbook.name表示当前活动工作簿的name属性,即当前excel文件的名称为vba.xlsm。
无言之月
2019/10/13
1.9K0
VBA实用小程序48: 确保工作簿已装载必需的外部加载宏
如果你的Excel应用程序依赖于外部加载项(例如分析工具库或规划求解加载项),那么必须确保在运行应用程序之前加载了该加载项。
fanjy
2019/07/19
8150
Workbook工作簿对象基础
大家好,前面已经介绍了常用的range单元格对象和worksheet普通工作表对象,本节开始介绍工作簿workbook对象,首先通过下图回顾一下常用对象的层级关系。
无言之月
2019/10/13
3K0
VBA代码:将整个工作簿中的所有公式转换为值
有趣的是,不管工作簿中有多少张表,它都是用一个操作来处理的。通常情况下,都是试图通过遍历工作表来做到这一点,然而并没有那么有效。
fanjy
2023/10/10
1.3K0
VBA代码:将整个工作簿中的所有公式转换为值
使用VBA将工作簿中所有的数据转换成值
通常,工作簿中会包含很多工作表,而工作表中的数据有些是单纯的数值,而有些是公式的结果。如果我们想要将工作簿中所有的数据都转换为值,也就是说,公式转换为其结果值,如何快速实现呢?
fanjy
2022/11/16
1.4K0
Power Pivot里接入的外部Excel工作簿改名改位置了,怎么办?
小勤:哪里能改啊?或者能不能像Power Query那样利用Excel里的Cell函数做成动态的?
大海Power
2021/08/30
1.2K0
Java保护Excel工作簿和工作表
出于安全原因,你可能需要保护整个工作簿或工作表。 有时,你甚至可能还需要保护某个工作表,但却保留指定的单元格进行编辑。 本文将介绍如何使用Free Spire.XLS for Java来实现这些操作。
崔笑颜
2020/06/08
1.5K0
常用功能加载宏——多个工作簿合并到一个工作簿
对于做管理工作的,收集表格这种工作应该会经常有,设计一个表格模板,发给各个有关单位去填写,收集起来后再合并到一起。
xyj
2020/07/28
1.9K0
常用功能加载宏——多个工作簿合并到一个工作簿
常用功能加载宏——一个工作簿的工作表另存为工作簿
前面实现了多个工作簿和合并到一个工作簿的功能,反过来,将一个工作簿里的工作表,另存为多个工作簿,然后分发给不同的人,应该也是经常会碰到的。让我们看看使用VBA如何实现:
xyj
2020/07/28
1.6K0
常用功能加载宏——一个工作簿的工作表另存为工作簿
Workbook工作簿对象方法(一)
大家好,前面介绍了工作簿对象的属性,本节开始介绍工作簿对象的常用方法。这些常用方法可以实现平时用手工的新建、打开、激活、保存excel表等功能。
无言之月
2019/10/13
6.6K0
Excel事件(三)工作簿事件
大家好,上节介绍工作表事件,本节将介绍工作簿事件,工作簿数量较多,但并没有工作表事件常用,只简单介绍几个常用的工作簿事件。
无言之月
2019/10/13
2.2K0
Workbook工作簿对象方法(二)
大家好,上节介绍过部分工作簿对象的常用方法-创建和打开,本节将继续介绍工作簿对象的激活、保存和关闭方法。
无言之月
2019/10/13
4.9K0
自动合并工作簿中各工作表数据
合并多表数据是工作中常见的情形。本文介绍一种在Excel及Power BI中不使用任何公式,快速合并一个工作簿中多个工作表的方法。
wujunmin
2021/09/07
1.6K0
自动合并工作簿中各工作表数据
VBA: 将多个工作簿的第一张工作表合并到一个工作簿中
文章背景: 在工作中,有时需要将多个工作簿进行合并,比如将多份原始数据附在报告之后。一般的操作方法是打开两个工作簿(目标工作簿和待转移的工作簿),然后选中需要移动的工作表,右键单击以后选择“移动或复制”。接下来在新的对话框里面进行设置。
Exploring
2022/09/20
6.2K0
VBA:  将多个工作簿的第一张工作表合并到一个工作簿中
c#启动外部程序_winform程序自动更新
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/179165.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/27
3530
Excel实战技巧64: 从工作簿中获取数据(不使用VBA)
这是在研读《Escape From Excel Hell》时学到的技术,从本工作簿中或者其他工作簿中获取所需要的数据,以便于作进一步的分析或者绘制Excel图表。
fanjy
2019/12/04
3.1K0

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文