Tag: 用户定义函数

Excel VBA:如果…则在不更改单元格值的情况下退出UDF

我已经看了一个答案,但只能find有关正常的Excel函数的东西。 情况:我有用Excel定义的用户定义函数(UDF)。 我会提供代码,但我认为这不是特别重要。 我想阻止UDF在某些时候计算(因为它是跨越几千个单元格,当我在工作表中处理其他事情时需要closures,以防止长时间的等待时间)。 目前,我用单元格B1(作为基本公式的输出)“Pause”来实现这一点,并且在我的UDF开始处的一个If语句检查这个,并在input暂停时退出函数。 Public Function SIMILARITY(ByVal String1 As String, _ ByVal String2 As String, _ Optional ByRef RetMatch As String, _ Optional min_match = 1) As Single Dim b1() As Byte, b2() As Byte Dim lngLen1 As Long, lngLen2 As Long Dim lngResult As Long If UCase(ActiveSheet.Range("B1").Value) = "PAUSE" Then Exit Function ElseIf […]

在UDF中使用VBA代码search时,是否可以使用FindPrevious?

我正在尝试使用VBA来处理基于“查找”函数的结果,因为它比查询结果的每个单元轮询要快得多。 我已经把它切回到它是重现错误的基础知识,我仍然得到“对象variables或块variables未设置”这部分的错误SearchRange.FindPrevious.Address (你必须停下来,并把它一步到得到错误,UDF的只是退出了debugging模式以外的错误,而没有返回错误) 这里是kicker,当试图在表中使用UDF时出现错误,如下所示: =testfind("3206-1",E:E)但是当我在VBE的直接窗口中使用它时,如下所示: ?testfind("3206-1",Range("E:E"))我得到正确的结果$E$15295没有错误。 代码是: Function TestFind(FindString As String, SearchRange As Range) Dim ActiveAddress As Range Set ActiveAddress = SearchRange.Find(FindString) TestFind = SearchRange.FindPrevious.Address End Function 修改L42的变化,现在它的工作原理: Function TestFind(FindString As String, SearchRange As Range) Dim ActiveAddress As Range Set ActiveAddress = SearchRange.Find(FindString) TestFind = SearchRange.Find(FindString, , , , , xlPrevious).Address End Function

MOD函数在Excel VBA中独占使用长variables

已更新我正在清理这个职位后的决议。 总之,我正在为Excel计算下一个最高质数( =NextHighestPrimeNumber(100)返回101 )的用户定义公式。 当我开始试验时,我注意到这个公式在21亿左右会出错。 我以为它可能已经连接到我的variables,所以我尝试了DOUBLE,但我仍然收到错误。 这是function: Function NextHighestPrimeNumber(StartingNumber As Double) As Variant Dim CeilingTest As Long Dim i As Long If StartingNumber < 11 Then If StartingNumber > 6 Then NextHighestPrimeNumber = 11 ElseIf StartingNumber > 4 Then NextHighestPrimeNumber = 7 ElseIf StartingNumber > 2 Then NextHighestPrimeNumber = 5 ElseIf StartingNumber > 0 Then […]

对于Excel 2003,XLL中的UDF可以使用多个线程吗?

FYI 1:UDF =用户定义(工作表)函数FYI 2:XLL = Excel加载项(DLL – > XLL) 我正在使用Microsoft的Excel4()API在C / C ++中编写用于Excel的XLL加载项。 链接: http : //msdn.microsoft.com/en-us/library/bb687835.aspx 我有一个“复杂”的任务,我想使用多个线程来获得更好的性能。 虽然我明白在Excel 2003中的计算是单线程的,但我想知道我的UDF是否可以(a)产生线程来完成工作,(b)等待线程完成,以及(c)返回结果。 要非常清楚,我不会做任何Excel自动化,也不会在线程中调用Excel4()。 伪代码: 变体MyComplexUDF(变体input1,变体input2) { 线程t1 =新的WorkerThread(input1); 线程t2 =新的WorkerThread(input2); t1.join(); t2.join(); return [t1.Result(),t2.Result()]; } 表面上,这似乎是好的,但我不是在DLL / XLL和线程的专家。 PS我已经search了谷歌(高和低)这个答案,并没有find关于此事的任何事情。

如何将Excel公式转换为UDF?

我有一个公式来交换名称格式为“史密斯,约翰”的单元格中的姓氏。 =MID(A4&" "&A4,(FIND(" ",A4)+1),(LEN(A4)-1)) 我创build了一个function来利用这个function,它似乎起初工作。 function是: Function SwapNames(text As String) As String SwapNames = Mid(text & " " & text, (Find(" ", text) – 1, (Len(text) – 1)) End Function 我把我的工作簿转换成一个加载文件types,所以我可以全局使用它,现在它说Find函数是未定义的。 我在这里做错了什么?

EXCEL VBA用户定义的function – 否则无if

附加的代码在VBA上运行,但我不明白为什么有一个错误说,否则没有如果或如果没有结束如果。 我很确定,如果用if语句,我已经匹配了每一个结尾。 Sub teee()仅用于testingdecimalize函数。 这将是很大的检查代码,并告诉我什么是我的代码错误…我几乎接近完成一个项目,如果我可以解决这个function。 Sub teee() sss = "-1-21+" MsgBox (decimalize(sss)) End Sub Function decimalize(s As Variant) As Long Dim checkers As Variant Dim ab As Long Dim leftnum As Long Dim rightnum As Long Dim poneg As Integer checkers = s ab = 0 leftnum = 0 rigntnum = 0 poneg = 0 […]

如果单元格包含某些文本,则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 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 […]

在C#中运行时创build一个Excel工作表函数(UDF)

是否有可能在C#中dynamic创build工作表函数,即不使用方法属性方法? 或者这只是使用XLL支持的东西? 我正在寻找的是从源中检索函数列表(以及参数)并注册这些函数。 这些函数只是作为一个服务器的调用,所以这些函数的内容不是什么大问题。 感谢您的投入!

尝试使用UDF .xll在HPC网格上并行化Excel

我正在寻找并行Excel计算HPC网格上,我使用Excel 2007,所以我试图通过在XLL的UDFmultithreading,因为它是唯一的方法(至less在2007年)。 我想在C#中编写XLL,因为这个线程暗示我可以使用exceldna 。 但我不明白我应该怎么multithreading。 在multithreading中,我是否必须在C#中重写所有的VBA函数? 我可以创build几个线程,每个线程调用一个VBAmacros?