Tag: recursion

Excelrecursion过程来创build一个数组

我有以下数据: 我的目标是做到这一点: recursion子将创build一个填充材料的数组。 每次将材质设置为“精雕细琢”时,该arrays将在同一维度上添加另一个子材质,并添加“.1”。 例如:如果我们看弓,它是精心devise的,所以当完成时数组看起来像这样:Material:array(0,0,0)= Wood,Quantity:array(0,0,1)= 2,Level:array (0,0,2)= 1。 但是,子代会变成:材料:array(0,1,0)=分支,数量:array(0,1,1)= 2,Level:array(0,1,2)= 1.1 并且由于分支是制作的:材料:数组(0,2,0)=树,数量:数组(0,2,1)= 1,级别:数组(0,2,2)= 1.1.1。 然后:材料:数组(0,3,0)=叶,数量:数组(0,3,1)= 9,级别:数组(0,3,2)= 1.2。 然后查找下一个材质“Rope”并继续:Material:array(1,0,0)= Rope,Quantity:array(1,0,1)= 1,Level:array(1,0,2 )= 1,材料:array(1,1,0)= Web,Quantity:array(1,1,1)= 10,Level:array(1,1,2)= 2.1等等。 我的主要问题是我不熟悉recursion代码,我的逻辑似乎是错误的,所以我想我会寻求帮助,并问在这里如何可以做到。 这是我的代码到目前为止,这是部分工作: Sub Look(ByRef arrayMaterials) Dim item With ActiveSheet lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row End With With ActiveSheet lastColumn = .Cells(j + 2, .Columns.Count).End(xlToLeft).Column End With For i = 0 […]

通过DXLrecursion列出文件夹中的所有DOORS模块并写入Excel工作表

我希望有人能帮助我:(我之前search过其他问题是否适合…) 我试图用recursion的DXL函数将所有的DOORS模块列在一个特定的目录中,并将模块名称(完整path/名称)写入Excel工作表 这是我到现在为止…问题似乎是“Z”被重置为1了 在Excel VBA中,我调用这样的DXL脚本(工作): objDoorsApp.runStr ("#include <" & sInterface & ">;;createFolderNameForRecursion ()") 它调用函数来初始调用recursion函数:(工作也是) void createFolderNameForRecursion() { int z = 1 WriteAllModulesRecursively2ExistExcel(folder("/00_Platform/30Software/30_Basis_SW/IoStck"), z); } 这是recursion函数: void WriteAllModulesRecursively2ExistExcel(Folder f, int z) { Item i Module m string ausgabe,temp OleAutoObj objExcel = oleGetAutoObject("Excel.Application") OleAutoObj objBook OleAutoObj objSheet = null OleAutoArgs oleArgs = create Object oCur Module mCur […]

Excel UDF计算应返回“原始”值

我一直在努力处理VBA问题,我会尽可能地彻底地解释它。 我使用我自己的RTD实现创build了一个VSTO插件,我从我的Excel工作表调用。 为了避免在单元格中使用完整的RTD语法,我创build了一个UDF,从表单中隐藏了该API。 我创build的RTD服务器可以通过自定义function区组件中的button启用和禁用。 我想要达到的行为如下: 如果服务器被禁用,并且在单元格中input了对我的函数的引用,我希望单元格显示为Disabled 如果服务器被禁用 ,但function已被启用(并因此显示一个值的单元格)中input一个单元格,我希望该单元格保持显示该值 如果服务器启用 ,我希望单元格显示Loading 听起来很容易。 这是一个非function代码的例子: Public Function RetrieveData(id as Long) Dim result as String // This returns either 'Disabled' or 'Loading' result = Application.Worksheet.Function.RTD("SERVERNAME", "", id) RetrieveData = result If(result = "Disabled") Then // Obviously, this recurses (and fails), so that's not an option If(Not IsEmpty(Application.Caller.Value2)) Then // […]

recursion地打印VBA中的下一个字典

我想在VBA中打印嵌套字典。 基本上我有一个Dictionary ,其中每个键是一个String ,但每个值可以是一个String或另一个Dictionary 。 说我的Dictionary已经有了价值 { "FOO" => "BAR" , "HELLO" => { "WORLD => ":)", "OTHER" => ":(" } } 我想在Excel电子表格中显示: FOO |BAR | HELLO|WORLD|:) HELLO|OTHER|:( 我的问题是,我需要find一种方法来猜测每个键下的值是什么types,所以当我调用dict("HELLO")我可以显示值,如果它是一个string或如果它是一个字典调用同样的function。 为了做到这一点,我需要知道: 如果有一种方法可以知道字典中存储的值的types是什么 如果有方法将该值转换为目标types(string或字典) 所以这是我所尝试的 Function display_dictionary(dict As Scripting.Dictionary, out As Range) As Integer Dim vkey As Variant Dim key As String Dim row_offset As Integer Dim […]

一个非VBArecursion阶乘函数?

是否有可能通过启用循环引用(在Excel Options的Formulas部分中selectenable iterative calculation ),在Excel中创build一个recursion阶乘函数? 我当然知道FACT() ,而不是寻找计算阶乘因子的实用方法。 相反,我的目标是find一种方法来利用循环引用作为在Excel中创build和使用recursion函数的一般工具,并且阶乘提供了一个有趣的testing用例。 使用Jan Karel Pietrerse的网站的一个想法,我能够接近,但是由此产生的function依赖于两个单元而不是一个单元,所以它不能解决问题。 在 我使用顶行中的string创build了命名范围。 在我现在命名为factorial的单元格中input: =IF(initializing,1,IF(factor=0,factorial,factorial*factor)) 并在我input的单元格中: =IF(initializing,n,IF(factor=0,factor,factor-1)) 上面的图片显示了当n = 10和initializing = True 。 因式中的公式对应于函数式编程中的一个标准技巧,通过引入具有累加参数的辅助函数来进行recursion函数尾调用recursion 。 问题是辅助函数需要被调用,factorial中的公式在某种意义上是函数本身和辅助函数, initializing的内容决定了它正在播放的angular色。 如果我将initializing的值从True切换(例如,只是删除它),那么factorial的值就成为正确的因子: initializing可以从图片中删除吗? 是否可以修改设置,以便如果例如n变为5,那么factorial立即变为120,而不需要先设置,然后更改其他单元格? 我已经尝试了几个不同的事情,但不断结束了两步而不是一步function。 也许一些涉及数组公式的巫术?

recursion的VBA先例

我有一个Excel电子表格,有很多公式和数据可以跟踪。 我有一个小的macros,可以find一个选定的单元格的先例,但是我喜欢使macrosrecursion,以便我可以find所有的先例。 例如,将焦点设置到单元格并运行此function将突出显示该单元格,然后突出显示该单元格的先例,然后突出显示这些单元格的先例,然后突出显示先例… 我现在遇到的问题是我不确定逃生条件应该是什么。 我遇到了一些无限循环的问题,并不熟悉recursion足以找出一个可靠的解决scheme。 下面是我正在使用的一些代码(正确)find不适用的先例: Sub FindClosedWbReferences(inRange As Range) Rem fills the collection With closed precedents parsed from the formula String Dim testString As String, returnStr As String, remnantStr As String testString = inRange.Formula testString = RemoveTextInDoubleQuotes(testString): Rem New line Set ClosedWbRefs = New Collection Do returnStr = NextClosedWbRefStr(testString, remnantStr) ClosedWbRefs.Add Item:=returnStr, Key:=CStr(ClosedWbRefs.count) testString […]