過去ログ

                                Page     536
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼パターンの無い繰り返し処理のスマート化  自己満足 03/1/12(日) 15:02
   ┣書き間違い 発見 !  自己満足 03/1/12(日) 18:06
   ┗Re:パターンの無い繰り返し処理のスマート化  Hirofumi 03/1/12(日) 20:46
      ┣Re:パターンの無い繰り返し処理のスマート化  Hirofumi 03/1/13(月) 7:24
      ┗配列利用でしたか  自己満足 03/1/13(月) 8:17
         ┗テスト結果の報告  自己満足 03/1/13(月) 9:27
            ┗Re:テスト結果の報告  Hirofumi 03/1/13(月) 10:12
               ┗Re:テスト結果の報告  自己満足 03/1/13(月) 17:41

 ───────────────────────────────────────
 ■題名 : パターンの無い繰り返し処理のスマート化
 ■名前 : 自己満足
 ■日付 : 03/1/12(日) 15:02
 -------------------------------------------------------------------------
   皆さんお久しぶりです。
この質問箱のおかげで良い方法を学べて、少しずつ
それらしい物が出来るようになりました。
(管理人さん、皆さん、ありがとうございます。)

段々と凝りだすと、プログラムが大きくなって来る事は仕方の無い事ですが、
出来るだけスマートに、と心がける今日この頃です。(時候の挨拶みたい...変!)

本題ですが、ユーザーフォームアクティブ時に、選択しているシート毎に
ユーザーフォーム内のテキストボックス入力が必要と不必要の別をつける為、
不要項目を薄色表示にして、フォーカスが取れないようにしたいのです。
1つ毎に設定するとシートやコントロールの数が多くなるととんでもない
行数になります。(それらをいっぱい作るとファイルサイズも大きくなります。)
以下のマクロ内の「Case Sheet2.Name」では
  For I = 1 To 8
    UserForm2.Controls("LA" & I).Enabled = False
    UserForm2.Controls("DA" & I).Enabled = False
  Next I
とすれば少しはスマートになるのですが、
数字が連続や同パターンで変化(たとえばstep3など)していないと使えませんよね。

数字が連続していない「Case Sheet1.Name」などの部分をスマートにする方法は
有りませんでしょうか?
語録が貧困なのでうまく表現出来ませんがよろしくお願いします。

ちなみに、LA3やLA6はラベル、DA3やDA6はテキストボックスの名前で、
同じ番号のラベルとテキストボックスは一対で表示を変えます。
また、シート毎に表示を変更するコントロールの数は固定です。
また、「Case Sheet2.Name」部分のみを上記に書き換えると1KB小さく
なりました。

Private Sub UserForm_Activate()
      Select Case ActiveSheet.Name
        Case Sheet1.Name
          With UserForm1
            .LA3.Enabled = False
            .DA3.Enabled = False
              .LA5.Enabled = False
              .DA5.Enabled = False
            .LA6.Enabled = False
            .DA6.Enabled = False
              .LA9.Enabled = False
              .DA9.Enabled = False
            .LA10.Enabled = False
            .DA10.Enabled = False
              .LA11.Enabled = False
              .DA11.Enabled = False
            .LA13.Enabled = False
            .DA13.Enabled = False
              .LA14.Enabled = False
              .DA14.Enabled = False
          End With

        Case Sheet2.Name
          With UserForm1
            .LA1.Enabled = False
            .DA1.Enabled = False
              .LA2.Enabled = False
              .DA2.Enabled = False
            .LA3.Enabled = False
            .DA3.Enabled = False
              .LA4.Enabled = False
              .DA4.Enabled = False
            .LA5.Enabled = False
            .DA5.Enabled = False
              .LA6.Enabled = False
              .DA6.Enabled = False
            .LA7.Enabled = False
            .DA7.Enabled = False
              .LA8.Enabled = False
              .DA8.Enabled = False
          End With
    End Select
End Sub
 ───────────────────────────────────────  ■題名 : 書き間違い 発見 !  ■名前 : 自己満足  ■日付 : 03/1/12(日) 18:06  -------------------------------------------------------------------------
   すみません。書き間違いがありました

>  For I = 1 To 8
>    UserForm2.Controls("LA" & I).Enabled = False
>    UserForm2.Controls("DA" & I).Enabled = False
>  Next I
>とすれば少しはスマートになるのですが、

ですが.......
UserForm2 の所は UserForm1
の間違いでした。

