*open* 工作簿上的间接和串联 #ref 错误
Indirect and Concatenate #ref error on *open* workbook
我一直在努力寻找这个问题的答案,但我得到的唯一结果是 已关闭 工作簿上的#ref 错误。当我引用的工作簿打开时出现此错误。
所以这就是我正在做的事情 - 我试图每天混合来自多个工作表的不同银行的数字,每个工作表都有多个选项卡。由于这些工作表有一个日期,后面跟着一个随机 ID 号,我们将把它们重命名为一个集合名称(例如,"pmac")并将每个转储到一个文件夹中。然后,我们将打开每一个我们想要混合的工作簿,我将使用 "ISERROR" 将任何参考错误变为空白,这样只有打开的工作簿包含在混合中(我会尽快添加)因为我可以得到这个间接参考工作)。
将要使用它的团队在共享驱动器上,所以我决定创建一些动态字段 "RatesheetFolder" 和 "PennyMacFileName",这样如果我们需要移动或重命名内容,我们在一个地方更改它,而不是更新每个公式。
所以目前,我的公式如下所示:
=INDIRECT(CONCATENATE("='"&RatesheetFolder&"["&PennyMacFileName&"]Conventional'!B"&ROW(B17)))
但它 returns #REF 错误。我正在阅读的所有内容都说这是因为工作簿已关闭......但事实并非如此。它是开放的。如果我将上面公式中的值复制并粘贴到一个单元格中,那么该引用有效...因此连接也没有错误,但由于某种原因它不会引用打开的工作簿。
我也试过做同样的事情,但在本地目录上,以防共享驱动器出现问题...但同样的问题。 (供参考,这里是上面公式的粘贴值)
='C:\Users\username\Documents\Reports\In Progress\[pmac.xlsx]Conventional'!B17
我还尝试完全省略文件夹路径,因为我要处理打开的工作簿,但这也没有用(copy/pasting 连接字符串的值仍然有效,所以再一次,它是不是写错了)。还尝试将两个文件放在同一个文件夹中,但没有成功。
知道发生了什么事吗?我的公司可能会阻止间接引用或其他某种安全问题吗?也许是我使用行函数的方式?
我正在使用 Office 2016。
补充:
所以,把事情降到最低限度....
=$B
returns B2中的值
=CONCATENATE("="&ADDRESS(2,2))
returns 文本“=$B$2”
=INDIRECT("=$B")
returns #ref 错误
=INDIRECT("$B")
returns B2 中的值(所以只有没有“=”)
=INDIRECT(CONCATENATE("="&ADDRESS(2,2)))
returns 引用错误
=INDIRECT(CONCATENATE(ADDRESS(2,2)))
returns B2中的值
以为是等号引起的问题,我试了一下:
=[pmac.xlsx]Conventional!B17
从另一个工作簿返回值
=INDIRECT([pmac.xlsx]Conventional!B17)
仍然是 returns 引用错误...
所以我又迷路了。
我再次尝试了最后两件事,但是有了完整的目录路径(不仅仅是文件名)和同样的东西——实际上写出直接引用是有效的
='C:\Users\username\Documents\Reports\In Progress\[pmac.xlsx]Conventional'!B17
但间接引用没有
=INDIRECT('C:\Users\username\Documents\Reports\In Progress\[pmac.xlsx]Conventional'!B17
奇怪 - 当我使用完整路径执行间接公式并按回车键时,它删除了完整路径并将其改回文件名(因为工作簿已打开):
=INDIRECT([pmac.xlsx]Conventional!B17)
但它仍然抛出了引用错误。所以它识别工作簿并且它是打开的......但它仍然在尝试引用它时出错。当我没有引用另一个工作簿时,间接连接似乎确实有效,所以看起来确实是问题所在...但我不知道为什么。
所以我想我是在弄乱了间接公式和连接公式中的引号和内容之后找到了答案。
首先,我意识到 INDIRECT(B2) 给出了一个引用错误,而 INDIRECT("B2") 起作用了。所以我回过头来测试了一些东西,确保 concatenate 返回了完全正确的东西,然后用一个间接公式包围它。
所以当我这样做时 =INDIRECT([pmac.xlsx]Conventional!B17)
这没有用,因为它不是字符串。如果我做了 =INDIRECT("[pmac.xlsx]Conventional!B17")
,那么它就成功了。间接要求它是一个字符串。
看起来问题是 Concatenate 返回 [pmac.xlsx]Conventional!B17 作为文本 - 但是当我 copy/pasted 连接公式返回的 VALUE,然后将字符串恢复为值,并停止在间接公式中工作。
最终起作用的(我发誓我已经试过了....)是:
=INDIRECT(CONCATENATE("'"&RatesheetFolder&"["&PennyMacFileName&"]Conventional'!B"&ROW($A17)))
我一定是在删除导致失败的等号时不小心删除了 RatesheetFolder 之前的单引号,然后之后的每一次尝试都是我试图将其分解成各个部分,并在不知不觉中撤消 "string" 属性 每当我将结果粘贴到间接公式中时,连接就会应用。
TL;我发现的 DR
- 间接公式要求其内容全部为text/string
- Concatenate 的结果返回为 text/string,使这些结果周围的附加引号多余并导致错误
- 如果您直接引用单元格,则需要等号
=B2
,但是如果你做的是间接引用,你要离开
间接公式 =INDIRECT("B2")
的等号
所以把它们放在一起(在这个例子中 DynamicVar 的值只是字母 B):
=INDIRECT("B2")
有效
=INDIRECT(B2)
无效
=CONCATENATE(DynamicVar & 2)
returns B2 没有引号,但它是一个字符串,所以..
=INDIRECT(CONCATENATE(DynamicVar & 2))
有效
我一直在努力寻找这个问题的答案,但我得到的唯一结果是 已关闭 工作簿上的#ref 错误。当我引用的工作簿打开时出现此错误。
所以这就是我正在做的事情 - 我试图每天混合来自多个工作表的不同银行的数字,每个工作表都有多个选项卡。由于这些工作表有一个日期,后面跟着一个随机 ID 号,我们将把它们重命名为一个集合名称(例如,"pmac")并将每个转储到一个文件夹中。然后,我们将打开每一个我们想要混合的工作簿,我将使用 "ISERROR" 将任何参考错误变为空白,这样只有打开的工作簿包含在混合中(我会尽快添加)因为我可以得到这个间接参考工作)。
将要使用它的团队在共享驱动器上,所以我决定创建一些动态字段 "RatesheetFolder" 和 "PennyMacFileName",这样如果我们需要移动或重命名内容,我们在一个地方更改它,而不是更新每个公式。
所以目前,我的公式如下所示:
=INDIRECT(CONCATENATE("='"&RatesheetFolder&"["&PennyMacFileName&"]Conventional'!B"&ROW(B17)))
但它 returns #REF 错误。我正在阅读的所有内容都说这是因为工作簿已关闭......但事实并非如此。它是开放的。如果我将上面公式中的值复制并粘贴到一个单元格中,那么该引用有效...因此连接也没有错误,但由于某种原因它不会引用打开的工作簿。
我也试过做同样的事情,但在本地目录上,以防共享驱动器出现问题...但同样的问题。 (供参考,这里是上面公式的粘贴值)
='C:\Users\username\Documents\Reports\In Progress\[pmac.xlsx]Conventional'!B17
我还尝试完全省略文件夹路径,因为我要处理打开的工作簿,但这也没有用(copy/pasting 连接字符串的值仍然有效,所以再一次,它是不是写错了)。还尝试将两个文件放在同一个文件夹中,但没有成功。
知道发生了什么事吗?我的公司可能会阻止间接引用或其他某种安全问题吗?也许是我使用行函数的方式?
我正在使用 Office 2016。
补充:
所以,把事情降到最低限度....
=$B
returns B2中的值=CONCATENATE("="&ADDRESS(2,2))
returns 文本“=$B$2”=INDIRECT("=$B")
returns #ref 错误=INDIRECT("$B")
returns B2 中的值(所以只有没有“=”)=INDIRECT(CONCATENATE("="&ADDRESS(2,2)))
returns 引用错误=INDIRECT(CONCATENATE(ADDRESS(2,2)))
returns B2中的值
以为是等号引起的问题,我试了一下:
=[pmac.xlsx]Conventional!B17
从另一个工作簿返回值=INDIRECT([pmac.xlsx]Conventional!B17)
仍然是 returns 引用错误... 所以我又迷路了。
我再次尝试了最后两件事,但是有了完整的目录路径(不仅仅是文件名)和同样的东西——实际上写出直接引用是有效的
='C:\Users\username\Documents\Reports\In Progress\[pmac.xlsx]Conventional'!B17
但间接引用没有
=INDIRECT('C:\Users\username\Documents\Reports\In Progress\[pmac.xlsx]Conventional'!B17
奇怪 - 当我使用完整路径执行间接公式并按回车键时,它删除了完整路径并将其改回文件名(因为工作簿已打开):
=INDIRECT([pmac.xlsx]Conventional!B17)
但它仍然抛出了引用错误。所以它识别工作簿并且它是打开的......但它仍然在尝试引用它时出错。当我没有引用另一个工作簿时,间接连接似乎确实有效,所以看起来确实是问题所在...但我不知道为什么。
所以我想我是在弄乱了间接公式和连接公式中的引号和内容之后找到了答案。
首先,我意识到 INDIRECT(B2) 给出了一个引用错误,而 INDIRECT("B2") 起作用了。所以我回过头来测试了一些东西,确保 concatenate 返回了完全正确的东西,然后用一个间接公式包围它。
所以当我这样做时 =INDIRECT([pmac.xlsx]Conventional!B17)
这没有用,因为它不是字符串。如果我做了 =INDIRECT("[pmac.xlsx]Conventional!B17")
,那么它就成功了。间接要求它是一个字符串。
看起来问题是 Concatenate 返回 [pmac.xlsx]Conventional!B17 作为文本 - 但是当我 copy/pasted 连接公式返回的 VALUE,然后将字符串恢复为值,并停止在间接公式中工作。
最终起作用的(我发誓我已经试过了....)是:
=INDIRECT(CONCATENATE("'"&RatesheetFolder&"["&PennyMacFileName&"]Conventional'!B"&ROW($A17)))
我一定是在删除导致失败的等号时不小心删除了 RatesheetFolder 之前的单引号,然后之后的每一次尝试都是我试图将其分解成各个部分,并在不知不觉中撤消 "string" 属性 每当我将结果粘贴到间接公式中时,连接就会应用。
TL;我发现的 DR
- 间接公式要求其内容全部为text/string
- Concatenate 的结果返回为 text/string,使这些结果周围的附加引号多余并导致错误
- 如果您直接引用单元格,则需要等号
=B2
,但是如果你做的是间接引用,你要离开 间接公式=INDIRECT("B2")
的等号
所以把它们放在一起(在这个例子中 DynamicVar 的值只是字母 B):
=INDIRECT("B2")
有效=INDIRECT(B2)
无效=CONCATENATE(DynamicVar & 2)
returns B2 没有引号,但它是一个字符串,所以..=INDIRECT(CONCATENATE(DynamicVar & 2))
有效