[英]Replacing Indirect with non-volatile VBA method, but cannot nest the returned value with Excel functions like OFFSET?
所以我想用VBA方法替換INDIRECT函數調用,因為INDIRECT易失,並且我的excel文檔需要花費幾秒鍾來加載,有時甚至沒有響應。
但是,當我使用INDIRECTVBA方法並將其與OFFSET函數嵌套時,會出現錯誤,並顯示“ #VALUE!”。 (是的,我知道OFFSET是另一個易失函數,我將替換為INDEX。)
具體來說:單元格BJ10包含文本“ $ R $ 71”,這是對保存數據的單元格的引用。
= INDIRECT($ BJ $ 10)可以工作,但易失。
= INDIRECTVBA($ BJ $ 10)起作用。
=(OFFSET(INDIRECT($ BJ $ 10),0,0))可以工作,但易失。
=(OFFSET(INDIRECTVBA($ BJ $ 10),0,0))不計算,它顯示“ #VALUE!”
有什么想法嗎?
這是INDIRECTVBA方法:
Public Function INDIRECTVBA(ref_text As String)
INDIRECTVBA = Range(ref_text)
End Function
Public Sub FullCalc()
Application.CalculateFull
End Sub
您的函數不返回范圍,因此它作為OFFSET()的第一個參數(在該位置需要一個范圍)而失敗。
同樣,當其他任何工作表處於活動狀態時(假設它在標准模塊中),您的函數也會失敗,因為Range()
的Range()
默認為ActiveSheet。
嘗試類似:
Public Function INDIRECTVBA(ref_text As String)
Set INDIRECTVBA = Application.ThisCell.Parent.Range(ref_text)
End Function
如果所有內容不在同一張紙上,那么您將需要某種方法來指定在UDF中應使用哪張紙
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.