簡體   English   中英

用非易失性VBA方法代替間接方法,但是不能使用Excel函數(如OFFSET)嵌套返回值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM