Tag: 用户定义的函数

Excel UDFfilter范围

我有一个函数,将一系列值作为input(只是一列)以及一些阈值。 我想返回一个范围,该范围被过滤以包含来自原始范围的大于阈值的所有值。 我有以下代码: Public Function FilterGreaterThan(Rng As Range, Limit As Double) As Range Dim Cell As Range Dim ResultRange As Range For Each Cell In Rng If Abs(Cell.Value) >= Limit Then If ResultRange Is Nothing Then Set ResultRange = Cell Else Set ResultRange = Union(ResultRange, Cell) End If End If Next Set FilterGreaterThan = ResultRange […]

Excel VBA用户定义的函数:调用工作表函数中的单元格

我在Excel中有一个用户定义的函数,我在多个工作表中运行。 我正在尝试使用Cells(i, j)来拉动单元格的行和列在我的函数被调用的表中的值 。 相反,当我点击“立即计算”button时, Cells(i, j)将活动工作表中单元格[i,j]的值拉出,并且自动计算不起作用。 我究竟做错了什么? 完整的function在下面,不知道是否需要回答我的问题。 Option Explicit Option Base 1 Option Compare Text Function recordString(ByVal width As Integer, ByVal height As Integer, ByVal firstCell As Range) As String Application.Volatile Dim tempString As String tempString = "" Dim i As Integer Dim j As Integer For i = firstCell.Row To firstCell.Row + […]

复制工作表时出现#VALUE错误

我使用的UDF基本上是一个简化的查找。 这里是代码: Function SUELDOBASICO(Columna As Integer) As Double SUELDOBASICO = Application.WorksheetFunction.VLookup(Application.Caller.Parent.Cells(Application.Caller.Row, 3), Application.Caller.Parent.Parent.Sheets("Escalas Salariales").Range("A3:DJ23"), Columna, False) End Function 我注意到,有时当复制工作表(在同一个工作簿)时,我得到一个#VALUE错误。 如果我在Excel中“编辑”单元格,只要使用F2和Enter就不会改变,错误消失。 它曾经发生,当简单地改变窗口(例如对Firefox,并且回到Excel)。 这就是为什么我在代码中使用Caller和Parent原因。 它几乎是完全固定的,除非有时复印纸张。 我似乎无法find错误的来源。 请帮助。

如何获得一个基于单元格颜色的UDF在Excel中自动更新

我发现一个UDF根据它们的颜色来计算单元格的值。 它在我第一次使用它的时候非常完美。 但是,现在当我更改单元格的颜色(颜色指示单元格是否已经计划或执行)时,在现有的工作簿中,它不会自动更新。 见下面的代码: Function SumByColor(CellColor As Range, rRange As Range) Application.Volatile True Dim cSum As Long Dim ColIndex As Integer Dim cl As Variant ColIndex = CellColor.Interior.ColorIndex For Each cl In rRange If cl.Interior.ColorIndex = ColIndex Then cSum = WorksheetFunction.Sum(cl, cSum) End If Next cl SumByColor = cSum End Function 我曾尝试Application.Volitale ,但没有运气。 F9工程来更新容纳该function的单元格。 但是,如果我忙,自动更新会更好,或者离开我的WS。 […]

Excel用户定义函数不在单元更新上调用

我有一个用VBA编写的用户定义的函数,它以一种绘制的形状(交通灯由三个圆圈组成)更新颜色。 工作表单元格中的调用看起来像这样: setTrafficLight(A1, "Oval 1", "Oval 2", "Oval 3") 其中A1是包含例如“绿色”或“红色”的单元格。 其他参数是形状的名称。 我有一个问题,该函数被调用并删除撤消历史logging(在Excel中调用用户定义的函数会禁用较旧的撤销条目)。 为了解决这个问题,我注册了一个空的撤销function Application.OnUndo "Undo SetTrafficLight", "undoSetTrafficLight" 在我的setTrafficLight函数中, Application.Volatile被设置为False这样函数不会在每次页面上的任何值发生变化时被调用。 但是现在当A1中的input值改变时,函数甚至没有被调用。 随着Application.Volatile = True作品,但撤消不能正常工作。 如果我完全删除Application.Volatile那么更新工作正常,但只能使用一级撤消。 任何想法如何解决这个问题?

