簡體   English   中英

您可以使用單元內 Excel 公式訪問 VBA 列表嗎?

[英]Can you access a VBA list with an in-cell Excel formula?

我寫了一個 VBA 腳本/宏,當在特定范圍 (nxm) 的單元格中檢測到變化時運行。 然后,它會根據在第一個范圍內檢測到的內容更改另一個范圍 (nx 1) 中的值。

這一點工作得很好......但隨之而來的是古老的擦除撤消堆棧問題。 不幸的是,用戶需要能夠撤消他們最后約 10 次左右的操作。

我的理解是,僅當 VBA 直接編輯工作表上的某些內容時,撤消堆棧才會被清除 - 但如果 VBA 只是在后面運行而不編輯工作表,它就會被保留。

所以我的問題是:是否可以使用單元格公式(如下所示)從 VBA 數組中提取值?

'sample of in-cell function in cell A3
=function_to_get_value_from_vba_array(vba_array, index_of_desired_value)

本質上,VBA 將存儲一個一維字符串數組,其中包含范圍所需的值。 通過使用公式從數組中獲取值:我也許能夠解決撤消堆棧被擦除的問題。

謝謝!

解決方案
您需要執行以下操作:您對 function 的參數應該調用數組 bulding; 我創建了一個虛擬 function 來創建一些示例 arrays 來演示它。 在您的情況下,您可能需要將工作表事件的更改存儲在全局數組變量中,並且正如您所說,在工作表上什么也不做(每當發生更改時,只需根據需要重新調整或附加到全局數組中)。 但是,可能會出現一個新問題,即當您關閉/重新打開時,或者由於某種原因數組丟失,因此您需要跟蹤它,我建議在關閉事件之前捕獲,然后將公式轉換為 static 值.

Function vba_array(TxtCase As String)
Dim ArrDummy(1) As Variant
Select Case TxtCase
Case "Txt": ArrDummy(0) = "Hi": ArrDummy(1) = "Hey"
Case "Long": ArrDummy(0) = 0: ArrDummy(1) = 1
Case "Boolean": ArrDummy(0) = True: ArrDummy(1) = False
End Select
vba_array = ArrDummy
End Function

在您調用 function 時,請執行以下操作

Function get_value_from_vba_array(vba_array() As Variant, index_of_desired_value As Long) As Variant
'when parsing, even with option base 0 it starts at 1, so we need to add 1 up
get_value_from_vba_array = vba_array(index_of_desired_value + 1)
End Function

在你的書中,你的公式應該是這樣的:

=get_value_from_vba_array(vba_array("Txt"),1)

演示
我之前做過一些動作,所以你可以看到“撤消”有效

在此處輸入圖像描述

暫無
暫無

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

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