我有一個包含值的 Excel 工作表(該工作表是由自訂 perl 腳本產生的,但我不認為這就是問題所在)。其中,我有一個公式:
=sum(indirect(concatenate(address(6,column()),":",address(17,column()))))
這個公式的目的是給我SUM()
目前列中第 6 行和第 17 行之間的儲存格的數量。Gnumeric 電子表格,只要我打開文件,這就有效。但在 Excel 中(都是 2003和2007),開啟檔案會#VALUE!
在包含此公式的欄位中給出錯誤,表示INDIRECT
使用這些值進行呼叫$B$6:$B$17
將導致錯誤。
這是問題的關鍵點。如果我編輯該字段(透過F2
),然後進行不更改,然後按 Enter 鍵,值就會更新。另外,如果我將檔案另存為 .xlsx(Excel 2007 格式),則值會在開啟時更新。不幸的是,我不確定xlsx
我正在使用的模組是否可以創建一個,而且我們的許多客戶可能無論如何都無法使用它。
有什麼建議麼?每月為每位客戶編輯 200 多個文件是不可行的,所以如果我遺漏了什麼,請告訴我。
答案1
如果您插入普通的 Sum 函數,它會起作用嗎?
您是否嘗試過使用 OFFSET 建立要求和的範圍?例如:
=SUM(OFFSET(B6,0,0,12,1))
答案2
可能正在抓緊救命稻草,但你可以嘗試 R1C1 風格參考
=SUM(INDIRECT("R["&7-ROW()&"]C:R["&17-ROW()&"]C",FALSE))
或者,如果公式始終位於第 19 行,則將引用樣式設為 R1C1
Application.ReferenceStyle = xlR1C1
然後您可以將公式插入為
=SUM(R[-13]C:R[-2]C)
更新:
您可以透過使用來避免設定ReferenceStyle
<YourCellReference>.FormulaR1C1 = "=SUM(R[-13]C:R[-2]C)"
答案3
也許您可以使用以下命令強制重新計算整個電子表格:
http://msdn.microsoft.com/en-us/library/bb687891.aspx
巨集重命名,然後再次重命名電子表格應該可以正常工作。也許你可以在珍珠腳本的末尾執行?我對珍珠實在是不太了解,抱歉。
或使用熱鍵 CTRL+ALT+F9,如果有效,請使用具有此功能的 VBA:應用程式.CalculateFull
答案4
在 Excel 下Tools | Calculations
您可以設定計算模式。如果設定為“自動”,Excel 應自動更新所有欄位的公式結果,開啟檔案時也是如此。
計算設定也可以針對每個單獨的工作表進行設置,因此 Perl 腳本可能會設定手動更新模式。