ぜんぜんスマートじゃない。(反省)
 ───────────────────────────────────────  ■題名 : Re:パターンの無い繰り返し処理のスマート化  ■名前 : Hirofumi <hirofumi@venus.dti.ne.jp>  ■日付 : 03/1/12(日) 20:46  -------------------------------------------------------------------------
   スマートでは無いですが、取りあえずこんなやり方でも簡単には成るよ
すこしスピードは落ちると思うけど

Private Sub UserForm_Activate()

  Dim i As Long
  Dim vntConNumb As Variant

  Select Case ActiveSheet.Name
    Case Sheet1.Name
      vntConNumb = Array(3, 5, 6, 9, 10, 11, 13, 14)
    Case Sheet2.Name
      vntConNumb = Array(1, 2, 3, 4, 5, 6, 7, 8)
  End Select
  
  With Me
    For i = 0 To 7
      .Controls("LA" & vntConNumb(i)).Enabled = False
      .Controls("DA" & vntConNumb(i)).Enabled = False
    Next i
  End With
  
End Sub
 ───────────────────────────────────────  ■題名 : Re:パターンの無い繰り返し処理のスマート化  ■名前 : Hirofumi <hirofumi@venus.dti.ne.jp>  ■日付 : 03/1/13(月) 7:24  -------------------------------------------------------------------------
   後で気が就いたのですが、ラベルをEnabled = Falseにしているのは余り意味がないのでは?
 ───────────────────────────────────────  ■題名 : 配列利用でしたか  ■名前 : 自己満足  ■日付 : 03/1/13(月) 8:17  -------------------------------------------------------------------------
   Hirofumi さん。おはようございます。
ご回答ありがとうございます。

これですよ、これ。
配列だったんですね。

>スマートでは無いですが、取りあえずこんなやり方でも簡単には成るよ
いえいえ、この例では数が少ないからそうでも無いですが、私が書いた
ものと比べれば断然スマートです。

>すこしスピードは落ちると思うけど
う〜ンちょっと辛いけど人間の感覚では早いでしょう。

>後で気が就いたのですが、ラベルをEnabled = Falseにしているのは余り意味がないのでは?
実際にはご指摘の通りまったく意味が無いのですが、私が作った物を使う人たちは
目の悪い人が多いのか、文字のある横を一生懸命クリックして
「文字が入らない、どうしてだ」と聞きにくるので理由を言うと、
「はじめっから表示するな」と言われるんですよ。(泣)

カッコウを言われるので、見た目の表示(項目を赤くしたり、文字を大きくしたり)
に多大な労力が掛かり、概してファイルが大きくなるのです。
でもこの方法で、かなり小さくなると思います。(あとはメモリ不足の問題?)
ありがとうございました。
 ───────────────────────────────────────  ■題名 : テスト結果の報告  ■名前 : 自己満足  ■日付 : 03/1/13(月) 9:27  -------------------------------------------------------------------------
   不細工式とスマート式でテストマクロを組んだところ
280KBが255KBと25KBの節約となりました。

このまま作成マクロを作り変えるとマイナスKBになりそうで(ならねーヨ)
楽しみです。
 ───────────────────────────────────────  ■題名 : Re:テスト結果の報告  ■名前 : Hirofumi <hirofumi@venus.dti.ne.jp>  ■日付 : 03/1/13(月) 10:12  -------------------------------------------------------------------------
   書き忘れた事が有りました

>また、シート毎に表示を変更するコントロールの数は固定です。
との事で今回は以下のように書きましたが

    For i = 0 To 7

もし、コントロールの数が不定なら(違わなくても)

    For i = 0 To UBound(vntConNumb)

の様にすれば、配列に設定した数だけ変更できます

それと、ラベルのEnabledの件ですが
>「はじめっから表示するな」と言われるんですよ。(泣)
なら、釈迦に説法かも知れませんがVisible を Falseにして表示しない手も有りますよ
 ───────────────────────────────────────  ■題名 : Re:テスト結果の報告  ■名前 : 自己満足  ■日付 : 03/1/13(月) 17:41  -------------------------------------------------------------------------
   Hirofumi さん。追加情報どうもです。

>もし、コントロールの数が不定なら(違わなくても)
>
>    For i = 0 To UBound(vntConNumb)
>
>の様にすれば、配列に設定した数だけ変更できます

UBound(配列名)ですね、覚えておきます。

>なら、釈迦に説法かも知れませんがVisible を Falseにして表示しない手も有りますよ

すでにやってみたのですよ。歯抜けで表示されますよね。
...んで、これを見られたら「整理しろ」は確実なのでやめました。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 536