

前回質問の続きです。
https://oshiete.goo.ne.jp/qa/9407682.html
下記Propertyプロシージャにおける、プロシージャ名、内部変数、引数の関係について説明頂きました。
Private p_Name As String
Private p_Age As Long
'Property Let ステートメント
Public Property Let Name(str As String)
p_Name = str
End Property
説明自体は分かりましたが、これ、そのまま引数付メソッドとして使えませんか?
プロパティ名はあくまで名前だけで、実際の処理内容は中身の p_Name = strなのだから、中身を変えれば何でも出来るのではないか?それってメソッドと同じでしょ?
例1
Public Property Let Name(str As String)
p_Name=str
msgbox p_Name
End Property
例2
Public Sub Name(str As String)
p_Name = str
End Sub
Property Let Name(str As String)
Sub Name(str As String)
両者の違いは何でしょうか?
No.2ベストアンサー
- 回答日時:
Classオブジェクトについては、
メソッドが、Sub プロシージャ/Function プロシージャで
プロパティが、Property
と考えると分かりやすいです。
そして、Propertyプロシージャは、戻り値を取得せずに実行だけするということができません。Sub は、戻り値を返さないメソッドで、Functionは、戻り値を返すメソッドです。
プロパティが性質はを表し、メソッドが動的な働きを見せるわけです。
そもそも、今回のスタイルのクラスのコードというのは、カプセル化(隠蔽化)のためのコードですから、ややこしい、しかし、その意味が今ひとつはっきりしてこないというご指摘は正しいと思います。VBAでは、簡易に用いることがあるので、この手の方法を実際には使うことは少ないと思うからです。実際、たかが、Excel VBAでも、本格的にClassをオブジェクト化してしまうと、ちょっとした修正さえ手の施しようがありません。
>Property Let Name(str As String)
>Sub Name(str As String)
>両者の違いは何でしょうか?
クラス・オブジェクトとしては、プロパティとメソッドということになりますね。
ただし、VBAでは、このようなコードに出会うことは、滅多にありません。また、以下のように、Public ステートメントをつけることも少ないです。元のコードに合わせてアレンジしてみました。
Excel VBAでの、Class は、ほとんどイベントの設定に使うものだからです。
'//
Class1
'----------------------
Private p_Name As String
Private p_Age As Long
'Property Let ステートメント
Public Property Let Name(myp_Name As String)
p_Name = myp_Name
End Property
Public Property Get Name() As String
'プロパティ
Name = p_Name
End Property
Public Sub NameChecker()
'半角の名前は不可とする メソッド
If LenB(StrConv(p_Name, vbFromUnicode)) = Len(p_Name) Then
Name = "err"
End If
End Sub
'-------------
'標準モジュール
Dim myClass As New Class1
Sub TestNameCheck()
With myClass
.Name = "WindFaller" ' "棚からぼたもち" '' 全角でないと通らない
.NameChecker .Name
Call TestOutcheck
End With
End Sub
Sub TestOutcheck()
MsgBox myClass.Name
End Sub
'画像は、プロパティとメソッドの違い

No.1
- 回答日時:
そのオブジェクトを使う側の記述方法が変わります。
プロパティ a.Name = str または str = a.Name
プロシージャ a.Name str1,str2,…
ファンクション str = a.Name(str1,str2,…)
プロパティ
・そのオブジェクトの属性(外からみれば見た目は内部変数)への代入や読み出しです。
プロシージャ(Sub)
・引数(str1,str2…)を一つではなく、無し、或いは二つ以上持つことができる。
ファンクション(Function)
・プロシージャに加え、何らかの処理結果を取得する。
イメージとしてプロパティは、オブジェクトの動作モードの設定
例:Application.ScreenUpdating = False
プロシージャ、ファンクションは引数を与えて、それを元になにか動作(処理)をさせるという感じですか。
例:MsgBox "こんにちは", vbInformation
rc = MsgBox("処理を行いますか?", vbYesNo)
ある意味、引数一つのプロシージャと、プロパティへの値の代入は、外からみれば機能的な見た目は似ていますね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBA 画像を貼り付ける...
-
servletからjspへオブジェクト...
-
MessageBox.Show(Me,…の「Me」...
-
サーブレットコンテキストの意...
-
PrintFormを使用してのプリント
-
VB.netでメソッドからコントロ...
-
エクセルVBA/SpecialCellsで特...
-
JSPでのArrayListの表示につい...
-
MIME::Parserのparse_dataメソ...
-
getHeigth,getWidthについて
-
javaで、、、
-
JavaScriptのプロパティとメソ...
-
UTF-8のテキストファイルを開く...
-
Excel VBA 定数にオブジェクト...
-
perl を用いた社内から社外への...
-
staticではないメソッドadd(Co...
-
VB.NETでのnothing の意義について
-
Excel 2007 <VBAでグラフの操作...
-
ピクチャーボックスに点を打つ...
-
Vba ListViewの行挿入に関して...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA 画像を貼り付ける...
-
Excel VBA 定数にオブジェクト...
-
サーブレットコンテキストの意...
-
C#のクラスで値渡しをする
-
VB.netでメソッドからコントロ...
-
servletからjspへオブジェクト...
-
エクセルVBA/SpecialCellsで特...
-
Vba ListViewの行挿入に関して...
-
C#で親にイベントを投げる方法
-
MessageBox.Show(Me,…の「Me」...
-
String型からlong型への変換は...
-
VB.NETでのnothing の意義について
-
UTF-8のテキストファイルを開く...
-
javaで、、、
-
System.Collections.SortedList
-
C#でのExcel操作について.(Ran...
-
VBSのGetFolderメソッドについ...
-
JSPでのArrayListの表示につい...
-
ピクチャーボックスに点を打つ...
-
VBAでの[]
おすすめ情報