Excel2007 VBA Daoクラス
コーディング設計の質問です。
Oracle10gのDBに以下のテーブルがあります。
テーブル名:TEST_TABLE
カラム名:CODE, NAME
これから値を取得する際以下の方法をとっているのですが、VBA的に変なやり方ではないでしょうか。
クラスモジュール:TestDao, TestBean
ExcelObjects-----------------
Set ArrayList = TestDao.GetSQLResult(Conn, "検索条件", "0")
For i = 1 To ArrayList.Count Step 1
Set Bean = New TestBean
Set Bean = ArrayList.Item(i)
Call Draw(Sheet, Bean, 1, 1)
Row = Row + 1
Set Bean = Nothing
Next i
描画メソッド--------
Private Sub Draw(ByVal Sheet As Object, _
ByVal Bean As Object, _
ByVal Row As Integer, _
ByVal Col As Integer)
Sheet.Cells(Row, Col).Select
ActiveCell.FormulaR1C1 = Bean.GetCode()
Sheet.Cells(Row, Col + 1).Select
ActiveCell.FormulaR1C1 = Bean.GetName()
End Sub
JAVAに触った方ならわかると思うのですが、
TestDaoにはSQL文を記述・実行し、取得した結果を格納する。
TestBeanにはテーブルのカラムのプロパティを配置しています。
VBAの場合、こういったクラスを作成する必要はありますでしょうか。
(より良いやり方はありますでしょうか)
お礼
>公式の文書、というかオブジェクトブラウザではだめでしょうか。 OKです。素晴らしい。 #オブジェクトブラウザ自体は知っており、かつ、いくつかのサイトでDefaultなるものを見たと思ったので、漁ってみようとして載ってないものとして諦めてた。「非表示のメンバを表示する」というオプションを見逃したばっかりにorz(アンダースコアがあることにも気づいてなかったな、俺) #その後、TextBoxにデフォルトプロパティがないと焦った。ええ、Excel側に含まれるTextBoxとMSFormsのTextBoxは違う、という単純なオチでしたが。 >丁度進行中のスレッドがあるようです。 長いんで後でじっくり読む予定。 #「ポイント付ける前に読んで実験しろ」とか質問者に対して思っていた手前、読む前にポイントをつけるのもなんなので少し遅れるかも。 ちなみに、Q6372450用に拵えていたコードは、 Option Explicit Sub Main() Dim v As Variant Dim i As Integer Dim s As String v = 9 i = 9 s = "10" MsgBox (v > s) '文字列比較でTrue MsgBox (i > s) '数値比較でFalse End Sub って奴です。 http://msdn.microsoft.com/en-us/library/ee200271%28v=PROT.10%29.aspx >There is an exception to the rules in the preceding table when both operands have a declared type of Variant, with one operand originally having a value type of String, and the other operand originally having a numeric value type. In this case, the numeric operand is considered to be less than (and not equal to) the String operand, regardless of their values. 「数値より文字列が常に大きいとされるのは両方がVariant型の時」ですから、Variantが戻るValueプロパティと違いTextプロパティはStringなので、Q6372450には適用されないでしょう。 また、Excel 2003のヘルプから >一方の式が数値データ型、他方がバリアント型 (内部処理形式は数値データ型または数値に変換できる文字列型) の時は数値比較で、 >一方の式が文字列型、他方がバリアント型 (Null 値を除く) の時は文字列比較となります。 まぁ向こうで回答するかはわかりません(気分次第)