2013-04-08 47 views
1

我在VBA中編寫了一個函數,我不知道如何調用它。調用我的函數

Public Function FindTwoStrings(rng As Range, s1 As String, _ 
    s2 As String) As Integer 
    'Application.Volatile 
    If TypeName(rng) <> "Range" Then Exit Function 
    Dim cell As Range 
    Dim accumulator As Integer 
    For Each cell In rng.Cells 
     If (InStr(1, UCase(cell.Value), UCase(s1), _ 
      vbTextCompare) > 0) Or (InStr(1, UCase(cell.Value), _ 
      UCase(s2), vbTextCompare) > 0) Then _ 
      accumulator = Me.Cells(cell.Row, 5) + accumulator 
    Next cell 
End Function 

如何在我的手機中調用此函數?我試圖做=Find....但它找不到我的功能。有沒有我錯過的設置?

+0

這哪裏是位於您的工作簿? – Brad 2013-04-08 19:34:25

+0

你在哪裏設置FindTwoStrings的值? – 2013-04-08 19:35:02

+0

在Sheet 1 – 2013-04-08 19:36:02

回答

2

您需要將用戶自定義函數放入Modules。不在Classes中或者在表單,工作表或Thisworkbook等對象中。

而且您需要爲函數設置返回值,否則它將始終具有默認值0

您可能需要重新考慮你的線

accumulator = Me.Cells(cell.Row, 5) + accumulator 

,因爲你不能訪問比傳遞到一個UDF的任何其他。因此對 Me的引用將不被允許。

編輯: 無法訪問使用Me關鍵字對象的模塊(其中駐留需要UDF)中,因爲Me是指其中的代碼駐留在非靜態對象,但模塊是靜態的這個Me是不合邏輯的。克里斯在評論中指出,允許您訪問對象對於未在通過,但不是通過Me關鍵字這樣做,你需要參考他們明確如ThisWoorkBook.Sheets("sheetname").Cells(cell.row,5)

+0

+ 1解釋它:) – 2013-04-08 19:48:47

+0

你對我爲什麼'Me'是一個問題的解釋是不完全正確的。一個'UDF'幾乎可以訪問任何東西,它不能改變任何東西。問題是在'Module'中,'Me'沒有意義,也不存在。 – 2013-04-09 07:25:12

+0

@chrisneilsen你對修改狀態問題是正確的。所以是的,如果OP想要引用那些他需要通過'Sheets(「SheetName」)明確地完成這些單元格的單元格(Cell.row,5)'。模塊是靜態的,'Me'只與非靜態對象有關。我會改變我寫的 – Brad 2013-04-09 12:59:04

0

一些東西......

  1. Excel自定義函數(您嘗試創建的類型,它顯示爲單元格公式中的可用關鍵字)只能更改一個單元格的值。您會注意到所有內置的Excel函數(例如,= LEFT)僅影響其使用的單元格的值。

  2. Excel正在查找的方法簽名是一個範圍。 ..我不知道它是否會接受多個參數,如你的例子。

  3. 它看起來不像你在任何地方設置FindTwoStrings的值。這就是方法知道返回值的方式。

以下是我寫入的一個小函數的示例,用於將範圍連接成由逗號分隔的單個字符串。你跟= cvsRange調用它([某些範圍])

Function csvRange(myRange As Range) 
    Dim csvRangeOutput As String 
    For Each entry In myRange 
     If Len(entry) > 0 Then 
     csvRangeOutput = csvRangeOutput & entry.Value & "," 
     End If 
    Next 
    If Len(csvRangeOutput) > 2 Then 
     csvRange = Mid(csvRangeOutput, 1, Len(csvRangeOutput) - 1) 
    Else 
     csvRange = "" 

     End If 

End Function 

HTH ...