2

我一直在玩这个问题一段时间,并没有想出如何做到这一点。 我在每个工作表中都有相同的功能(这些工作表的名称如下 Name="One", CodeName="SheetOne" ...):

const someVar as Boolean = True

Public Function myFunction() as Boolean
myFunction = someVar
End Function

现在我希望它像这样从外部调用 - 在 ThisWorkbook 中有过程“doThis()”和函数“TestThis():

Sub doThis()
Dim i as Integer
For i = 1 to ThisWorkbook.Sheets.Count
   If testThis(ThisWorkbook.Worksheets(i)) = True then
      Debug.print "Success!"
   End If
Next i

Function testThis(x As Worksheet)
If x.myFunction = True Then
   testThis = True
Else
   testThis = False
End If

现在我知道在这一行“如果 x.myFunction = True ”它会抛出错误“找不到方法或数据成员”,因为我不能用这个引用调用那个函数,所以我用 VBComponent 尝试过:

Sub doThis()
Dim i as Integer
For i = 1 to ThisWorkbook.Sheets.Count
   If testThis(ThisWorkbook.VBProject.VBComponents(Worksheets(i).CodeName)) _
   = True then
      Debug.print "Success!"
   End If
Next i

Function testThis(x As VBComponent)
If x.myFunction = True Then
   testThis = True
Else
   testThis = False
End If

但同样,它会引发“对象不支持此属性或方法”错误。任何想法,我如何从一个变量中调用该函数,该变量存储了对该工作表的任何类型的引用?任何帮助,将不胜感激。

4

2 回答 2

1

编译代码时,Excel 会检查“WorkSheet”对象类型是否有myFunction方法 - 它正在查看通用的内置 Worksheet 对象,这不包括您的“附加”功能(“VBComponent”也不包括" 类型),因此它会引发错误。

如果您将参数类型更改为 Object(更通用的类型),那么它将编译...

Function testThis(x As Object)
    testThis = x.myFunction()
End Function
于 2012-07-05T16:10:02.740 回答
0

我知道这是一个旧线程,但我想我不妨分享我的发现。另外,我怀疑有更好的方法来评估每张工作表中完全相同的功能,但是对于任何搜索的人,这里有一个解决方案可以完全按照您在帖子标题中的要求进行操作。

在你的ThisWorkbook包括

Const myFunction = "myFunctuion"
Public ws as Worksheet

For each ws in Me.Sheets
    If testThis(ws) then Debug.print "Success!"
next ws

Function testThis(x as Worksheet)
    testThis = callByName x, x.CodeName & "." & myFunction
End Function
于 2013-11-17T07:03:24.397 回答