Las*_*vid 9 excel vba excel-vba excel-2010
在使用编程创建的函数之前是否需要"注册"或"重新编译"功能?
当我向工作表添加一个函数时,我不能使用它直到控件返回到工作表.
例如:如果我的代码向工作表添加一个函数,然后尝试使用它我得到以下错误:运行时错误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
Run Code Online (Sandbox Code Playgroud)
我认为这里的问题是你的vba被添加到工作表中并且没有被编译,所以当你的代码的其余部分尝试访问这个函数时,它们被写入,但还不是程序的一部分。当您再次运行代码并且一切正常时可以看到这一点。
请尝试将以下过程中的代码切换为:
Public Sub TestingWorksheetFunction()
AddWorkSheetFunction
Application.OnTime Now, "TestWorkSheetFunction"
End Sub
Run Code Online (Sandbox Code Playgroud)
这样,vba将运行代码的第一部分并释放进程,然后立即调用过程“TestWorkSheetFunction”。重要提示:这是针对您的问题的解决方法,这可能不是最佳解决方案,但可能适合您的特定情况。
| 归档时间: |
|
| 查看次数: |
1480 次 |
| 最近记录: |