VBAでクラスモジュールを使用する場合、例えばユーザーフォームや標準モジュール内で使用する変数をクラスモジュール内でも共用するのは無しなのでしょうか? 例えば、下記の場合、

Visual Basic | Excel211閲覧

ベストアンサー

0

訂正 If UBound(items, 1) < columnNumber Then Err.Raise 5 GetNameUsingColumnNumber = items(columnNumber) を以下に訂正。 If UBound(items, 1) < columnNumber - 1 Then Err.Raise 5 GetNameUsingColumnNumber = items(columnNumber - 1)

ThanksImg質問者からのお礼コメント

皆さまありがとうございました。かなり迷いましたが、質問の意図にはっきりとご回答頂いた(変数の共用は原則として無し!と肝に命じました)ので、Banyan Treeさまをベストアンサーとさせて頂きます。 他の皆様もご親切にコードのご提案を頂いていたりしたので、非常に心苦しい限りですが、本当にありがとうございました。 確実にレベルアップしたことを実感しております。あとは繰り返し実践あるのみで頑張ります!

お礼日時:2021/11/30 20:23

その他の回答(2件)

0

私はPublic変数は基本的に使いません。マクロの規模が大きくなると メンテも大変ですし他の人にはまず読めないと思います。 以下のようにメンバ変数とアクセサでやり取りしています。 ユーザーフォームからクラスに渡す時も同じです。 <クラスモジュール"CSVDataBase"> Private X_() As Variant Property Get X() As Variant() X = X_ End Property Sub GetCSV_ItemName(ByVal filename As String, ItemNumber As Long) ~省略~ X_(Csv_b) = Split(buf, ",")(Csv_b) ~省略~ End Sub <ユーザーフォーム> Private X() As Variant Sub test() ~省略~ With New CSVDataBase .GetCSV_ItemName OpenFileName, i X = .X End With ~省略~ End Sub

ありがとうございます。わざわざ私のコードに合わせてご提案下さり、感謝致します。確認したいのですが、ご提案頂いたユーザーフォームのコードのWith New CSVDataBase~End Withの箇所は、代わりに下記のコードでも同じ意味でしょうか?(クラス初心者の為、あまりいろいろな書き方を見慣れていないものですから・・) Dim Csv as New CSVDataBase Csv.GetCSV_ItemName OpenFileName, i X=Csv.X また、メンバ変数とアクセサについてはできる限り調べてみて、何をやっているかは何となく理解できました。ただ、このやり方をするメリットは何でしょうか? 追加の質問みたいになってしまい恐縮ですが、よろしくお願いいたします。

0

クラス間で変数の値をやり取りするなら、Properyプロシージャを使うのが普通の作りだと思いますが。

ありがとうございます。Propertyプロシージャの存在は知っていたのですが、使うメリット等理解できないままです。まだまだ勉強中の為、なかなか一朝一夕ではいきませんね・・。頑張ります。