在使用以編程方式創建的函數之前是否需要「註冊」或「重新編譯」功能?如何在VBA中使用以編程方式創建的工作表函數
當我添加一個函數到工作表時,我不能使用它,直到控件返回到工作表之後。
例如:如果我的代碼向工作表中添加了一個函數,然後嘗試使用它,我得到以下錯誤:運行時錯誤438 - 對象不支持此屬性或方法 當我查看代碼工作表中的函數在那裏,如果我運行的代碼只使用創建的函數,那麼就沒有錯誤。
如何在創建它們之後立即使用這些功能,而不必先停下來?
以下是代碼示例 - 我在運行TestingWorkSheetFunctions時遇到錯誤,但在創建函數後運行TestWorkSheetFunction時沒有。
示例假設一個新的工作簿中的至少兩個表(工作表Sheet1和Sheet2的)
Option Explicit
Public Sub TestingWorksheetFunction()
AddWorkSheetFunction
TestWorkSheetFunction
End Sub
Public Sub AddWorkSheetFunction()
'Sheet1's Function
Dim strFunctionCode As String
strFunctionCode = _
"Public Function HelloWorld() as string" & vbCrLf & _
vbCrLf & _
vbTab & "HelloWorld = ""Hello World from Sheet 1""" & vbCrLf & _
vbCrLf & _
"End Function"
ThisWorkbook.VBProject.VBComponents(ThisWorkbook.Sheets("Sheet1").CodeName).CodeModule.AddFromString strFunctionCode
'Sheet2's Function
strFunctionCode = _
"Public Function HelloWorld() as string" & vbCrLf & _
vbCrLf & _
vbTab & "HelloWorld = ""Hello World from Sheet 2""" & vbCrLf & _
vbCrLf & _
"End Function"
ThisWorkbook.VBProject.VBComponents(ThisWorkbook.Sheets("Sheet2").CodeName).CodeModule.AddFromString strFunctionCode
End Sub
Public Sub TestWorkSheetFunction()
Dim wsWorksheet1 As Object
Set wsWorksheet1 = ThisWorkbook.Sheets("Sheet1")
Dim wsWorksheet2 As Object
Set wsWorksheet2 = ThisWorkbook.Sheets("Sheet2")
MsgBox wsWorksheet1.HelloWorld()
MsgBox wsWorksheet2.HelloWorld()
End Sub
感謝路人修復我的示例代碼。 – LastDavid