Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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
如何在VBA中将文件名调用到excel公式中_Excel_Vba - Fatal编程技术网

如何在VBA中将文件名调用到excel公式中

如何在VBA中将文件名调用到excel公式中,excel,vba,Excel,Vba,我目前正在创建一个Excel文件,其目的是在两个Excel文件之间创建一个版本比较。由于正在比较的文件在任何给定时间都有多达30张图纸,我们希望每天都执行此操作,因此我想创建一个宏来自动生成文件 宏用于在比较文件中创建选项卡,并在指定范围内粘贴公式。公式是嵌套的IF语句: 如果单元格包含文本值,则返回文本值,否则: 如果单元格为空,则返回空值,否则: 计算当前版本与以前版本之间的差异 公式使用间接函数,因此我可以对所有工作表使用公式,而无需为文件中的每个工作表专门创建一个公式 我目前面临的问题是

我目前正在创建一个Excel文件,其目的是在两个Excel文件之间创建一个版本比较。由于正在比较的文件在任何给定时间都有多达30张图纸,我们希望每天都执行此操作,因此我想创建一个宏来自动生成文件

宏用于在比较文件中创建选项卡,并在指定范围内粘贴公式。公式是嵌套的IF语句:

  • 如果单元格包含文本值,则返回文本值,否则:
  • 如果单元格为空,则返回空值,否则:
  • 计算当前版本与以前版本之间的差异
  • 公式使用间接函数,因此我可以对所有工作表使用公式,而无需为文件中的每个工作表专门创建一个公式

    我目前面临的问题是将两个文件名分层到Excel公式中。我用文件名创建了两个维度,但我不相信我的结构正确,因为我得到了#NAME?创建的公式中存在错误。下面是我正在使用的一些代码:

    If SH.Visible = xlSheetVisible Then
    
        ThisWorkbook.Activate
    
        Set WS = ThisWorkbook.Sheets.Add(After:= _
                 ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
        WS.Name = SH.Name
    
        Range("A1").Select
        ActiveCell.FormulaR1C1 = _
            "=IF(ISTEXT(INDIRECT(""'[""&FileNameCurrent&""]""&ThisSheetName()&""'!""&CELL(""address"",RC))),INDIRECT(""'[""&FileNameCurrent&""]""&ThisSheetName()&""'!""&CELL(""address"",RC)),IF(INDIRECT(""'[""&FileNameCurrent&""]""&ThisSheetName()&""'!""&CELL(""address"",RC))="""","""",INDIRECT(""'[""&FileNameCurrent&""]""&ThisSheetName()&""'!""&CELL(""address"",RC))-INDIRECT(""'[""&FileNamePrior&""]""&ThisSheetName()&""'!""&CELL(""address"",RC))))"
        Selection.Copy
        Range("A1:Y100").Select
        Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
        Application.CutCopyMode = False
        Calculate
    
    
    End If
    

    假设
    sheetnamefurrent
    filenamefurrent
    FileNamePrior
    都是
    VBA
    变量/函数,则使用以下函数。我想你有一些错误的引号

    ActiveCell.FormulaR1C1 = "=IF(ISTEXT(INDIRECT(""'[" & FileNameCurrent & "]" & ThisSheetName & "'!"" & cell(""address"", RC))), INDIRECT(""'[" & FileNameCurrent & "]" & ThisSheetName & "'!"" & cell(""address"", RC)), IF(INDIRECT(""'[" & FileNameCurrent & "]" & ThisSheetName & "'!"" & CELL(""address"",RC))="""","""",INDIRECT(""'[" & FileNameCurrent & "]" & ThisSheetName & "'!"" & CELL(""address"", RC))-INDIRECT(""'[" & FileNamePrior & "]" & ThisSheetName & "'!"" & CELL(""address"", RC))))"
    

    您尚未包括导致错误的公式示例。我怀疑这是因为
    filenamefurrent
    sheetnamefurrent
    不是Excel函数。我假设它们是您在其他地方填充的变量,但您也不愿意共享它们。如果是,则不应将其封装在引号中,因为必须在创建公式之前对其进行求值。抱歉,本应包含完整的代码,但不想将其淹没。你是对的,这些是代码中其他地方定义的变量,根据Tom下面的回答,看起来我只是有一些错误的引用。感谢反馈这解决了我的问题-谢谢你的帮助汤姆!