Vba 用VB自动更新Excel中的单元格值
我有两个名为九月和十月的Excel文件。九月文件包含十月文件引用/链接到的值,使用以下公式:Vba 用VB自动更新Excel中的单元格值,vba,excel,Vba,Excel,我有两个名为九月和十月的Excel文件。九月文件包含十月文件引用/链接到的值,使用以下公式: =+B2+'C:\\[September.xlsx]Sheet1'!A1 因此,10月份的单元格B2包含一个值,该值是来自9月份文件的B2和A1的总和 如果我现在创建一个11月的文件,我只需在10月的文件上执行另存为,并将该文件另存为11月.xlsx。但是,这意味着十一月文件仍然引用值九月.xlsx。在创建或打开十一月文件时,是否有任何方法自动更新十一月.xlsx中的单元格以引用十月 i、 因此11
=+B2+'C:\\[September.xlsx]Sheet1'!A1
因此,10月份的单元格B2
包含一个值,该值是来自9月份文件的B2
和A1
的总和
如果我现在创建一个11月的文件,我只需在10月的文件上执行另存为,并将该文件另存为11月.xlsx。但是,这意味着十一月文件仍然引用值九月.xlsx。在创建或打开十一月文件时,是否有任何方法自动更新十一月.xlsx中的单元格以引用十月
i、 因此11月的公式将自动更新为=+B2+'C:\[十月.xlsx]Sheet1'!A1
或者在打开文件时弹出一个窗口窗体,询问它希望链接到的月份,用户将在一个月内输入,然后更新范围内的所有单元格
有人能给我指出正确的方向吗 在将十月工作簿另存为十一月.xlsx时,尝试录制宏,然后编辑新工作簿中的链接以链接到十月.xlsx
原始代码将非常混乱,但您应该能够对其进行编辑以适应其他月份。尝试在将10月份工作簿保存为11月.xlsx时录制宏,然后编辑新工作簿中的链接以链接到10月.xlsx
原始代码将非常混乱,但您应该能够编辑它以适应其他月份。简单的查找和替换将适用于此类链接 您必须跳过将名称用作不想更改的标签的单元格。您也可以在vba中仅通过查看公式来完成此操作。下面是一个关于如何做到这一点的例子
这种链接只需简单的查找和替换即可 您必须跳过将名称用作不想更改的标签的单元格。您也可以在vba中仅通过查看公式来完成此操作。下面是一个关于如何做到这一点的例子
您可以使用
工作簿.ChangeLink
方法
expression.ChangeLink(Name, NewName, Type)
其中,Name
是现有文件名,NewName
是新文件名
要查看它的运行情况,请尝试在手动更改链接源的同时录制宏,并检查生成的代码。从Data/Connections/Edit Links
菜单访问它
最简单的实现可能是编写一个宏,一次完成SaveAs和ChangeLink。或者利用
BeforeSave
事件。您可以使用Workbook.ChangeLink
方法
expression.ChangeLink(Name, NewName, Type)
其中,Name
是现有文件名,NewName
是新文件名
要查看它的运行情况,请尝试在手动更改链接源的同时录制宏,并检查生成的代码。从Data/Connections/Edit Links
菜单访问它
最简单的实现可能是编写一个宏,一次完成SaveAs和ChangeLink。或者利用
BeforeSave
事件。这个纯粹基于公式的解决方案对我来说很有效。它分布在几个细胞中。我想你可以把所有的公式组合成一个很长的公式,但在我看来最好不要。我只是把中间细胞(我的例子中的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获取上个月的名称
- F16追加先前删除的扩展名,以获取的文件名 上个月的表
- F17将此文件名替换为当前工作簿的路径。我们到了 假设本月的工作簿保存在同一文件夹中 作为上个月的工作簿
- F18从上个月的工作表第1行第1列(单元格A1)中获取值
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获取上个月的名称
- F16追加先前删除的扩展名,以获取的文件名 上个月的表
- F17将此文件名替换为当前工作簿的路径。我们到了 假设本月的工作簿保存在同一文件夹中 作为上个月的工作簿
- F18从上个月的工作表第1行第1列(单元格A1)中获取值