Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 用VB自动更新Excel中的单元格值_Vba_Excel - Fatal编程技术网

Vba 用VB自动更新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

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

=+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)中获取值

这个纯基于配方的解决方案对我很有效。它分布在几个细胞中。我想你可以把所有的公式组合成一个很长的公式,但在我看来最好不要。我只是把中间细胞(我的例子中的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)中获取值

如果您在修改录制的代码时遇到困难,那么至少您可以发布一些内容,展示创建VBA解决方案的尝试。谢谢