2011-04-19 64 views
10

我最近拍攝了一個大而穩定的XLSM文件,並將其拆分爲XLAM和XLSX。 XLSX調用(udfs)中的成千上萬個單元格在XLAM中起作用,並且每個這樣的udf都以「Application.Volatile」語句開頭(矯枉過正,強制重新計算)。用戶自定義函數不重新計算

XLSX不會使用F9通過Ctrl-Alt-Shift F9進行重新計算,也不會使用Cell.Calculate通過Application.CalculateFull進行重新計算。 XLSX單元格簡直就是「死亡」......但是......如果我按F2來編輯公式,然後按下ENTER鍵,我可以一個接一個地重新喚醒它們。以這種方式重新喚醒的細胞似乎保持清醒,此後通常重新計算。

有沒有人遇到過這種奇怪的行爲,並有任何其他方式來強制Excel重新構建calc圖,我應該嘗試從頭開始?

有一點需要注意的地方:我通過File Open打開了XLAM和XLSX,並沒有使用File ... Options ... Addins路徑安裝XLAM - 因爲在過去當我完成所以,在「取消選中」並安裝XLAM的那一刻,所有的UDF引用都被完整的路徑名鏈接取代 - 非常難看。或者,如果有人可以概述一種解決方法來安裝XLAM插件,它不會在任何地方創建斷開的鏈接,我會繼續使用它。

+0

我運行通過查找外部工作簿進入相同的問題。我到處都會出現#NAME錯誤,直到我替換全部「=」。用「=」表示。但是,這是一個受保護的工作表,其中最終用戶不是我,所以我不知道如何解決此問題,而不使用該解決方法/ – Yaegz 2015-12-03 21:41:12

回答

5

想通了 - 不知道爲什麼微軟這個「功能」:

時使用的XLAM功能處女XLSX就是打開XLAM打開/創建之前的狀態出現。在這種情況下,沒有數量的調用會導致XLSX公式綁定並執行這些XLAM函數,除非您進入每個單元格& touch公式欄&按ENTER(或者,正如我發現的那樣,通過全局替換 - 在我的情況下,所有funcs開始wa「k」,所以用「k」全局替換「k」修復了錯誤)。如果XLAM首先打開,則不會發生該問題。

+2

可以通過在VBA引用對話框中添加引用來強制XLSX打開XLAM,不知道這是否有幫助。 – 2011-04-20 01:02:02

0

我有同樣的問題...我發現(在另一篇文章),添加Application.Volatile功能代碼使其與電子表格(F9)

+0

您是否閱讀過該問題以及問題描述? – 2013-11-04 10:52:50

+0

-1這個問題明確指出,「每個這樣的udf開頭的聲明」Application.Volatile「(矯枉過正,強制重新計算)」。很明顯,你沒有像OP那樣「有同樣的問題」。 – mwolfe02 2014-02-04 15:29:42

1

這是我發現的計算。我沒有測試過,但我相信可能會有解決辦法。

這是直接引用的:「Excel的依賴的函數的輸入參數的分析,以確定當一個功能需要重新計算評估」

http://www.decisionmodels.com/calcsecretsj.htm

這裏是我的今天晚些時候我會去嘗試。 我將在我的函數中動態生成一個表的特定地址。 根據我們爲什麼來到這裏,如果計算地址的值發生變化,我不應該得到更新。

通過將整個表作爲參數,即使不使用該參數,如果表中的任何內容發生更改,函數也應該更新。

以這種方式,無論您是否實際處理整個表,您的函數都會觸發依賴關係樹。

3

您可以通過搜索在此情況下強制重新計算,並替換所有公式開頭的=。您也可以將其製作爲宏並將其映射到鍵組合。

編輯補充

查看宏格雷格·格林在his answer

4

這工作:

Sub Force_Recalc() 
    Cells.Replace What:="=", Replacement:="=", LookAt:=xlPart, SearchOrder _ 
     :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False 
End Sub 
+0

它用'='替換activesheet中的所有'=',從而強制重新計算。 – 2015-11-04 22:10:28

1

一個可能的解決方案:設置計算模式爲手動,然後再返回到自動

Application.Calculation = xlCalculationManual 
    Application.Calculation = xlCalculationAutomatic 
0

我的屏幕截圖:

enter image description here

我一樣的問題。查找和替換的作品,但不是很好。我的解決辦法是:

到數據選項卡>編輯鏈接>點擊開源會解決此

0

對於UDF小號誰可以訪問到Application例如可以使用:

Application.CalculateFull() 

MSDN源here

0

按CTRL + ALT + SHIFT + F9

這可能比重計算需要更多的編輯,但它更新了我的UDF。

Source

0

Excel將監視公式任何變化中提到的範圍內,我這今天面對和我在想,意識到。因此,爲了解決這個問題,請在你的函數中創建一個虛擬參數,它需要你想要監視的範圍或創建一個虛擬函數。在我而言這沒有返回

Function monitorRange(rng As Range) 
End Function 

我把它叫做monitorRange,我在我的公式例如

=myfunction(a,b) & monitorRange(RANGE_TO_MONITOR) 

這工作非常出色提到它,它應該與任何其他功能工作