Tag: 用户定义的函数

在自定义函数中使用Application.StatusBar时,状态栏不会更新

我有一个我写的自定义函数(UDF),有时需要一段时间才能运行。 工作表被设置为只能手动刷新。 我希望在状态栏中显示进度,只要函数运行以便看到它的运行。 问题是,在函数内,Application.StatusBar似乎不起作用。 在潜艇内,我可以让它工作得很好(例如, 这是有效的 ),但在function它只是没有。 我已经逐行运行了代码,但状态栏仍然不会更新,并且不会引发错误。 有什么可以防止function与状态栏的工作? 我在Win10上运行Excel 2016。 编辑:这是实际的显示代码,从周围的编程的上下文: Function getCost(parameters) dim variables dim bOldStatusBar as Boolean <web query begins> bOldStatusBar = Application.DisplayStatusBar Application.DisplayStatusBar = True Application.StatusBar = "Calculating prices between " & Origin & " and " & Destination & "." DoEvents <clicking buttons in IE> Application.StatusBar = "Starting Data Import…" […]

复制和粘贴(使用右键单击复制和粘贴菜单)具有用户定义函数的单元使用udfs将所有单元更改为#N / A

问候stackoverflow社区! 我有一个Excelmacrosfunction的工作簿,其中包含相当数量的用户定义的function。 在Excel 2016中,虽然我select一个单元格= UDFNAME(param1; param2),并尝试通过右键单击副本复制其内容,然后粘贴(在菜单中的第一个选项)到同一列中的较低的单元格,每一个卖那个调用里面有一个udf(= UDFNAMEWHATEVER(param1; param2))会把#N / A变成我的。 全部刷新并手动重新计算不起作用。 据我所知,所有的udfs都有一个Application.Volatile语句。 如果我尝试重新评估每个单独的单元格,那么单元格的值将再次出现。 任何forms的帮助将非常感激。

从UDF返回一个Range不是数组

