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

これで、この行で「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 に答える