2015-09-17 31 views
1

這對我來說是新手 - 我創建了一個函數,用於通過VBA更新SQL Server表。它需要一定範圍的單元格,並返回有多少記錄受到影響的Long創建函數,但僅適用於VBA環境(不在工作簿公式中)

所以,我希望這個函數可以在我的工作簿中用於VBA,但不希望它在Excel中顯示爲可用的公式(在VBA環境之外)。

我確信我以前做過這些,但不記得如何從Excel中隱藏我的函數,因此它只能用於VBA。

我該怎麼做?

+2

聲明它爲'私人'? –

+0

@DavidZemens,謝謝,但我確實希望跨工作簿使用它(我想將它保存在我的personal.xls中),我只是不希望它直接在Excel中使用。 –

+1

然後讓它成爲'Sub'而不是'Function'。 –

回答

3

將其移動到其自己的模塊(.BAS),並在頂部貼Option Private Module。完成; Excel不會再看到它,但VBA(和COM加載項也可以看到它,所以我認爲引用的VBA項目也可以看到它)。

+0

**絕對完美!! ** - 正是我想要的! - 謝謝!!! –

0

我只是使用一個子,並通過參數ByRef。一個整數/長變量,你可以做到這一點幾種不同的方式:

見的例子:

Sub Main() 
    Dim i as Long 

    i = 1 

    bar (i) 'Variable is passed ByVal because parens FORCE an evaluation, you aren't passing "i", you're passing the expression "(i)". 

    Debug.Print i 

    bar i  'Variable is passed ByRef even without explicitly doing so 

    Debug.Print i 

    anotherFunction i  'Variable is passed ByRef, same as above 
    Debug.Print "i: " & CStr(i) 

    anotherFunction (i) 'Variable is passed ByVal because parens FORCE an evaluation 

    Call anotherFunction(i) 'Variable is passed byRef 
End Sub 

Sub bar(val As Long) 
Dim j 
For j = 1 To 10 
    val = val + 1 
    Debug.Print "j: " & CStr(val) 
Next 
End Sub 

Sub anotherFunction(ByRef val as Long) 
Dim j 
For j = 1 To 10 
    val = val + 1 
    Debug.Print "j: " & CStr(val) 
Next 
End Sub 
相關問題