0

これは、エラー 91 に関する#12772920の投稿の続きです。(1) この行がコメント アウトされている場合、(2) エラー 91 が生成されます。コメント アウトされていない場合、コードは正常に実行されます。(3) これは public obj shCompanies が "Companies" シートを指すはずですよね? この行が (1) のように shCompanies オブジェクトを設定していないように見える理由がわかりません。

Option Explicit
Public wbCode As Workbook

Public Sub Main()
   Dim tables As New CTables
   Set wbCode = ThisWorkbook
   Call SetExcelObjects
   (2)Call tables.Indexing
End Sub

Public Sub SetExcelObjects()
   Dim tables As New CTables
   (3)Set tables.shCompanies = wbCode.Worksheets("Companies")   
End Sub


---Class Module CTables
Option Explicit
Public shCompanies As Worksheet

Public Sub Indexing()
   Dim rng As Long
   Dim tables As New CTables
   (1)Set tables.shCompanies = wbCode.Worksheets("Companies")
   rng = tables.shCompanies.UsedRange.Rows.Count
End Sub
4

1 に答える 1

0

tablesのパブリック インスタンスとして宣言する必要がありますCTables。その後、さまざまなモジュールから操作できます。「スレートをきれいに拭く」ように再宣言すると、表示されているエラーが発生します。の中でテーブルのインスタンスを宣言したくないのは確かですCTables

ベスト プラクティスは、インスタンス化するテーブルをその宣言から分離することであることに注意してSet tables = New CTablesくださいMain

以下は私のためにコンパイルして実行します。私はそれがあなたが期待することをすると思います:

Public wbCode As Workbook
Public tables As New CTables

Public Sub Main()
Set tables = New CTables
Set wbCode = ThisWorkbook
Call SetExcelObjects
Call tables.Indexing 
End Sub

Public Sub SetExcelObjects()
Set tables.shCompanies = wbCode.Worksheets("Companies")
End Sub

    'Class CTables
Public shCompanies As Worksheet

Public Sub Indexing()
   Dim rng As Long
   rng = shCompanies.UsedRange.Rows.Count
End Sub
于 2012-10-08T14:01:02.787 に答える