使用VB自动更新Excel中的单元格值

我有两个名为九月和十月的Excel文件。 September文件包含10月份文件引用/链接到的值,使用公式:

=+B2+'C:\\[September.xlsx]Sheet1'!A1 

所以十月份的B2单元格中包含一个值,它是来自九月份文件的B2A1之和。

如果我现在创build一个11月份的文件,我只需要在10月份的文件上执行另存为,然后将文件另存为November.xlsx。 但是,这意味着November文件仍然指的是September.xlsx的值。 有没有办法自动更新November.xlsx中的单元格来创build十月份的文件?

即11月份的公式会自动更新为=+B2+'C:\[October.xlsx]Sheet1'!A1

或者在打开文件时popup一个窗口窗体,询问它想要链接到的月份,然后用户在一个月内进入,然后范围内的所有单元格都将被更新。

有人能指出我正确的方向吗?

一个简单的查找和replace将适用于这种链接。

您必须跳过使用该名称的单元格作为您不想更改的标签。 你也可以通过只看公式来做到这一点。 这里是一个关于如何做到这一点的post 。

在这里输入图像说明

您可以使用Workbook.ChangeLink方法。

 expression.ChangeLink(Name, NewName, Type) 

其中Name是现有的文件名, NewName是新的文件名

要看到它的实际操作,请尝试手动更改链接源时录制macros,然后检查生成的代码。 从Data/Connections/Edit Links菜单访问它

可能最简单的实现是编写一个macros来执行SaveAs和ChangeLink。 或者利用BeforeSave事件。

尝试录制macros,同时将十月份工作簿保存为November.xlsx,然后编辑新工作簿中的链接以链接到October.xlsx。

原始代码将非常混乱,但您应该可以编辑它以适应其他月份。

这个纯粹的基于配方的解决scheme适用于我。 它分布在几个小区。 我想你可以把所有的公式结合到一个单独的单元格中,但是在我看来,最好不要这样做。 我只是将中间的单元格(在我的例子中是单元格F12-F17)放在远处。

公式:

 Cell Formula ---- --------------------------------------------------------- F12 =CELL("filename",A1) F13 =MID(F12,FIND("[",F12)+1,FIND("]",F12)-FIND("[",F12)-1) F14 =LEFT(F13,FIND(CHAR(1),SUBSTITUTE(F13,".", CHAR(1),LEN(F13)-LEN(SUBSTITUTE(F13,".",""))))-1) F15 =TEXT(DATE(2000,MONTH(DATEVALUE("1 " & F14))-1,1),"mmmm") F16 =F15 & MID(F13,FIND(CHAR(1),SUBSTITUTE(F13,".", CHAR(1),LEN(F13)-LEN(SUBSTITUTE(F13,".","")))),LEN(F13)) F17 =SUBSTITUTE(F12,F13,F16) F18 =INDIRECT(ADDRESS(1,1,,,F17)) 

结果,假设当前工作表保存为December.xlsx

 Cell: Value: ----- --------------------------------------------------------- F12 C:\Users\user.name\Documents\[December.xlsx]Sheet1 F13 December.xlsx F14 December F15 November F16 November.xlsx F17 C:\Users\user.name\Documents\[November.xlsx]Sheet1 F18 value from cell A1 in November.xlsx! 

笔记:

  • F12获取当前工作簿的完整path。 可能需要手动更新calcs(按F9)以刷新此单元格
  • F13从'['和']'字符之间提取文件名
  • F14删除扩展名(在'。'之后的所有内容)以获取文件的基本名称(即本月的名称)
  • 上个月的F15 Geta名称
  • F16附加之前删除的扩展名,以获取上个月工作表的文件名。
  • F17将此文件名replace为当前工作簿的path。 在这里,我们假设本月的工作簿保存在与上个月的工作簿相同的文件夹中。
  • F18从上一个月的表格第1行(第A1行)获取值