簡體   English   中英

如何編寫等效於 INDIRECT 函數的 Excel VBA?

[英]How to code Excel VBA equivalent of INDIRECT function?

我的工作簿中有很多 INDIRECT 函數的用法,它會導致性能問題。 我需要用能給我相同結果的東西替換它們。 任何時間發生任何更改時,所有 INDIRECTS 都會重新計算,從而導致工作簿滯后。

我想知道是否有一種方法可以在不實際使用 INDIRECT 函數的情況下在 VBA 中編寫 INDIRECT 代碼,並消除代碼中函數的波動性。

 =INDIRECT("'" & $AC$9 & "'!" & AC26)

這是一個例子。 我需要刪除 INDIRECT,但要為這個單元格獲得相同的結果。 有沒有辦法在 VBA 中實現這一點?

你可以試試這個。

將以下例程放在標准代碼模塊中:

Public Function INDIRECTVBA(ref_text As String)
    INDIRECTVBA = Range(ref_text)
End Function

Public Sub FullCalc()
    Application.CalculateFull
End Sub

更換INDIRECT在公式與函數INDIRECTVBA

這些將是靜態的。 如果您的工作簿緩慢是因為您的INDIRECT正在不斷評估,那么這將結束這一點。

重要信息:包含使用INDIRECTVBA的公式的所有單元格都將是靜態的。 每個公式將在您確認時計算,但在先例更改時不會重新計算。

然后,您需要一種方法強制他們在方便的時候重新計算。 您可以從功能區執行此操作。 或者,您可以運行FullCalc

我想把它添加為評論,但我的思考過程太長了。

您要解決的問題的背景是什么?

我猜您在$ AC $ 9中使用某種數據驗證下拉菜單來選擇工作表名稱,然后所有的INDIRECT公式都提供了用戶指定工作表的特定部分的鏡像。

如果是這種情況,那么您可以考慮使用INDEX作為替代方案。 它被寫為=INDEX(Range, RowNum, ColNum)例如,如果你把它放在H20: =INDEX(Sheet1!A:Z,ROW()+10,COLUMN()-5)那么它會反映在表格中的任何內容1,單元格C30(H-5列,20 + 10行)。 當然,如果你不想,你不必抵消任何東西,我只想證明這是一個選擇。

現在,更棘手的部分仍然存在 - 分配/更新SheetName變量。 這可以使用UserForm完成,而不是在特定輸入單元格中鍵入值。 例如,您可以讓VBA提供一個輸入框/下拉菜單供用戶選擇一個可用的工作表名稱,然后獲取該輸入並在快速查找和替換指令中使用它 - 搜索"=INDEX(*!"並替換為"=INDEX(" & InputVariable & "!"

我對你的數據集和你想要實現的目標做了一些假設,所以它可能不是理想的解決方案,但也許是需要考慮的事情。

使用 Indirect 函數(通常在多版本跨平台使用和分區以在 Mac 上運行 Windows)解決波動性的方法可以通過使用 Indirect 的化名拆分其各種函數來吸收,我將其命名為“Impied”:

Public Function Implied(Varient)
' CREDIT: Stephen L. Rush

    On Error Resume Next

    If IsError(Range(Varient)) Then
        If IsError(Find(Varient, "&")) Then
           'Not Range, is Indirect.  "A" & Match() Style (where Match() = row).
            Implied = WorksheetFunction.Indirect(Varient)
        Else
           'Not a Range, not Indirect. "A" & B99 Reference (where B99 = row).
            Implied = Range(Left(Varient, Find(Varient, "&") - 1) & Range(Right(Varient, Len(Varient) - Find(Varient, "&"))))
        End If
    Else
       'Is pure Range
        Implied = Range(Varient)
    End If

   '[On Error GoTo 0] Conflicts with use as formula

End Function

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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