2016-09-11 23 views
0

この質問は、クラス内のフロー制御、およびクラスサブセットの使用方法や変数のスコープの定義方法についての詳細です。VBAクラス:オブジェクト必須424

このクラスは、あらかじめ定義された範囲を入力(ソース範囲)として取ります。この範囲には、クラスプロパティを検索して使用して、必要に応じてこれらの値を呼び出すためのさまざまなフラグがあります。

フラグを満たす範囲内の特定の領域を収穫するために、インナークラスサブ(またはクラスメソッドの場合)をどのように呼び出すべきかわかりません。あなたは、コードを見れば

、私はコード内のpSourceRange成功SETすることができましたとしているが(Nullを返す)Titleをゲットプロパティを使用しますが、私は内のサブを呼び出す必要がありますかどうかはわかりませんクラスからそのタイトルを釣り上げるクラス。このクラスは公開か非公開か?それは方法ですか? Range SETまたはTitle GET文の後に実行する必要がありますか?

私は、私は私のコメントがクリアされているかわからない

''''''''''''''''''''''Module Code'''''''''''''''''''''''''' 
Public Sub AA_StandardCode() 
    dim testrange as range 

    'test range does already exist as range 
    Set TestRange = Range("A1:b100") 

    Dim HarvestClass As New HarvestCode 
    Set HarvestClass.SourceRange = testrange 

    'Error Runtime 424: object required 
    'HarvestClass.GrabStaticOuterCode(TestRange) 

    MsgBox HarvestClass.Title 
    ' a Null value is returned, implying nothing was entered 
End Sub 
''''''''''''''''''''''Class Module Code'''''''''''''''''''' 
Option Explicit 

'Static Contents 
Private Const cTitle As String = "1111111," 

Private pSourceRange As Range 
Private pTitle As String 

Public Property Set SourceRange(Value As Range) 
    Set pSourceRange = Value 

    'Error Runtime 424: object required 
    'GrabStaticOuterCode(pSourceRange) 
End Property 

Public Property Get Title() As String 
    'Error Runtime 424: object required 
    'GrabStaticOuterCode(pSourceRange) 

    Title = pTitle 
End Property 

''''''''''''''' 

Public Sub GrabStaticOuterCode(pSourceRange As Range) 
    Dim rng As Range 
    Dim strTest As String 

    For Each rng In pSourceRange 
    strTest = Mid(rng, 1, 4) 

    Select Case strTest 
     Case cTitle 
     pTitle = Mid(strTest, 5, Len(strTest)) 
     Case Else 
    End Select 
    Next rng 

End Sub 
+1

はここにいくつかのコードが実行時エラーを取り除くために修正されています:( ":B100 A1") '' TestRange =レンジの前に 'Set'を使用してください。次に、3つの点で括弧を削除します。例えば、 'HarvestClass.GrabStaticOuterCode(TestRange)'は 'HarvestClass.GrabStaticOuterCode TestRange'になります。 –

+0

投稿する前に物事をきれいにしましたが、私はテストレンジの前にセットを持っていました。 (私は括弧を削除すると、私は今メッセージを受け取ります(プロパティの無効な使用)。しかし、私はソースの範囲をパラメータとして渡す必要はありません()? –

+0

下記の私の答えを見てください。そこにコードがありますが、何も返されません。あなたのデータがどのように見えるか、あなたがメッセージで見たいものはわかりませんが、 。 –

答えて

1

。今のエラーコードでコメントアウトされている(私が試したオプションを指摘しようとした本かもしれませんがそうしました。完全な答えはまだ、私は走るクリーンアップコードを掲載していられない私たちはそこからフォローアップすることができます

正規モジュール

Public Sub AA_StandardCode() 
Dim testrange As Range 
Dim HarvestClass As New HarvestCode 

Set testrange = Range("A1:b100") 
Set HarvestClass.SourceRange = testrange 
HarvestClass.GrabStaticOuterCode testrange 
MsgBox HarvestClass.Title 
End Sub 

クラスモジュール

'Static Contents 
Private Const cTitle As String = "1111111," 
Private pSourceRange As Range 
Private pTitle As String 

Public Property Set SourceRange(Value As Range) 

Set pSourceRange = Value 
GrabStaticOuterCode pSourceRange 

End Property 

Public Property Get Title() As String 

GrabStaticOuterCode pSourceRange 
Title = pTitle 

End Property 

Public Sub GrabStaticOuterCode(pSourceRange As Range) 
Dim rng As Range 
Dim strTest As String 
For Each rng In pSourceRange 
    strTest = Mid(rng, 1, 4) 
    Select Case strTest 
     Case cTitle 
     pTitle = Mid(strTest, 5, Len(strTest)) 
     Case Else 
    End Select 
Next rng 
End Sub 
+0

WOW、それはうまくいきました。ありがとう、私はまだそれが動作する理由が少し混乱していると思います。Q1。) "GrabStaticOuterCode"はメソッドであると言うのは間違いありませんか? Q2。プロセスを呼び出すときになぜ私は()を必要としないのですか? Q3。このコマンドを呼び出すためのベストプラクティスは何ですか?ソース範囲セット、タイトルGet、またはモジュール呼び出しの中にあるべきか? Q4。なぜそれは前に働かなかったのですか(これは一般的なものです) –

+0

1)はい2)http://dailydoseofexcel.com/archives/2012/05/01/quick-vba-tip-eparentheses/を参照してください。 http://stackoverflow.com/q/5413765/293078。私は彼らがここにどのように当てはまるか完全には分かっていないが、私がその誤りを犯すと、私はいつも括約筋を取り除くことを試みる3)私は知らない4)#2を見てください。この回答はあなたのために働いたので、その横のチェックマークをクリックして受け入れてください。 –

関連する問題