问题标签 [excel-udf]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
613 浏览

c# - 在后台线程中使用 PublishObject.Publish() 重置工作簿的计算模式

我正在创建一个 Excel 加载项,该加载项实现IDTExtensibility2并具有一个使用 Excel 的PublishObjects发布工作表范围的函数

我正在使用 Visual Studio 2008 和 Excel 2007,以下是我的代码:

上面的代码按预期工作,当我的工作簿处于自动公式计算模式时,我得到 Output.htm。

但是,如果工作簿处于手动模式(并且在调试器中我看到它s_Application.Calculation设置为xlCalculationManual),则行会Publish(true)强制活动工作表上的所有 UDF 重新计算。

换句话说,在Publish(true)完成之前,我再次调用了我的PublishRange()方法,但这次s_Application.Calculation设置为xlCalculationAutomatic.

我还发现同一工作簿中其他工作表上的功能不受影响(不知道为什么)。

问题:有没有办法避免这种计算模式重置?

我自己的函数被调用不是问题,我总是可以在其中添加一些布尔标志,但工作表会有其他函数,我所做的任何事情都不能调用。

顺便说一句,从主线程调用时问题不存在DoWork,这是特定于运行后台线程的。

0 投票
2 回答
1821 浏览

vba - 尽管有值,Excel VBA 单元格仍返回“0”

我正在处理一项任务,我需要使用 Google 的 oAuth 2.0 集成从 Excel 获取 Google Analytics API 的访问令牌。

初始请求通过传入存储在我的工作表中的单元格中的客户端 ID、密钥和身份验证令牌来工作。

我正在使用的 UDF 如下所示:

在我的工作表中,我有一组调用该函数的单元格:

正如我上面所说,初始请求工作正常,并将访问令牌、刷新令牌和访问令牌到期日期输出到单元格 B5、B6 和 B7 中。

但是,当我再次运行请求时,我希望 B5、B6 和 B7 中的值传递到我的 UDF,它们以“0”的形式出现。似乎它们在我触发更新和 UDF 执行之间被重置。是否有可能获得这些价值?

我遇到过这个页面http://fastexcel.wordpress.com/2012/01/08/writing-efficient-vba-udfs-part-8-getting-the-previously-calculated-value-from-the-calling -cells/这似乎与我正在尝试做的类似,但这似乎是针对单个字段而不是数组?

我在 Excel 和 VBA 方面完全没有经验,因此欢迎任何帮助。

谢谢!

0 投票
1 回答
3122 浏览

excel - 当工作簿移动到与加载项不同的文件夹时,如何保持对加载项 UDF 的引用?

我编写了一个提供 UDF(用户定义的工作表函数)的 Excel 插件。

一切都很好,直到一个用户使用这些功能将他的工作簿发送给另一个用户,或者只是尝试在多台计算机上使用该工作簿,其中加载项已安装到不同的路径。

即使路径的唯一区别是驱动器号,当在另一台计算机上打开工作簿时,旧的完整路径也会出现在所有 UDF 前面的公式中,并且公式会返回错误。

一种处理方法是搜索和替换工作簿中的所有公式,用空字符串替换路径。然后,公式会为当前计算机上的加载项路径自行重置。有时我必须进入 VBE 并运行 CalculateFullRebuild 以使公式生效。虽然它有效,但对技术含量较低的用户提出了很多要求,而且对于那些经常移动工作簿的用户来说,不得不经常这样做很烦人。

还有——COM插件有这个问题吗?我的加载项是 xla。虽然我对此感到好奇,但在这种情况下这是一个有争议的问题,因为 COM 插件在 Macintosh Excel 上不起作用,我需要这个插件才能跨平台工作。

更新:

根据要求,这是一个屏幕截图:

屏幕截图显示公式中的路径

此屏幕截图显示了如果将加载项放在 C:\Fred's Stuff\Fred's Excel Stuff\MyAddin.xla 中的 Fred 将他的工作簿发送给 Martha,Martha 将相同的加载项放在另一个路径中,例如 C: \Martha's Files\Martha's Excel Files\MyAddin.xla,然后 Martha 打开 Fred 发送的文件。

如果 Martha 删除路径,公式中只留下“=MyUDF()”,Excel 会在 Martha 的计算机上找到 Martha 放置的路径中的 MyAddin.xla(假设她之前在 Excel 中安装了 MyAddin.xla 作为加载项),并正确解析公式。

0 投票
1 回答
2038 浏览

excel - 导致延迟的宏

我正在运行一个使用 5 个宏和大量公式的程序。我在这里向您寻求帮助的一些宏。将程序放在一起后有很多滞后。我的意思是,如果我们删除一行,我们必须等待 1 到 2 分钟才能完成该过程。关于我应该看什么的任何想法?我知道这听起来有些模糊,但我不知道从哪里开始寻找解决滞后的问题。我看的是计算机、服务器还是程序?

0 投票
1 回答
151 浏览

vba - UDF 导致滞后

感谢 Noodles 的回答,我知道我的 UDF 是我的 excel 工作簿中滞后的主要原因。可以重写此 UDF 以不导致延迟吗?我正在将此 UDF 与 excel 公式一起使用(例如 =IF(OR(ISNUMBER($DH2),$DH2>" "),LookUpConcat($B2,Usage!$AM$2:$AM$5000,Usage!$AS$2: $AS$5000,""),""))。也许公式需要改变。该公式通过许多单元格下拉,并调整为在工作簿中的 2 个不同列中工作。我不是 IT,所以 Noodles 对我最后一个滞后问题的回答并没有被我完全理解,但给了我足够的信息,让我知道这是导致最大滞后问题的宏。

