Czy przed użyciem funkcji utworzonych programowo wymagana jest funkcja "Register" lub "Re-compile"?Jak używać programowo utworzonych funkcji arkusza roboczego w VBA
Po dodaniu funkcji do arkusza roboczego nie można jej używać, dopóki po powrocie kontroli do arkusza roboczego.
Na przykład: Jeśli mój kod dodaje funkcję do arkusza roboczego, a następnie próbuje go użyć, pojawia się następujący błąd: Błąd wykonania 438 - Obiekt nie obsługuje tej właściwości lub metody Kiedy patrzę na kod dla arkusze kalkulacyjne, w których znajdują się funkcje i jeśli uruchomię kod, który wykorzystuje tylko utworzone funkcje, nie występuje błąd.
Jak korzystać z funkcji zaraz po ich utworzeniu, bez uprzedniego zatrzymania?
Oto przykład kodu - pojawia się błąd podczas uruchamiania TestingWorkSheetFunctions, ale nie po uruchomieniu TestWorkSheetFunction po utworzeniu funkcji.
Przykład zakłada nowy skoroszyt z co najmniej dwóch arkuszy (Arkusz1 i Arkusz2)
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
Dziękuję Passerby za naprawienie mojego przykładowego kodu. – LastDavid