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

时间:2013-11-18 04:10:06

标签: excel vba excel-vba

我有2个名为9月和10月的Excel文件。 9月文件包含10月文件使用公式引用/链接到的值:

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

因此10月份的单元格B2包含一个值,该值是来自9月文件的B2A1的总和。

如果我现在创建一个11月文件,我只需在10月文件上执行另存为并将文件保存为November.xlsx。但是,这意味着11月文件仍然引用值September.xlsx。在创建或打开11月文件时,有没有办法自动更新November.xlsx中的单元格以引用10月?

即。所以十一月的公式会自动更新为=+B2+'C:\[October.xlsx]Sheet1'!A1

或者在打开文件时弹出一个Window窗体,询问它希望链接到的月份,然后用户将在一个月内输入,然后更新范围内的所有单元格。

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

4 个答案:

答案 0 :(得分:2)

简单的查找和替换将适用于此类链接。

您必须跳过使用该名称作为您不想更改的标签的单元格。您也可以通过仅查看公式来在vba中执行此操作。这是关于如何做到这一点的post

enter image description here

答案 1 :(得分:2)

您可以使用Workbook.ChangeLink方法。

expression.ChangeLink(Name, NewName, Type)

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

要查看它的实际效果,请尝试在手动更改链接源的同时录制宏,并检查生成的代码。从Data/Connections/Edit Links菜单

访问它

最简单的实现可能是编写一个宏来一次性完成SaveAs和ChangeLink。或利用BeforeSave事件。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

这种纯粹基于配方的解决方案适合我。它分布在几个细胞中。我想你可以将所有的公式合并到一个单元格中的一个很长的公式中,但在我看来,最好不要。我会把中间细胞(我的例子中的细胞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 获取当前工作簿的完整路径。可能需要手动更新计算(按F9)以刷新此单元格
  • F13 从'['和']'字符
  • 之间提取文件名
  • F14 删除扩展程序(最后'。'之后的所有内容)以获取文件               基本名称(即本月的名称)
  • F15 上个月的Geta名称
  • F16 追加之前删除的扩展名,以获取文件名               上个月的表格。
  • F17 将此文件名替换为当前工作簿的路径。在这里,我们               假设本月的工作簿保存在同一个文件夹中               作为上个月的工作手册。
  • F18 从上一个月工作表的第1行第1列(单元格A1)获取值