此宏公式(在循环中为每个新插入的工作表放置一个 Vlookup 公式)在运行时会导致出现一个空单元格:
ActiveCell.Formula = "=VLookup(""Total Other Operating Expenses"", ActiveWorkbook.Sheets(sheetname).Columns(""H:R""), 7, True)"
单元格完全空白。我花了几个周末搜索博客,没有一个提到这个结果。
我使用了一种变通方法,即使用完全相同的公式“打印”(如下)(根据一些博客添加了一些引号),它可以在文本文件中正确创建公式。然后,我将 case 语句粘贴到另一个宏中,当它被调用用于特定工作表时,它会在单元格中生成正确的公式。以下是在文本文件中创建 case 语句的打印语句:
ffile = FreeFile()
Open MyFile For Output As ffile
Print #ffile, "Sub SelectTabsFormulas()"
'create Option1 Vlookups
Print #ffile, " Select Case sheetname"
For FNum = LBound(MyOthExpFiles) To UBound(MyOthExpFiles)
sheetname = Trim(Mid(MyOthExpFiles(FNum), 6, 4))
Print #ffile, " Case " & sheetname & ""
Print #ffile, " ActiveCell.Formula = ""=VLookup(""""Total Other Operating Expenses"""", '" & sheetname & "'!H:R, 7, True)"""
FCnt = FCnt + 1
Next FNum
Print #ffile, " Case Else"
Print #ffile, " ActiveCell.Value = """
Print #ffile, " End Select"
Print #ffile, " "
Print #ffile, " Return"
Print #ffile, "End Sub"
Close #ffile
将结果的 case 语句复制到宏中,它会在单元格中生成正确的公式:
Sub SelectTabsFormulas()
Select Case sheetname
Case 112
ActiveCell.Formula = "=VLookup(""Total Other Operating Expenses"", '112'!H:R, 7, True)"
Case 114
ActiveCell.Formula = "=VLookup(""Total Other Operating Expenses"", '114'!H:R, 7, True)"
Case 9112
ActiveCell.Formula = "=VLookup(""Total Other Operating Expenses"", '9112'!H:R, 7, True)"
Case Else
ActiveCell.Value = ""
End Select
Return
End Sub
当然,我的问题是为什么我得到的结果为空白?是否有 Windows 7 或 Excel 信任中心设置阻止公式插入?
答案1
将其更改为:
ActiveCell.Formula = "=VLookup(""Total Other Operating Expenses"", " & _
sheetname & "!H:R, 7, True)"
您当前的公式没有计算 ActiveWorkbook.Sheets(sheetname).Columns(""H:R""),因为它在字符串内,所以它会尝试将其放入公式中,但是无法从公式访问 VBA 对象模型。