これはthisへのフォローアップです。VBA継承へのフォローアップ、コンストラクタは機能していませんか?
私の使用例は次のとおりです。2つのExcelファイルをセルごとに比較して、異なるセルをハイライトしたいと思います。各ファイルにはいくつかのシートがあり、各シートにはいくつかの列があり、それぞれにヘッダーといくつかの値(典型的に)があります。ここで比較コードのための私のドラフトアクティビティ図は次のとおりです。
そして、ここでは私のドラフトクラス図である:
私の目標は、物事の種類のためにVBAはあまり面倒にすることです私はしばしば(新旧のバージョンのスプレッドシートを比較するなど)します。もちろん
For Each Sheet1 In File1
Name1 = Sheet1.Name
If File2.sheet_dict.Exists(Name1) Then
Sheet2 = File1.Sheets(File2.sheet_dict(Name1))
Sheet2.Checked = True
For Each Col1 In Sheet1.cols
hdr = Col1.Header
If Sheet2.header_dict.Exists(hdr) Then
Col2 = Sheet2.cols(Sheet2.header_dict(hdr))
Col2.Checked = True
For Each Val1 In Col1.Vals
Val2 = Col2.Vals(Val1.row_number)
Val2.Checked = True
If Not Val1.Match(Val2) Then
Val1.formatBad()
Val2.formatBad()
End If
Next Val1
For Each Val2 In Col2.Vals
If Not Val2.Checked Then
Val2.formatBad
End If
Next Val2
Else
Col1.formatBad()
End If
Next Col1
For Each Col2 In File2.cols
If Not Col2.Checked Then
Col2.formatBad
End If
Next Col2
Else
Sheet1.formatBad()
End If
Next Sheet1
For Each Sheet2 In File2
If Not Sheet2.Checked Then
Sheet2.formatBad()
End If
Next Sheet2
は、私が最初にオブジェクトにロードするすべてのデータを持っていると思いますが、あなたが得る:それは私はそれがよりPythonのような仕事をしたい、です...特に、私はこのようなコードを書きたいですアイデア。 VBAでこれをやろうとするのは夢中ですか?
こんにちは:)。私の意見では、自分のやり方でExcelのCOMクラスモデルを何とか書き直しています。それだけでは十分ではありません。 'Sheet_Exists(..)、Header_Exists(..) 'など、モデルに適切に存在しない操作を単純化したり追加したりしたい場合は、独自の追加セットを使用してモデルを充実させますクラスモデルを書き換えることはできません。 –
ExcelのCOMクラスモデルの良い図を知っていますか?私は、通常は範囲内のセル(通常は列の上に、次に列の値の上にある)に対して繰り返し実行するという複雑な方法を使わなくてもいいようにしています。私は列の最後の列、行の最後の列などを取得する方法を決して覚えていません。これらの関数を記述しましたが、それは直感的ではありません。そのコードをクラスにラップすると、プロセスが単純化されると思っていました。私は間違ってそれについて行きますか? –
私はそれをグラフィックやUML形式では持っていません。 [This](https://msdn.microsoft.com/en-us/library/office/ff194068.aspx)は、Excelのオブジェクトモデルのガイドです。私はモデルの小さな部分*のグラフィックを見つけました(ここはhttps://powerspreadsheets.com/excel-vba-object-model/) –