我已经创build了一个UDF,它将各种值,范围和数组input合并到一个数组中。 点击ctrl shift input它作为一个数组公式,意味着VALUE(F4:G4)返回一个数组{1,#VALUE} 。 我的公式拼接值(5,“cat”),范围(“F6”,“B2:D6”),甚至像Value()返回的数组,并输出一个数组。 在图像的例子是 {0.283982519688569,0.161633595994901,0.521865473646119,0.675542592903341,0.119984734979722,0.842918190377968,0.882045093468071,0.57708164295789,0.305844376489788,0.365360349735221,0.131686453379672,0.557018723742854,0.511032693705543,0.746174410924489,0.863516943921978,5,"cat","Dog",1,#VALUE!} 代码如下: Public Function PROBABLY(ParamArray inputArray() As Variant) As Variant 'Takes a list of parameters, the first of which is an integer, and Dim inElement As Variant Dim outputArray() As Variant Dim subcell As Variant 'convert ranges to values 'creating a new array from the mixture of ranges […]

用户定义函数计算生产增长与variables开始date和增长configuration文件

用excel用户定义的函数挣扎,计算不同细菌贴片产生的总生产量,这些细菌贴片从不同的时间开始,但遵循相同的增长模式; 我试图简化我的问题如下: 示例表 个人资料表:我有一个2列×6行的表格(A2:B9),显示每周的细菌产量取决于菌落的年龄(A栏给出期间,B栏的产量:在前3周细菌产生1 /周,接下来的3周内每周产生2次等); 我把这张表称为我的生产PROFILE,这可能会因我拥有的细菌types(和其他环境参数)而异。 我已经在这个特定的例子中做了决定,为了让每个时期的人口增长都很简单,增长值当然可以通过一个函数(线性的,指数的,衰减因子等等)来生成,我猜如果我可以解决这个问题,增加一个复杂的增长function不应该是一个问题。 结果表格:然后我有一个3列20行的表(A14:C33),显示了超过20周的时间(我的20行,编号1到20列A),当我开始一些细菌培养(第3周,2在第6周等),我称之为我的RESULT表 我想在结果栏C中显示每周殖民地的总产量。 我试着创build一个PROD(周,PROFILE)函数,我把“week”和“PROFILE”定义为变体,其中“PROFILE”实际上与我的PROFILE表相关。 当“星期”是一个单独的单元格(即PROD(A18,PROFILE)= 2)但它不适用于范围时(PROD(A14:A33,PROFILE)返回错误消息) Function PROD(period As Variant, profile As Variant) As Variant r = profile.Rows.Count If profile(1, 1) >= period Then PROD = profile(1, 2) Else For i = 2 To r If profile(i, 1) >= period Then If profile(i – 1, 1) < period Then […]

创buildExcel用户定义函数以匹配列表中的同义词

在我的工作上,我们有几个出租物业,我们pipe理。 这些属性中的每一个都可能有不同的名称。 例如,一个属性可能被称为琥珀网关,白金网关,网关等。我们可能有500-600 Excel工作簿,其中有不同types的信息,我可能会被要求从各种信息中提取信息。 缺乏一致的命名方法使我无法使用标准的索引/匹配function来查找数据。 我不确定这是否是最好的解决scheme,但是这是我解决问题的方法。 我创build了一个工作表,它具有列A中所有属性名称的列表。任何关联的名称都列在列B,列C中同一行的右侧,等等。 只是为了简单,说只有5个属性,我所有的数据是在A1:E5。 然后说我感兴趣的财产是在F1和我想“匹配”的财产清单是在G1:G5。 所以我的数据看起来像这样: River Stream Creek Brook Rivulet Apple Fruit Rock Boulder Stone Slab Candy Dessert Sweets Forest Trees 鉴于“巨石”一词和下面的列表: Candy Fruit Creek Slab Forest 我的目标是返回同义词“slab”的列表位置 – 在这种情况下,4.我想我可以使用下面的数组公式替代Match函数。 做到这一点: {=SUMPRODUCT(–(INDEX(A1:E5,SUMPRODUCT(–(A1:E5=F1)*ROW(A1:E5)),) =G1:G5)*IF(G1:G5<>"",MATCH(G1:G5,G1:G5,0)))} 现在这个公式有点笨拙,我希望把它翻译成一个UDF,使它更容易处理。 我不熟悉VBA,经过一番search之后,我意识到VBA逻辑的工作方式与Excel公式逻辑完全不同。 具体来说,我不认为我可以像在SUMPRODUCT函数中那样使用=来强制我的查找网格在VBA中变为TRUE / FALSE值。 我是否必须学习VBA才能将其作为UDF来实现,还是有其他解决scheme? 实际上,我的查找网格(A1:E5)将在外部工作簿中。 如果我的尝试完全不符合标准,我可以接受其他解决scheme。 我知道匹配公式函数支持通配符,但是在名称差别很大的情况下,它不起作用,所以我希望能有更全面的内容。 这是我第一次在这里问一个问题,所以请让我知道,如果这是属于不同的地区,或者有任何礼节我忽略。

在Excel 2007中使用UDF中的表

我正在写一个UDF的Excel 2007,我想传递一个表,然后在UDF中引用该表的部分。 所以,比如我的表格叫做“Stock”可能看起来像这样: 名称中的成本项目 玩具熊£10 10 棒棒糖20p 1000 我有一个UDF,我想要计算剩余库存中所有项目的总成本(实际的例子要复杂得多,如果没有非常复杂的公式,就不能真正做到) 理想情况下,UDF的语法看起来像这样 TOTALPRICE(Stock) 从我的工作中可以看出,UDF将会有签名 Function TOTALPRICE(table As Range) As Variant 我遇到的麻烦是如何引用表的列并遍历它们。 理想情况下,我希望能够引用列标题(所以像表[成本])。

在条件格式中使用加载项中的UDF

我有一个附加的xla文件,用于存储我经常使用的VBA代码。 该function存储在加载项模块中。 Public Function IsFormula(cell_ref As Range) IsFormula = cell_ref.HasFormula End Function 如果将其input到单元格中,则正确返回True或False: =IsFormula(A1) 但是,当我尝试使用公式选项创build新的格式设置规则时,出现此错误“您无法使用其他工作表或工作簿对条件合成条件的引用”。 错误不是因为引号引起的。

VBA UDF多单元格引用

我正在尝试创build一个UDF,它从4个选定的单元格中取值,并执行一个函数。 但是我不知道如何编写函数来识别单元格的值。 我现在写的方式我需要input一个值。 任何人都可以帮助我这个相对简单的问题? 这是我迄今为止。 Function solubility(anion As String, cation As String, carbon1 As String, carbon2 As String) 编辑 因此,例如,我试图select单元格A,C,E和G,它们包含Tf,Mi,Ch和Ch的值。 然后我将使用这些单元格引用一个范围内的对应值来计算并显示一个最终值。 整个代码在下面提供。 Function solubility(anion As String, cation As String, carbon1 As String, carbon2 As String) Dim sum As Double Dim ncavalue As Long, nanvalue As Long, ncb1value As Long, ncb2value As Long Dim nca As […]

Excel VBA UDF – 未能将由UDF产生的变体数组作为第二个UDF中的input

我正在努力使用由我已经写作为另一个UDF的参数的UDF产生的数组。 该函数返回#value错误。 我无法确定问题出在哪里。 下面是代码。 任何帮助/build议将不胜感激;) 这一个工程.. Function fTA_GetSMA(ByRef varData As Variant, ByRef lPeriod As Long) As Variant ' This function computes a simple moving average over a defined period. Dim l As Long Dim dSum As Double Dim var() As Variant Application.Volatile varData = varData.Value2 ReDim var(LBound(varData, 1) To UBound(varData, 1), 1) For l = […]

当xlCoerce返回一个值时,它是否再次在单元格中计算公式?

当我在Excel中用C#编写一个简单的UDF时,我遇到了一个问题 该function使用这个: var reference = XlCall.Excel(XlCall.xlfCaller); string oldValue = ((ExcelReference)reference).GetValue().ToString(); 这将导致循环引用错误( GetValue尝试通过再次调用UDF来重新评估单元格),除非我指定了IsMacroType=true ,它将该函数标记为类2(将#添加到公式中)。 我不知道如何连接到循环错误。 但我猜ExcelReference.GetValue()有时会评估单元格,有时不是? 看来2类只影响xlfCaller , 后来我检查了ExcelReference的源代码,事实certificate,它实际上是调用xlCoerce。 另外,我注意到当我在单元格上按F2时,无论单元格是什么, GetValue()返回0。 而当我按Ctrl + Alt + F9强制重新计算所有, GetValue()返回以前的计算值。 有人能再详细说一下吗? xlCoerce是如何在单元值/公式上工作的,第二类如何影响它?