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