Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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
Performance Excel 2003:为什么创建到其他电子表格的链接需要这么长时间?_Performance_Excel_Vba_Hyperlink - Fatal编程技术网

Performance Excel 2003:为什么创建到其他电子表格的链接需要这么长时间?

Performance Excel 2003:为什么创建到其他电子表格的链接需要这么长时间?,performance,excel,vba,hyperlink,Performance,Excel,Vba,Hyperlink,我的Excel应用程序创建指向其他Excel文件的链接。为一个单元格创建链接大约需要1秒钟,但我有几百个单元格要链接,所以速度非常慢。 打开或关闭源文件的速度没有差别。但是,我注意到,在打开源文件时,手动创建链接(例如,通过手动将包含链接的公式复制并粘贴到其他单元格)要快得多 在我的程序中,我配置了 应用。计算为手动而非自动 我试着用两种方式完成链接(请注意这不是一个真正的代码,但我希望它能说明我的意思): 一,。 使用将公式链接从范围(“A1”)复制到外部源 范围内每个单元格上的foreach

我的Excel应用程序创建指向其他Excel文件的链接。为一个单元格创建链接大约需要1秒钟,但我有几百个单元格要链接,所以速度非常慢。 打开或关闭源文件的速度没有差别。但是,我注意到,在打开源文件时,手动创建链接(例如,通过手动将包含链接的公式复制并粘贴到其他单元格)要快得多

在我的程序中,我配置了 应用。计算为手动而非自动

我试着用两种方式完成链接(请注意这不是一个真正的代码,但我希望它能说明我的意思):

一,。 使用将公式链接从
范围(“A1”)
复制到外部源 范围内每个
单元格
上的foreach循环:

Cell.FormulaR1C1=范围(“A1”).FormulaR1C1

二,。 将公式从
范围(“A1”)
复制到另一个范围,无需使用foreach循环:

Range(“thisIsMyTargetRange”)。公式1c1=范围(“A1”)。公式1c1

这两种方法都同样慢,正如我所说的,我在打开和关闭源文件时检查了上述两种方法


有没有办法加快速度?是否有人对Excel 2003中的链接机制了解得足够多,可以就如何提高链接性能提供建议?

是否有相关公式?如果没有,请使用
.value
而不是
.formula1c1

此外,如果范围大小相同,则使用范围副本而不是循环。e、 g

range(a1:a500).value = range(a1:a500)
添加了替代方法:


另外,另一种方法是使用数据导入功能创建一个表,该功能在文件打开时刷新,如果您需要一个工作表。然后,如果需要该工作表的位,请使用导入工作表/表格中的数据。这将保持在打开文件时只更新或链接到一个大型导入。

我不得不这样做,数月来,大约每秒获取一次数据


打开要从中复制数据的文档。然后将包含该数据的所有工作表复制到您正在使用的工作簿中。从中获取数据,然后从工作簿中删除这些工作表。在宏中执行此操作,以便可以快速重复地执行。

我怀疑延迟是因为它正在检查文件系统中的每个链接,这造成了开销。在创建链接之前,请尝试打开目标工作簿。我不熟悉如何链接工作簿,但屏幕更新选项可能是关键:Microsoft Excel 2003文件是XML文件,特别是电子表格ML。如果您有足够的勇气并愿意学习(并且在学习过程中弄乱了一些文件),您可以直接操纵XML,而无需打开Excel—在Excel中打开修改后的文件之前,不会有任何更新。@DaleM我以为Office XML直到Excel 2007才出现?难道它只是所有的磁盘I/O吗?您说过,当您引用的工作簿已经打开时,速度会更快。如果它是打开的,这意味着它在内存中,因此该文件没有磁盘I/O。如果我是对的,那么买一个SSD(我假设你是在一个平板硬盘上)并保存你的excel文件应该会有所帮助。另一方面,似乎将所有数据移动到数据库(例如SQL、Access)比将其存储在许多不同的excel文件中更合适。