从工作表中调用的Excel VBA UDF是否可以传递除“范围”之外的任何Excel VBA对象模型类的实例?

我99%肯定答案是“不”,但是我想知道是否100%肯定的人可以这样说。 考虑一个VBA UDF: Public Function f(x) End Function 当你从工作表中调用这个时,'x'将是一个数字,string,布尔值,错误,数组或者'Range'types的对象。 它可以是,例如,“图表”,“ListObject”,或任何其他Excel-VBA对象模型类的实例吗? (这个问题出现在我转移到Excel 2007并玩桌子,并想知道如果我可以写UDF接受他们作为参数,而不是Range 。答案似乎是没有,但后来我意识到我不知道一般来说肯定。)

如何在运行时显示UDF的工具提示?

在excel中,当你input函数Vlookup as =vlookup( ) vlookup =vlookup( )的时候,我们按下左括号( excel本身显示参数作为工具提示input,第四个参数显示为ComboxBox或DropDownList供你select。一个有很多参数的VBA函数,如果能够显示VLOOKUP的工具提示,用户将不需要记住混杂的参数,那么这个函数是非常好的。

VBA中的CDate函数有问题

我正在使用CDate将格式为string的特定date转换为Exceldatetypes。 我为这个转换写了一个小的UDF; 但是,当我作为一个内嵌函数运行该函数时,它将返回一个数字,并且调用单元默认格式被设置为数字types。 当我手动将其转换为datetypes时,Excel将显示正确的date条目。 所以,我需要知道是否有方法通过我的date转换macros将调用单元格的默认格式设置为datetypes。 否则,用户必须手动更改每个单元格的格式。 例如 Function Test() Test = CDate("2010/12/23") End Function

VBA Excel UDF保留原始值

我在VBA中有一个UDF非易失性函数,它需要一个全局variables(callbackVSTO)初始化。 这个函数驻留在xla或xlam(相同的行为) 如果variables尚不可用,是否有办法取消公式的计算? 在Excel自动重新计算模式下(我不想改变这种情况)每次打开工作簿时,Excel都会用我的函数重新计算单元格,将单元格中保存的值replace为“#ARG!”。 我知道如何返回空单元格,如果我的variables没有初始化,但有可能返回原始值? 我用debugging器检查过它已保存在工作簿中。 试图返回Application.Caller.Value2导致循环引用。 另外,如果将VBA代码embedded到工作簿(xlsm)中,或者工作簿采用xls格式,则不会调用函数(预期行为)。 但是,将工作簿转换为xlsx会导致在按照所述打开工作簿之后重新计算单元格。

有没有一种方法让VBA UDF“知道”其他function将会运行?

假设我有一个UDF,将在工作表中使用100,000次以上。 在这个function里,有没有一种方法可以让它知道在批处理中会被多次调用? 基本上我想要做的是每个function都创build待办事项列表。 我想做一些事情: IF remaining functions to be executed after this one = 0 then … 有没有办法做到这一点? 背景: 我想做一个UDF,将执行SQL查询用户只是给参数(date,小时,节点,types)。 如果你愿意在每次运行函数时真正执行SQL查询,那么这很容易实现。 我知道这很容易,因为我这样做,而且速度很慢。 我的新想法是首先让函数看看它正在查找的数据是否存在于全局cachingvariables中,以及是否不将它添加到全局variables“job-list”中。 我想要做的是当最后一个函数被调用,然后通过作业列表并执行最less数量的SQL查询并填充全局cachingvariables。 一旦cachingvariables已满,它将执行表刷新,以使所有其他函数再次被调用,因为在随后的调用中,他们将在caching中find所需的数据。