Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 在vba 2010中将公式声明为变量_Excel_Variables_Excel Formula_Excel 2010_Vba - Fatal编程技术网

Excel 在vba 2010中将公式声明为变量

Excel 在vba 2010中将公式声明为变量,excel,variables,excel-formula,excel-2010,vba,Excel,Variables,Excel Formula,Excel 2010,Vba,我已经绞尽脑汁想了两天为什么我不能让它工作,所以在多年的搜索线程后,我发布了我的第一个问题 我将公式存储在工作簿的表格中。该表名为“调整”。在同一工作簿中的另一张工作表上,我根据贷款编号查找公式。在复制工作表并将其另存为单独的文档之前,我想用它查找的公式替换查找公式,并将其保留为活动公式,而不仅仅是其计算结果的值 单元格E6中当前的查找公式为: =(索引(调整,匹配(贷款编号,调整[贷款编号],0),列(调整[GPR调整])) 引用的公式是: =如果(和(联合国全球政策法规法案0,或([@[空缺

我已经绞尽脑汁想了两天为什么我不能让它工作,所以在多年的搜索线程后,我发布了我的第一个问题

我将公式存储在工作簿的表格中。该表名为“调整”。在同一工作簿中的另一张工作表上,我根据贷款编号查找公式。在复制工作表并将其另存为单独的文档之前,我想用它查找的公式替换查找公式,并将其保留为活动公式,而不仅仅是其计算结果的值

单元格E6中当前的查找公式为: =(索引(调整,匹配(贷款编号,调整[贷款编号],0),列(调整[GPR调整]))

引用的公式是:

=如果(和(联合国全球政策法规法案0,或([@[空缺假设]]+联合国货币监理署法案[@[空缺假设]]),假)),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中的一个。这似乎应该是一个简单的答案,但我还没有发现。感谢您的帮助

好吧,这是一个非常时髦的要求。一种方法是执行以下操作

  • 进入菜单,选择文件->选项,然后选择公式选项卡
  • 选中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'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
    ,然后在下一行尝试将其设置为对象。。。但这仍然不能解释你所犯的错误