2010-09-06 70 views
0

我正在嘗試編寫一個將範圍作爲參數並將一些係數返回給工作表的vba函數。但是,當我嘗試從函數寫入任何內容到工作表時,我得到一個未定義的值(#VALUE!)。當我將函數更改爲宏(子)並對函數中的參數進行硬編碼時,它允許我在工作表中設置值。我們可以更改功能表中的工作表嗎?

' these don't work 
Sheets("Sheet1").Cells(4, 1) = x 
Sheets("Sheet1").Range(4, 1) = x 

能否請您給我取一個值的範圍作爲參數,計算出的東西,和工作表中寫的答案回功能的一個簡單的例子。

+0

這個公式是從ac訪問的ell公式將數據返回給該單元格或作爲將數據寫入表單的獨立函數? – 2010-09-06 03:42:05

+0

如果您嘗試定義UDF:不建議更改UDF中的其他單元格 – 2010-09-06 09:10:20

回答

1

該功能可用於像許多被單個細胞

Public Function TestMe(rangeX As Range) As String 
    TestMe = "This is a test - " & rangeX.Value 
End Function 

,但如果你試圖影響其他細胞

接下來的這個方法將需要將誤差範圍內使用的內置功能從按鈕或手動運行宏作爲宏運行。此方法假定它將傳遞兩個單個單元格區域。

Public Sub RunTest() 
    'A1 and A2' 
    Test2 Sheets("Sheet1").Cells(1, 1), Sheets("Sheet1").Cells(2, 1) 
End Sub 

Public Sub Test2(rangeX as Range, rangeY as Range) 
    'write values out to A4 and B4' 
    Sheets("Sheet1").Cells(4, 1) = rangeX 
    Sheets("Sheet1").Cells(4, 2) = rangeY 
End Function 
0

如果您想要的是返回多個值的用戶定義函數,請嘗試使用數組函數。
通過在工作表中選擇單元格範圍來輸入數組函數,然後鍵入該函數並按下Ctrl-Shift-Enter。其結果是鍵入的功能是在每個選定的單元的,包在{}

然後你的用戶定義的函數需要返回值 的陣列例如

Function MyArrayFunction(r As Range) As Variant 
Dim cl As Range 
Dim i As Long, j As Long 
Dim v() As Variant 

ReDim v(1 To Application.Caller.Rows.Count, 1 To Application.Caller.Columns.Count) 
For i = 1 To UBound(v, 1) 
    For j = 1 To UBound(v, 2) 
     v(i, j) = i * j + r.Value 
    Next 
Next 

MyArrayFunction = v 

結束函數

要使用,選擇一個範圍,說A1:B4,類型= MyArrayFunction(D1),按下Ctrl-Shift鍵輸入 如果D1包含0的結果將是A1 = 1,B1 = 2,A2 = 2,B2 = 4 ,A3 = 3,B3 = 6,A4 = 4,B4 = 8

相關問題