2016-04-22 14 views
-1

Excel VBAでクラスを作成しようとしています。私のプライベートフィールドの1つは、範囲を返す関数への呼び出しを使用して設定されているはずです。そして、その関数の.Valueプロパティを直接代入します。範囲を返す関数のvba valueプロパティ

は、ここに私のコードの基本的な要点です:

' Somewhere up in the private field declaration 
Dim mMill as String 

' Where the private field is set (internal to class) 
mMill = getMill().Value 

' The 'getMill() function 
Private Function getMill() As Range 
' Define the range of the mill 

Set getMill = mLandingSheet.Range("D1") 

End Function 

私はオブジェクト変数を持つか、変数セットでないため「末端関数」ライン上のエラーを取得しています。私の考えは、Excelは関数を呼び出して、同じ行に返されたオブジェクト(この場合はRange)の.Valueプロパティを返すことを許可しません。私は、範囲を返し、いくつかの他の変数に代入し、そこから.Valueプロパティにアクセスする関数を使用できることを確認しました。私はむしろそうする必要はありません。

ありがとうございました!

+0

私はあなたがする必要があると思います問題の原因となるコード例をさらに詳しく説明すると、 'getMill'は' mMill'とやりとりしないので、その理由は不明です。 –

+0

'Set getMill = mLandingSheet.Range(" D1 ")。Valueが機能しない場合は、関数が' Range'を返さなければならないので、 –

+0

こんにちはアレックス、応答ありがとうございます。私はエラーがどこから来ているかを反映するコードの部分を含んでいます。 getMillは、行で呼び出される関数です:mMill = getMill()。Value。 また、関数getMill()はRangeを返します。別の変数(Set temp = getMill())で検証しました。私の問題は、(文字列として淡色表示されている)mMill変数への関数呼び出し(私が理解している文字列を返すはずです)の後に.Valueプロパティを直接割り当てようとすると発生します。 –

答えて

1

ハワイ、ワウ。だから...私の悪いみんな!私は自分自身とあなたに嘘をついた!

私のプライベートフィールド変数(mMill)はPrivateとして設定されていませんでした。mMill Asのような文字列が私の投稿に表示されているようでした。それは実際にPrivate mMill As Rangeとして割り当てられています!ダー!それをPrivate mMylに変更するとStringが問題を修正しました。

もう一度、私の悪い;この問題に関して私の盲点を克服するのに十分なほど私を批判してくれた@Alexに感謝します。

ごめんなさい!

0

Propertyを使用して値を設定する必要がありますか?

例:
clsMillExampleというクラスを作成します。

クラスにこのコードを追加します。

Private mMill As String 

Private Sub Class_Initialize() 
    MillRange = mLandingSheet.Range("D1") 
End Sub 

Public Property Get Mill() As String 
    Mill = mMill 
End Property 

Private Property Let MillRange(Reference As Range) 
    Select Case Reference.Value 
     Case Is <> "" 
      mMill = Reference.Value 
     Case Else 
      mMill = "Empty" 
     End Select 
End Property 

は、通常のモジュールにこのコードを追加します。

Sub Test() 

    Dim MillClass As clsMillExample 
    Set MillClass = New clsMillExample 

    MsgBox MillClass.Mill 

End Sub 

私は、一般的に参照のためにこのサイトを使用します。http://www.cpearson.com/excel/classes.aspx