2017-03-29 21 views
1

私は、オートメーションのスケジューリングのコードを書いています。私はVBAプログラミングには比較的新しいですが、何年も他の言語でプログラミングしています。私のプロジェクトでは、操作フロアをシミュレートするはずのOpsFloorというクラスを作成しました。私は配列にユーザー情報を解析していて、その配列を渡そうとしています(私は配列全体と個々の値を渡してみました)をOpsFloorオブジェクトのインスタンスに渡しました。クラスがVBAでどのように動作するかについて、いくつかの基本的な誤解があることを心配しています。以下は、ここでは、クラス内のカスタムクラスオブジェクトのメソッドを呼び出すことができません。Excel VBA

Public Sub SetProcessMatrixValue(x As Integer, y As Integer, value As Integer) 
    ProcessMatrix(x, y) = value 
End Sub 

からサブは、Excelのワークシートオブジェクトのサブ内からの呼び出しです:

Option Explicit 
Private OperationMatrix(18, 8) As Integer 
Private dailyWF As New OpsFloor 
Public Sub StartingWorksheet() 
... 
dailyWF.SetProcessMatrixValue 0, 0, 30 
End Sub 

私はクラスのインスタンスにそれらの値を割り当てるために、サブを実行しようとするとSetProcessMatrixValueメソッドを使用して、実行時エラー '438'オブジェクトがこのプロパティまたはメソッドをサポートしません。

+0

ご迷惑をおかけして申し訳ありませんが、どこからコードを取得したのかわかりません。 –

+0

申し訳ありませんが、私のコードだった:)この 'dailyWF.SetProcessMatrixValue 0、0、30'行で起きているのですか? –

+1

私は実際にそれを理解しました。私のクラスはコンストラクタコードのエラーのため正しくインスタンス化されませんでしたが、 'Dim dailywF As OpsFloor:Set dailyWF = New OpsFloor'の代わりに' Private dailyWF As New OpsFloor'を使用したので、コンストラクタ内のエラー(コレクションに追加するときは不要な括弧)、今は完全に実行されます。 –

答えて

1

私はいくつかの問題を抱えていましたが、多くの異なる投稿をつなぎ合わせて解読することができました。

はまずな方法は、私はもともと私のクラス変数を宣言:

Private dailyWF As New OpsFloor 

これが適切にクラスのオブジェクトをインスタンス化しませんでした。

Private dailyWF As New OpsFloor 
Set dailyWf = New Operations_Floor 

私はクラスコンストラクタを指摘してエラーが発生しました。それは、コレクションにオブジェクトをどのように割り当てていたのかという問題であった。私のような他のnewbsのために

newCollection.Add(new Object) //WRONG! 
newCollection.Add new Object //Right! 

私はツールに行くことによって、「クラスモジュールで中断」をオンに推奨記事を見つけました> [オプション]> [全般]> [クラスモジュールで中断。これは、クラスのコンストラクタの内部にエラーがあり、実際に私が呼び出したときの問題ではないことを示しました。

関連する問題