结束功能

0 投票
3 回答
876 浏览

excel - 将带有 udf 的工作表复制到新工作簿

我有一个包含 5 张完整 UDF(用户定义函数)的工作簿。
我需要将这 5 张纸复制到一个新的工作簿中,但我只需要这些值。
问题是,当我复制这些工作表时,所有带有 UDF 的单元格都被 #value 破坏了,因为我在这个新工作簿上没有我的宏。

我无法复制该模块,因为许多用户将使用此工作簿,并且他们的 Excel 可能不允许我操作vba project.

我尝试仅在工作簿之间复制和粘贴值,但它不起作用。我认为这是因为我的工作表有很多合并的行和列。Excel 显示错误消息。我将在这里从葡萄牙语翻译成英语,也许 Excel 不使用这个完全有效:

此选项要求合并的单元格大小相同。

我不明白这个错误。我什至尝试手动执行此操作:复制整个工作表(右键单击、移动和复制),然后选择原始工作簿上所有使用的范围 ctrl+c,然后选择新工作簿中的第一个单元格,然后 ctrl+v 和然后只粘贴值。Excel 会引发错误。我还尝试在按 ctrl+v 之前选择新工作簿上的整个范围。同样的问题。

我不知道该怎么办。我现在正在做的是仅复制和粘贴原始工作簿中的值,然后将整个工作表复制到新工作簿中。问题是这个操作破坏了我原来的工作簿,所以我必须关闭它并重新打开,这是我不想做的。

有人对如何进行有任何想法吗?

0 投票
2 回答
772 浏览

vba - 将 Excel UDF 放入 Worksheet 对象(而不是在模块中)

我怀疑答案是“不可能的”——但询问这个优秀的社区并没有什么坏处!

我有一个特定工作表独有的 Excel 2013 UDF(用户定义函数)。

目前,我在包含工作簿的“模块”中有这个 UDF。但我想做的是将 UDF 代码放在“工作表对象”中,以便它适用于该特定工作表。

我当然试过了,但它不可见,所以我自然得到一个#NAME?错误。我已经尝试在函数前面加上 Public(这无论如何都会破坏对象),但无济于事。

有谁知道一个特定的技巧?

在此先感谢,尼克。

0 投票
2 回答
112 浏览

excel - 在工作表函数中使用 UDF 返回值

我创建了一个UDF返回特定列中最后填充的行。现在,它返回最后填充行的行号。我的问题是,我将如何在工作表函数中使用这个值?

例如,=COUNTBLANK("B2:B&LastRow(2)), 其中LastRow(2)返回一个整数。

0 投票
1 回答
969 浏览

vba - 带有自定义函数的公式工作正常,但随后变成 #Value 错误

我有一位使用 Excel 2003 的同事。我在 .xla 插件中为他制作了一些自定义函数。他在加载项中自定义函数的路径问题上遇到了太多麻烦,所以我将自定义函数移动到工作簿中,他根据需要制作了该工作簿的副本。

当我将它发送给他时,从那时起每当我向他发送更新版本时,当他打开工作簿时,他发现所有使用自定义函数的公式都返回 #Value 错误。每次,相同的工作簿对我来说都很好,在 Excel 2003 中也是如此(我也有更高版本的 Excel,但我使用 2003 与他一起工作)。

然后,如果他重新计算,什么都不会发生。我让他尝试对等号进行搜索和替换,这通常会强制受影响的公式重新计算,但没有效果。我们能够让公式重新开始工作的唯一方法是手动激活单元格(F2,或单击公式栏中),然后按 Enter。我尝试了一个 VBA 循环来使用 SendKeys 发送 F2 然后输入,它在一些单元格上工作,但不是全部。

在与他一起工作了一段时间后,一些公式再次起作用,而一些公式仍在返回#Value,我让他保存工作簿并将其发送给我。如果我得到相同的行为,我希望在所有公式中看到#Value。但相反,我看到对他有效的公式对我有效,而为他返回#Value 的公式对我也有效。因此,当他打开我发送的文件时,无论是什么使它们从正常工作变为返回#Value,对我来说似乎都没有发生,在同一个版本的 Excel 中。

知道为什么会发生这种情况吗?有任何故障排除建议吗?

更新:

我被要求提供一个受影响的自定义函数示例。这是一个,“GetCompanyName”:

更新 2:

在工作中我没有 Excel 2003,而是雇主只为我提供了 Excel 2007。我看到他的同一个工作簿在 Excel 2007 中打开正常;所有功能正常工作。昨晚在家里和他通电话时已经很晚了,我们时间紧迫,我没有测试 2007 年、2010 年和 2013 年。

但是,他真的很讨厌 Ribbon,所以他仍然使用 Excel 2003。关于他可以在 Excel 2003 中做什么来解决这个问题的任何想法?

更新 3:

更新了代码以向 Ron 显示所有变量都已声明。

0 投票
1 回答
1170 浏览

java - HIVE:执行错误,从 org.apache.hadoop.hive.ql.exec.FunctionTask 返回代码 [-101](未知错误)

我将 UDF 编写为流:

然后我通过 Eclipse 导出这个测试项目的 jar(udftest.jar)。之后,我udftest.jar在 hive 中添加 jar:

执行失败!

我不知道为什么!我搜索互联网但没有处理这个问题!