Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11617 / 13646 ツリー ←次へ | 前へ→

【15105】オブジェクトを配列化できないでしょうか? はっしー 04/6/15(火) 17:38 質問[未読]
【15106】Re:オブジェクトを配列化できないでしょう... 角田 04/6/15(火) 17:52 回答[未読]
【15107】Re:オブジェクトを配列化できないでしょう... Jaka 04/6/15(火) 17:56 発言[未読]
【15113】Re:オブジェクトを配列化できないでしょう... Ron 04/6/15(火) 22:19 回答[未読]
【15136】Re:オブジェクトを配列化できないでしょう... はっしー 04/6/16(水) 12:27 お礼[未読]

【15105】オブジェクトを配列化できないでしょうか...
質問  はっしー  - 04/6/15(火) 17:38 -

引用なし
パスワード
   いつもお世話になっております m(_ _)m。

現在、ラベルをシートのセルのように並べたフォームを作っています。
ラベルの名前を
1列目 lbl0101, lbl0201, lbl0301
2列目 lbl0102, lbl0202, lbl0302

という具合にしています。

これを初期化する時にデフォルトの背景色やフォントを決めて、値を表示するたびに背景色、フォントを変えて、さらに値を変える前に初期化→値の変更、といった具合のコーディングをしています。

初期化の欄に

With lbl0101
   .backcolor = ########
   .caption  = ########
End with

といった具合にラベルの数だけ書き連ねています。
もちろん値を変更するコードでも同じようなことをしています。
かなり大量にラベルがあるので(ざっと勘定をしたところ210×3枚ありました(-_-;))面を食らっています(自分で作っておきながら)。

そこで、このコードをもっと効率的にする方法はないのか考えています。
例えばlbl0101などオブジェクト名の後半部分の数字を配列化して、変数を当ててループでまわすようなことができればだいぶすっきりしたコードになると思うのですが。

どなたかいい方法があればご教示いただきたく思います。
なにとぞよろしくお願いいたします。

【15106】Re:オブジェクトを配列化できないでしょ...
回答  角田 WEB  - 04/6/15(火) 17:52 -

引用なし
パスワード
   こんにちは。
>現在、ラベルをシートのセルのように並べたフォームを作っています。
それこそ「スプレッドシート」コントロールを使ったらどうですか?
ツールボックスで右クリック「その他のコントロール」の中に
 Microsft Office SpledSheet Control
というのがありますよ。
ただ、使い方などはネットを検索するなどしてください


>そこで、このコードをもっと効率的にする方法はないのか考えています。
>例えばlbl0101などオブジェクト名の後半部分の数字を配列化して、変数を当ててループでまわすようなことができればだいぶすっきりしたコードになると思うのですが。
下記参考に
http://www.h3.dion.ne.jp/~sakatsu/Breakthrough_P-Ctrl_Arrays.htm

【15107】Re:オブジェクトを配列化できないでしょ...
発言  Jaka  - 04/6/15(火) 17:56 -

引用なし
パスワード
   こんにちは。
この辺とか..。

http://www.vbalab.net/vbaqa/data/excel/log/tree_234.htm

【15113】Re:オブジェクトを配列化できないでしょ...
回答  Ron  - 04/6/15(火) 22:19 -

引用なし
パスワード
   こんにちは。
参考までに。

'=====フォームのモジュールに==========================

Private MyLabels() As String 'test2用

Private Sub UserForm_Click()

'  Call test1
  Call test2

End Sub

'test2の場合
Private Sub UserForm_Initialize()

  Dim ctrl As MSForms.Control
  Dim i As Long
  With Me
    For Each ctrl In .Controls
      If ctrl.Name Like "lbl*" Then
        ReDim Preserve MyLabels(i)
        MyLabels(i) = Mid(ctrl.Name, 4)
        i = i + 1
      End If
    Next
  End With

End Sub

Sub test2()

  Dim i As Long
  For i = LBound(MyLabels) To UBound(MyLabels)
    With Me.Controls("lbl" & MyLabels(i))
      .BackColor = &H8000000F
      .Caption = MyLabels(i)
    End With
  Next

End Sub

Sub test1()

  Dim ctrl As MSForms.Control
  With Me
    For Each ctrl In .Controls
      If ctrl.Name Like "lbl*" Then
        ctrl.BackColor = &H8000000F
        ctrl.Caption = "1"
      End If
    Next
  End With

End Sub

'===================================================================

では。

【15136】Re:オブジェクトを配列化できないでしょ...
お礼  はっしー  - 04/6/16(水) 12:27 -

引用なし
パスワード
   うぉー、すごい!(≧∇≦)

角田様、JaKa様、Ron様、ご教示にありがとうございました。
目からうろこが落ちた思いです。
とはいえ、理解、習得するのに少し時間がかかりそうですが(特にクラスの話になるとついていけなくなります(゚ー゚;A)がんばってみたいと思います。
本当にありがとうございました。

11617 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free