Tag: 用户定义的函数

具有无限参数的UDF

我正在写一个用户定义函数(UDF),它将一些单元格作为参数。 这些单元格包含相同的数据,但具有不同的精度; 该function显示可用的最佳精度。 函数的参数是按照上升精度的顺序写的。 这是一个例子: +—+—————–+———————+ | | A | B | +—+—————–+———————+ | 1 | Best | =get_best(B5;B4;B3) | | 2 | | | | 3 | provisional | 1 | | 4 | definitive | 2 | | 5 | etched in stone | 12 | +—+—————–+———————+ 函数显示12,因为单元格B5中的信息比B4和B3的值更好。 由于这个原因,B5写在公式列表中的B4和B3之前。 我的UDF代码如下: Public Function get_best(r1 […]

vba sumifs越来越困惑date,错误的结果在四月

我跟着这个其他堆栈溢出的问题 ,是非常开明的,但是当我做了结果的理智检查,我在四月得到这个特殊的奇怪的行为,四月任何rev_date产生0的结果。我已经尝试不同的date和rev_date和grid_date间隔,但同样的事情发生,我可以指责系统dateconfiguration? 我错过了什么? 恕我直言,我宁愿使用优秀的公式,而不是UDF,但是这个奇怪的结果是在我心中痒痒。 使用这个UDF: Public Function GRIDSALES(rev_date As Date, grid_date As Date) As Double Dim Team As Range Dim First_PD As Range Dim PAmount1 As Range Application.Volatile (True) Set PAmount1 = Sheets("Sheet1").Range("$F6:$F12") Set First_PD = Sheets("Sheet1").Range("$E6:$E12") Set Team = Sheets("Sheet1").Range("$D6:$D12") GRIDSALES = Application.WorksheetFunction.SumIfs( _ PAmount1 _ , Team, "<>9" _ , First_PD, ">=" & […]

Excel UDF查找具有给定值的范围中的第一个和最后一个单元格 – 运行缓慢

我正在写一个函数,它需要一个列的范围,并find该列中的第一个和最后一个单元格有一定的价值。 这给出了第一个行号和最后一个行号,然后用于返回另一列中相应的子范围。 这个想法是使用这个函数,我可以将Excel函数应用到一个范围的(连续的)子部分。 例如,假设我有一个苹果和香蕉价格不同的表,所以苹果的所有价格都是先来的,然后是香蕉。 我想find苹果的最低价格和香蕉的最低限度,但select整个范围,而不改变最小化的范围。 我将使用我所需的function来提供范围到Excel的MINfunction,其中只包括苹果,或只是香蕉,而不必手动select这些子范围。 一个MINIF,如果你愿意的话 – 就像SUMIF的一个弱版本,但是对于MIN(可能还有许多其他function)。 我find了一个办法,但是运行速度非常慢。 我认为这可能与for循环有关,但是我不太了解Excel / VBA的效率以了解如何改进它。 我在Excel表上使用这个代码,所以我传递的列是一个表对象的命名列。 我在Windows 7 Enterprise上使用Excel 2010。 感谢任何帮助。 即使是有条件地将函数应用于与此相背离的范围的解决scheme也是受到欢迎的。 码: ' ParentRange and CriterionRange are columns of the same table. 'I want to extract a reference to the part of ParentRange which corresponds 'by rows to the part of CriterionRange that contains cells with […]

如何使用VSTO 2005 SE与C#Excel加载项创buildExcel 2003 UDF

我看到一篇关于在VSTO托pipe代码中使用VBA创buildExcel UDF的文章: http : //blogs.msdn.com/pstubbs/archive/2004/12/31/344964.aspx 。 不过,我想使用VSTO 2005 SE在C#Excel加载项中工作,任何人都可以帮忙吗? 我试过罗曼指出的技术,但是当试图加载Excel时,我得到以下exception: 定制程序集无法find或无法加载。 你仍然可以编辑和保存文件….. 细节: Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH)) ************** Exception Text ************** System.Runtime.InteropServices.COMException (0x80020005): Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH)) at Microsoft.Office.Interop.Excel._Application.Run(Object Macro, Object Arg1, Object Arg2, Object Arg3, Object Arg4, Object Arg5, Object Arg6, Object Arg7, Object Arg8, Object Arg9, Object […]

如何通过Application来同时运行两个Sub。

我有一个子如下: Function SumOf(Byval a As Integer, Byval b As Integer) Call CalHelper.Sum(a,b) Call CalHelper.Sum(a+1,b+1) SumOf = "OK" End Function CalHelper模块包含: 'BEGIN Declare Private mWindowsTimerID As Long Private mApplicationTimerTime As Date Private numberA As Variant Private numberB As String 'END Decalare 'Register `user32` lib's functions BEGIN Public Declare Function SetTimer Lib "user32" ( _ ByVal HWnd […]

如何从vsto插件中以编程方式加载自动插件(dll)

VSTO VS2008 SP1 .NET 3.5 Excel 2007 我是一个.net noob。 我试图加载自动插件,这是一个Excel应用程序/自动化插件(这是一个DLL不xla或xll)从vsto插件的ThisAddIn_Startup()方法的vsto插件。 从谷歌我得到了下面的解决scheme,不工作。 private void ThisAddIn_Startup(object sender, System.EventArgs e) { Application excel = Globals.ThisAddIn.Application; //Also tried without display alerts being set to false excel.DisplayAlerts = false; foreach (AddIn addin in excel.AddIns) { if (addin.progID.Equals("MY_ADDIN_PROG_ID")) { Debug.WriteLine("Addin installed is " + addin.Installed); addin.Installed = false; Debug.WriteLine("Addin is: " […]

如何创build一个返回二维数组的UDF

并将结果绘制在Excel中的二维单元格中? 我正在使用C#,.NET,Excel-DNA,加载项快速RTD, 谢谢 编辑我试过http://excel-dna.net/2011/01/30/resizing-excel-udf-result-arrays/ ,不适合我。 我想要这样的MyUDF(param1,param2)返回一个基于param1的长度的表的2D数组,param2说param1是“a,b,c”,param2是“高,低”,预计返回一个数组[3,2],并将结果显示在3行2列中 我也试过Excel的ExcelDNA C#/尝试复制彭博BDH()的行为(写入数组后,Web请求) ,它工作正常。 但是我的要求是后台工程师会调用RTD函数,RTD函数是一个多步骤的过程,首先它会login(asynchronous,然后订阅(asynchronous),当我从后台工作者调用xlcall.RTD时,会给出访问违例

如何从Excel udf返回数组?

我想从我的Excel UDF返回一个二维数组,但它似乎只返回第一个元素: public object[,] Get2DArray() { object [,] a = new object[2, 2]; a[0,0] = 0; a[0,1] = 1; a[1,0] = 2; a[1,1] = 3; return a; } 调用如下所示: =Get2DArray() 我究竟做错了什么? 编辑:数组的大小可能会不时变化,所以我不想指定结果将填充的范围的大小。

创buildexcelasynchronousfunction

我有一个从互联网上获取数据的Excel函数。 问题是这个函数需要很长时间才能执行,并且会减慢所有的速度。 如果我可以在不改变公式的情况下改变单元格的值,那将会是惊人的! 所以如果我调用返回0的函数=GetNumOfEmployee() ,然后从我的插件,当我得到的结果,我可以用100例如replace该单元格的值。 如果我这样做,公式就会丢失,我不希望发生这种情况。 我为了保存这个公式而做了什么,是通过这样做来改变单元格的格式: this.Application.ActiveCell.NumberFormat = 5; 如果活动单元格的值为0,则该行代码将replace为非常酷的值。 我得到保存公式,我有一个新的价值。 这种方法的问题是,我得到了很多的计算,每次我写这行: this.Application.ActiveCell.NumberFormat = 1234; excel保存在: 很快我就达到了excel所能实现的最大数目的格式化。 在1分钟内,该列表大约有500个格式,很快我无法删除它们。 如果我以编程方式删除它们Excel的行为有点慢,我每次删除一个格式时,我得到的窗口spining鼠标图标。 所以简而言之,一旦我得到了我需要的结果,我将喜欢replace一个单元格的值而不更改它的公式 。 我应该把值放在单元格的右边吗?

未能将parameter passing给VBA for Excel 2007中的UDF

我有一个复杂的迭代电子表格,我想用UDF来计算热交换器的传热系数。 该函数有5个参数(2个string和3个双打)。 string和1双通过就好了。 剩下的两个似乎根本没有经过。 有问题的观点的手表显示他们等于零。 我尝试重新定义参数作为变体,然后我可以在“value2”字段中find我想要的值。 但是,一旦我尝试访问它(通过varName.Value2)它消失(手表突然列出该字段为“空”)。 传递给有问题参数的函数的单元严重依赖于电子表格的其余部分,并且它们的值几乎在每次迭代中都改变。 有没有人看过这个,并知道一个解决方法?