我的问题是一个前置代码问题,因为我想验证是否和哪个是解决此问题的最佳选择-公式,VBA还是不可能。
我有一个主工作簿,在工作表1的单元格中包含一组代码-格式均为HXXX-XXX-XXX,其中X是介于0-9之间的数字。每个代码都有一个关联的修订号,如附图所示。
工作簿本身以以下格式命名:“ HXXX-XXX-XXX-YY示例标题”,其中YY可以是从0到无穷大的任意数字(理论上)。标题中只有YY更新。如果在此工作簿中进行了更改,则将保存一个新版本,其中YY的标题中的字母更改为下一个连续的数字-其余均未更改。
在此主要工作簿中,还有许多其他工作簿(约50个)共享相同的代码和修订版。我的目标是将所有这些工作簿链接起来,这样我就只需要更新一个核心主工作簿,而所有其他链接的工作簿中的其余代码(HXXX-XXX-XXX)修订版也会相应地更新。
问题是其他链接的工作簿具有以下格式的动态名称:'HXXX-XXX-XXX-YY示例标题2',其中YY可以是从0到无穷大的任何数字。如果在文档内部进行了更改,则YY更新为下一个连续编号,然后使用“另存为”将该文档另存为单独的文档。注意:并非所有工作簿都会在同一时间进行更新,因为这完全取决于哪些代码,因此修订版本也在变化。
我的问题是,首先,当前的excel函数是否可以使用不断变化的工作簿链接来更新链接,而这些工作簿链接每次都保存在不同的文件中?
其次,我已经阅读了INDIRECT函数,但是它仅限于在更新主工作簿的同时打开所需的工作簿,因此,我不确定公式是否会起作用(我将链接50工作簿到主要工作簿)-由此,我正在评估VBA可能是最好的选择,但是我想在开始尝试代码之前再次检查这是否可行。
当然,在工作表中使用“公式”会更好,但是由于文件名是动态的,并且由于每次对其进行更改时更新的工作簿都保存为不同的文件,所以我认为这不是可能。
答案 0 :(得分:1)
如果我正确理解了您的问题,则需要区分三件事。
仅使用Excel公式。 这样做的问题是,跨越工作簿的公式具有很大的缺点,您需要打开源工作簿,否则,很多公式将无法正常工作或更新。您还具有一个缺点,即仍然需要自动完成文件的保存。优点是您不需要VBA宏。
使用功率查询 使用Power Query,您可以解决动态名称的问题。您甚至可以读取文件的整个文件夹,合并它们并进行转换,而无需手动打开文件。但是您仍然需要手动保存新文件,并且这些文件仅在打开后才会更新。
使用VBA 您可以执行问题描述中要求的所有操作,但是VBA有其自身的缺点。首先,各地的IT部门都不允许使用文件格式“ .xlsm”。为了起作用,使用文件的每个用户都需要激活宏,否则宏将不会执行。因此,我认为如果您只有一小部分用户或者可以自行执行宏(例如,如果主工作簿已更新,则需要执行一个可打开,修改并保存所有宏的宏),VBA解决方案更适合受影响的文件)。之后,您的同事就不需要他们自己的VBA。
可能的解决方案: 为了避免使用VBA,您可以尝试在每个“其他工作簿”中创建一个Power Query。该查询将读取主工作簿所在的文件夹中的所有文件名。现在,您将自动对具有最新/最高ID /标题的工作簿进行排序和筛选,并将结果作为单独的Excel工作表加载(使用Power查询和不使用VBA都可以做到)。 现在,您可以使用“间接”公式来使用ID / Titel链接到最新的主工作簿。如上所述,这将需要打开主工作簿。否则,间接公式将不会更新值。如果这不可行,则可能需要使用VBA。