Excel公式重新计算不起作用

时间:2019-05-28 08:40:00

标签: python excel vba excel-formula

我有一个从Excel工作簿运行的Python代码,该代码通过从剪贴板粘贴将表格导出到工作簿中。

在导出到Excel的Python数据框中,某些列包含文本字符串,这些字符串是Excel公式,引用目标Excel文件中的名称范围,代码将在该范围内导出结果。例如,一个文本字符串是:

=VLOOKUP(INDEX(EPT,ROW()-ROW(EPT)+1,12),TechnologyData_EPT,3,FALSE)

其中EPT和TechnologyData_EPT在Excel工作簿中被命名为范围。

粘贴后,这些列将显示文本字符串,而不是公式结果。按F9,Ctrl + Alt + F9,Ctrl + Alt + Shift + F9不会更新公式。单元格格式为标准,而不是文本。

我试图在VBA代码中编写“查找和替换”模块,找到“ =”并将其替换为“ =”,但这也不会重新计算公式。即使我在VBA之外手动执行此操作也可以。

Worksheets("EPT").Range("EPT").Select
fnd = "="
rplc = "="
Range("EPT").Replace what:=fnd, Replacement:=rplc, _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False

关于为什么会这样的任何线索?我想让代码在运行代码时自动更新。

已编辑

为了更加清楚,在python中,Excel公式添加了以下模块:

def xlLookup(lu_table, lu_clm, lu_key, sep=';'):
    if sep==';':    formula = '=LOPSLAG(INDEKS(EPT;RÆKKE()-RÆKKE(EPT)+1;{});'+lu_table+';{};FALSK)'
    else:           formula = '=VLOOKUP(INDEX(EPT,ROW()-ROW(EPT)+1,{}),'+lu_table+',{},FALSE)'
    return formula.format(lu_key, lu_clm)

将最终数据帧导出到剪贴板,然后通过以下VBA代码复制到Excel工作簿中:

With Sheets(SheetName)
     .Rows(FirstRow & ":" & .Rows.Count).Delete 'clear
     .Cells.NumberFormat = "General"
     .Paste (.Cells(FirstRow, 1))
End With

粘贴后,公式将显示为文本字符串,到目前为止,我还没有找到一种使它们自动计算的方法-我发现的唯一解决方案是执行手动查找和替换(查找=和替换=)。

0 个答案:

没有答案