我一直在打击我的头撞了大约一年的时间,我只是在关键时刻。
业务问题:我们使用名为Compeat Advantage(总帐系统)的软件,它们提供了一个Excel加载项,允许您使用函数从Microsoft SQL数据库中检索数据。问题是它必须为具有该功能的每个单元调用数据库。平均而言,调用和检索数据大约需要0.2秒。不错,除非报告中有这些数量。我们用它构建的标准报告有大约1,000个电话。因此,通过数学生成报告只需3分钟。
同样,完全自定义报告本身并不是一个糟糕的时间。我试图解决的问题是运行的较小报告之一,在某些情况下,我们必须为每个位置生成30个相同报告的变体。
功能论证是;单位[字符串],帐户[字符串],开始日期,结束日期。所有这些都在SUM()中检索所有信息,导致返回一个[Double]。
SELECT SUM(acctvalue)
FROM acctingtbl
WHERE DATE BETWEEN startDate AND endDate AND storeCode = Unit(s) AND Acct = Account(s)
寻求解决方案:对于标准报告,检索的数据只有三种变体(当前年份,上一年度和预算值),如果它们都是批量检索的,但在详细的表格/数组中,3分钟的报告将降至生产不到一秒钟。
我想找到一种方法来检索订单项详细信息并在本地存储以进行访问,而无需为工作表上的每个函数调用创建ODBC。
SELECT Unit, Account, SUM(acctvalue)
FROM acctingtbl
WHERE date BETWEEN startDate AND endDate
GROUP BY Unit, Account
帮助:我没有找到一种功能性的方法来做到这一点。我遇到的最大问题是数据的范围/持久性。很容易从数据库中调用我需要的所有数据,但保留它以供使用会让我感到害怕。由于这些是调用后的电子表格函数,因此变量中的数据被释放,因此我最终会在同一位置。工作表上的每个函数调用都需要0.2秒。
我已经尝试将数据存储在CSV文件中,但是继续存在数据处理问题,即将其从CSV移动到数组以搜索和求和数据。我不想操纵注册表来存储信息。
如果我想要这个工作,我将得出结论我将需要调用数据库,将数据存储在.veryhidden选项卡中,然后从那里向前拉。
对于我应该使用什么过程,我们将非常感激。
答案 0 :(得分:0)
好!
幸运的是,Google-fu发现了一个可以解决的问题。
VBA - Update Other Cells via User-Defined Function这提供了许多答案。
除了他的代码之外,我不得不添加代码以使该表计算UDF被调用以检查触发器的时间。我通过做一个简单的单元格+单元格公式并在每次工作簿计算时都有一个随机数字来做到这一点。
我现在正在扩展“工作簿”部分中的代码以填补漏洞。
应该解决问题!