- ベストアンサー
「Select Case」より短く組む方法はあるでしょうか?
- 印刷したいレポートが24種類あり、各レポートには1月~12月のどれかが印刷されます。
- 月が印刷済の用紙を再使用する場合もあり、印刷済の月に消線をする処理があります。
- 一部抜粋されたコードでは、Select Case文を使用して各レポートと月の組み合わせに応じた処理を行っています。しかし、コードが長くなりすぎてしまっています。より短く組む方法はないでしょうか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
「VB」と一言で言っていますけど、VB6(VBA/VBS含む)と VB.NET(VB2008等)では全く異質な言語です。 正しく環境を記述しないと、判断できません。 Reports というコレクションから判断してAccess・VBAだと 仮定します。 先ず、stdocnameがレポート名を示しているので、次のように オブジェクトを設定します。 Dim Repo As Report Set Repo = Reports(stdocname) '名前で取得する方法 次にdeltが月を示しているようなので、これを名前の一部と します。 Dim m As String m = Format(delt, "00") '必ず2桁の数字になる 以上を組み合わせると、以下のようになります。 Dim Repo As Report Dim m As String Set Repo = Reports(stdocname) m = Format(delt, "00") Repo.Controls("直線A" & m).Visible = True Repo.Controls("直線B" & m).Visible = True Repo.Controls("直線C" & m).Visible = True 先ず、FormsとかReportsと複数になっているものは コレクションと呼ばれ、オブジェクトの集合を表します。 これから単数のオブジェクトを得るには名前(文字列)か インデックス(数値)を指定します。上の例ではRepoの データ型はReport(単数形)ですね。 このReportオブジェクトにはコントロールコレクションが あります。これが、Controlsです。これも名前を指定する ことで、特定のコントロール(オブジェクト)を示すことが できます。 今後は「Reports!レポート12下!~」のような記述は避ける ことをお勧めします。
お礼
どうもありがとうございます。 「レポート印刷実行時に明細項目が#Errorになってしまいます。」 同様、作り直しをしてみようと思います。 今後は「Reports!レポート12下!~」のような記述は避ける ことをお勧めします。 上記ご指南頂いたように、レポートの見直しもあわせてみてみたいと思います。
補足
ご回答ありがとうございます。 無知で申し訳ありません。 要するに、添え字(Index)を使用した方が良いと言う事でしょうか?。