Excel 在vba 2010中将公式声明为变量
我已经绞尽脑汁想了两天为什么我不能让它工作,所以在多年的搜索线程后,我发布了我的第一个问题 我将公式存储在工作簿的表格中。该表名为“调整”。在同一工作簿中的另一张工作表上,我根据贷款编号查找公式。在复制工作表并将其另存为单独的文档之前,我想用它查找的公式替换查找公式,并将其保留为活动公式,而不仅仅是其计算结果的值 单元格E6中当前的查找公式为: =(索引(调整,匹配(贷款编号,调整[贷款编号],0),列(调整[GPR调整])) 引用的公式是: =如果(和(联合国全球政策法规法案0,或([@[空缺假设]]+联合国货币监理署法案[@[空缺假设]]),假)),0,(联合国租金法案*联合国自然资源保护委员会-联合国全球政策法规)) 我想用正在查找的单元格中的公式替换索引/匹配公式 这是我试图使用的代码Excel 在vba 2010中将公式声明为变量,excel,variables,excel-formula,excel-2010,vba,Excel,Variables,Excel Formula,Excel 2010,Vba,我已经绞尽脑汁想了两天为什么我不能让它工作,所以在多年的搜索线程后,我发布了我的第一个问题 我将公式存储在工作簿的表格中。该表名为“调整”。在同一工作簿中的另一张工作表上,我根据贷款编号查找公式。在复制工作表并将其另存为单独的文档之前,我想用它查找的公式替换查找公式,并将其保留为活动公式,而不仅仅是其计算结果的值 单元格E6中当前的查找公式为: =(索引(调整,匹配(贷款编号,调整[贷款编号],0),列(调整[GPR调整])) 引用的公式是: =如果(和(联合国全球政策法规法案0,或([@[空缺
Dim GPR As String
GPR = [INDEX(Adjustments,MATCH(Loan_No,Adjustments[Loan No],0),COLUMN(Adjustments[GPR Adj]))].Formula
Range("E6").Formula = GPR
当我使用它时,我得到一个运行时错误“1004”:应用程序定义的或对象定义的错误
我已经尝试将evaluate应用程序更改为.Value,但这会给出两个公式的最终值。似乎如果我有Excel 2013,我也可以使用[FormulaText(GPR)]
我尽量避免复制和粘贴公式,因为我要替换大约25个单元格,我不想减慢宏的速度,因为这只是运行的几个SUB中的一个。这似乎应该是一个简单的答案,但我还没有发现。感谢您的帮助 好吧,这是一个非常时髦的要求。一种方法是执行以下操作
=ADDRESS(ROW(ToMyLeft),COLUMN(ToMyLeft))
这将给出左边单元格的地址,这是一个单元格地址。因此,当在单元格F7中执行时,返回$F$6。这应该给你一个终极配方的家钩。尽管如此,您仍然需要一些VBA函数来执行它
Option Explicit
Function FunkyIndirectFunctionEval(ByVal sCellAddress As String)
Dim ws As Excel.Worksheet
Set ws = ActiveSheet '<--- if you workbook spans several sheets you'll need to handle the sheets, second param?
Dim rng As Excel.Range
Set rng = ws.Range(sCellAddress)
Dim vEval As Variant
FunkyIndirectFunctionEval = Application.Evaluate(rng.Formula)
End Function
选项显式
函数FunkyIndirectFunctionEval(ByVal sCellAddress作为字符串)
将ws设置为Excel.Worksheet
设置ws=ActiveSheet'Ok,这是一个非常时髦的需求。一种方法是执行以下操作
进入菜单,选择文件->选项,然后选择公式选项卡
选中R1C1参考样式的复选框,然后单击“确定”以显示对话框
在图纸上,从“公式”功能区中选择“名称管理器”
在名称管理器中定义一个名为“ToMyLeft”的名称,并在引用框中输入=Sheet1!RC[-1]
现在您已经定义了一个相对名称,它始终指向使用该名称的单元格左侧的单元格!别胡闹了。要花点时间让这一点深入人心
现在你可以写这样的公式了
=ADDRESS(ROW(ToMyLeft),COLUMN(ToMyLeft))
这将给出左边单元格的地址,这是一个单元格地址。因此,当在单元格F7中执行时,返回$F$6。这应该给你一个终极配方的家钩。尽管如此,您仍然需要一些VBA函数来执行它
Option Explicit
Function FunkyIndirectFunctionEval(ByVal sCellAddress As String)
Dim ws As Excel.Worksheet
Set ws = ActiveSheet '<--- if you workbook spans several sheets you'll need to handle the sheets, second param?
Dim rng As Excel.Range
Set rng = ws.Range(sCellAddress)
Dim vEval As Variant
FunkyIndirectFunctionEval = Application.Evaluate(rng.Formula)
End Function
选项显式
函数FunkyIndirectFunctionEval(ByVal sCellAddress作为字符串)
将ws设置为Excel.Worksheet
设置ws=ActiveSheet'如果它是单元格E6中的有效公式,则应该可以使用,因此我怀疑该公式有问题
可能错误在于您使用的是不合格的结构化表引用,如[@[空缺指令]]——请尝试在它们前面加上表名。如果单元格E6中的公式有效,则应该可以这样做,因此我怀疑公式有问题
可能错误在于您使用的是不合格的结构化表引用,如[@[空缺指令]]-请尝试在它们前面加上表名。逐步检查代码并检查GPR值。尝试添加Debug.Print GPR
,然后查看即时窗口显示的结果GPR值为“=IF(and(COM_GPR_ACT0,或([@[空缺假设]]+COM_OCC_ACT[@[空缺假设]]),假)),0,(COM_租金法案*COM_NRSF-COM_GPR_法案)),在这种特殊情况下评估为(4990716.93)。我想返回范围(“E6”)中的公式,而不是值。您正在将Dim GPR声明为String
,但看起来您正在尝试将其设置为对象.Formula
为什么?这仍然没有意义。。。您将GPR声明为字符串,其中Dim GPR as string
,然后在下一行尝试将其设置为对象。。。但这仍然不能解释你所犯的错误。我认为你应该向我们展示更多的代码。您确定这是接收此错误的线路吗?根据我的测试,您应该获得所需的对象逐步通过代码并检查GPR的值。尝试添加Debug.Print GPR
,然后查看即时窗口显示的结果GPR的值是“=如果(和(COM_GPR_ACT0,或([@[空缺假设]]+COM_OCC_ACT[@[空缺假设]]),0,(美国联邦租房法*美国联邦住房保障基金会-美国联邦住房保障基金会法案)),在本案例中评估为(4990716.93)。我想返回范围(“E6”)中的公式,而不是值。您正在将Dim GPR声明为String
,但看起来您正在尝试将其设置为对象.Formula
为什么?这仍然没有意义。。。您将GPR声明为字符串,其中Dim GPR as string
,然后在下一行尝试将其设置为对象。。。但这仍然不能解释你所犯的错误