2017-03-31 36 views
2

我有一個UDF,可以從我的Excel工作簿中的單元格內調用。我需要它在工作簿的末尾添加一個工作表。我在我的VBA腳本中多次使用sheets.add,但從來沒有在單元格內調用的函數中,這顯然導致了一些問題。Worksheets.Add在UDF不工作

該函數接受用於添加工作表的工作簿的文件路徑的可選參數,並且如果用戶將此空白留空,我想將其默認爲活動工作簿。

下面是相關的代碼...我做錯了什麼?

Public Function onesheet(Optional filepath As String) 

Dim wb As Workbook 
Dim ws As Worksheet 

If filepath = "" Then 
    Set wb = ActiveWorkbook 
    Set target_ws = wb.Sheets.Add(after:=wb.Sheets(wb.Sheets.Count)) 
End If 

的功能被從細胞調用 = onesheet()

回答

3

的函數(UDF)具有一個作用:計算值和該值返回到小區(或式/表達)那叫它。

這是一個功能:

Public Function Foo(ByVal bar As String) As String 
    Foo = "Hello, " & bar 
End Function 

你可以在這樣的工作表單元格使用它:每個Excel中重新計算單元格的值,它會調用UDF時間

=Foo("dsdavidson") 

而且,使單元格的值爲Hello, dsdavidson

功能沒有副作用。函數不會修改其他單元格。函數接受輸入,處理它並輸出結果。

你在做什麼錯了,就像是一個宏一樣使用UDF。

Function更改爲Sub,並且不要在單元格內調用它。改用一個按鈕來調用它。或者不管你的船是什麼。但是,每次重新計算時,您都無法使用單元格公式將工作表添加到工作簿中。


宏需要是Public且無參數。因此,您需要從特定單元格獲取可選參數值,或者顯示一個表單,讓用戶從可用打開的工作簿列表中選擇 - 然後調用您的過程並將用戶的選擇作爲參數傳遞。

很可能是宏代碼會看起來像這樣(因人而異):

Public Sub AddWorksheet() 
    With New PromptForm 
     .Show 
     If .Cancelled Then Exit Sub 
     OneSheet .SelectedBook 
    End With 
End Sub 
3

您無法通過用戶添加表中定義的功能。 這是用戶定義函數的限制。

由工作表單元格中的公式調用的用戶定義的函數不能更改Microsoft Excel的環境。這意味着此功能不能執行以下任何操作:

1)在電子表格中插入,刪除或格式化單元格。 2)更改另一個單元格的值。 3)移動,重命名,刪除或將工作表添加到工作簿。 4)更改任何環境選項,例如計算模式或屏幕視圖。 5)將名稱添加到工作簿。 6)設置屬性或執行大多數方法。

欲瞭解更多詳情,請訪問該網站... https://support.microsoft.com/en-in/help/170787/description-of-limitations-of-custom-functions-in-excel