[英]Excel VBA: VBA Function Called as Formula Runs Differently?
這是我的宏
Option Explicit
Function AutoFormula(blocks As Range, target As Range)
Dim blockedArr() As String
Dim cellValue As String
Dim ret As String
Dim i As Integer
'sprawdzenie zakresu
If (blocks.Cells.Count > 1) Then
AutoFormula = "Tylko 1 komórka jako parametr!"
Exit Function
End If
'wczytanie komorki
cellValue = blocks.Cells(1, 1).Value
'split
blockedArr = Split(cellValue, ",")
ret = "=WYSZUKAJ.PIONOWO(E7;$E$2:$G$5;3;FAŁSZ)"
For i = LBound(blockedArr, 1) To UBound(blockedArr, 1)
ret = ret + "+SUMA.JEŻELI(A7:A1000;" + blockedArr(i) + ";G7:G1000)"
Next i
target.Cells(1, 1).FormulaLocal = ret
AutoFormula = 1
End Function
Sub auto()
Call AutoFormula(Worksheets("reorganizacja").Range("D7"), Worksheets("reorganizacja").Range("G7"))
End Sub
當我使用auto()子程序運行它時,它可以正常工作並產生所需的結果。 但是,如果我將其作為excell單元格中的公式=AutoFormula(D7;G7)
例如=AutoFormula(D7;G7)
來調用,它將無法正常工作。 在Excell單元格中,我收到#ARG錯誤。 當我調試宏時,它會一直正常運行直到target.Cells(1, 1).FormulaLocal = ret
行;當我跨過它時,它會立即中斷功能而不完成它。 有任何想法嗎?
UDF只能將一個值返回到調用它的單元格-不能修改任何單元格的內容或格式,也不能修改Excel的操作環境。 如果您嘗試更改任何內容,該函數將立即終止,並向調用單元格返回#VALUE
錯誤。 資料來源-Cpearson.com
在您的情況下,您試圖在Excel中更改范圍參數的值,例如target
是參數,並通過target.Cells(1, 1).FormulaLocal = ret
要求Excel對其進行更改。
換句話說,假設您想通過UDF將A1
的值加倍。 一種實現方法是通過以下方法:
Option Explicit
Public Function DoubleArgument(a As Range) As Double
a = a * 2
DoubleArgument = a
End Function
Public Sub TestMe()
Debug.Print DoubleArgument(Range("A1"))
End Sub
但是,如上所述,您無法通過UDF更改Excel中的值,因此,如果在Excel中運行=DoubleArgument(A1)
,將是一個錯誤。
如果要簡化示例,消除參數,請嘗試以下操作:
Public Function Put5InA1()
Range("A1") = 5
End Function
Public Sub TestMe()
Debug.Print Put5InA1
End Sub
TestMe()
將在A1
生成5
,而UDF =Put5InA1()
將返回錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.