イメージコントロールの代入を簡単にしたい

このQ&Aのポイント
  • エクセル2003のVBAでイメージコントロールの代入処理を簡単にしたいです。ループや配列を使用することで効率的な処理ができるでしょう。
  • イメージコントロールの代入をループや配列を使って簡単に行いたいと考えています。エクセル2003のVBAを使用することで実現できるでしょう。
  • エクセル2003のVBAでイメージコントロールの代入処理を簡単にする方法について検討しています。ループや配列を活用することで効率化できるでしょう。
回答を見る
  • ベストアンサー

イメージコントロールの代入を簡単にしたい。

エクセル2003のVBAで次のイメージコントロールの代入処理をループや配列などを使って簡単にしたいのですが出来ますでしょうか? Dim photo As New Collection photo.Add Item:=Image1 photo.Add Item:=Image2 photo.Add Item:=Image3 photo.Add Item:=Image4 photo.Add Item:=Image5 photo.Add Item:=Image6 photo.Add Item:=Image7 photo.Add Item:=Image8 photo.Add Item:=Image9 photo.Add Item:=Image10・・・以下は~image26まで続いています。以下省略。image1~26はイメージコントロールです。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 以下、Me は、それぞれ、このようになります。 ローカルモジュールでなかったら、それぞの親オブジェクトを指定してください。 ところで、このようなコードを作るというのは、インスタンスでも設けるのですか? 一般的には、Collection で、まとめるのは必要ないような気がします。配列は可能ですが、使わない方が良いです。 '------------------------------------------- 'UserForm 上 (Me = UserForm) Dim photo As Collection Set photo = New Collection Dim i As Long For i = 1 To 26  photo.Add Me.Controls("Image" & i) Next '------------------------------------------- 'ワークシート上 (Me = Worksheet) Dim i As Long Dim photo As Collection Set photo = New Collection For i = 1 To 26 photo.Add Me.OLEObjects("image" & i) Next i '-------------------------------------------

w_kiyo123
質問者

お礼

ご回答ありがとうございます。 教えられたコードを試したらうまく動きました! ありがとうございました!

関連するQ&A

  • Nothingを代入しないままNew

    VBAでコレクションの要素を一括削除する方法として、下記のコードが掲載されていましたが Nothingを代入しないままNewを使用しても問題ないでしょうか。 また、この辺りの挙動について詳しく書かれているサイトがありましたら、ご教示頂ければ幸いです。 Dim fruits As Collection Set fruits = New Collection With fruits Call .Add("バナナ") Call .Add("リンゴ") Call .Add("ミカン") End With Set fruits = New Collection

  • Collectionによる多次元配列

    VBAでCollectionを二つ使用し、 値が入ったCollectionをもう片方のCollectionに入れて2次元配列のようにしたいのですが、 やり方がいまいちわかりません。 確か昔にそういった使い方をした記憶があるのですが、 ネットで調べてもみかけないので困っています。 Dim colA As Collection Dim colB As Collection Set colA = New Collection Set colB = New Collection colB.Add ("A") colB.Add ("B") colB.Add ("C") ※ colA.Item(1) = colB. Set colA = Nothing Set colB = Nothing 上記の※の箇所をどうすれば入れられるのでしょうか。 宜しくお願い致します。

  • 【VB2005】コントロールを配列に。

    下記のコードを変更して、コントロールの値を配列に代入して、 その値をもとに、ボタンを複製して追加したいと思っています。 Public Class frmStart Dim btnNewButton1 As New Button Private Sub frmStart_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load NewButton1.Text = "処理1" btnNewButton1.ForeColor = Color.DimGray btnNewButton1.Location = New Point(10, 100) btnNewButton1.Size = New Size(180, 30) '// ボタンを追加します Me.Controls.Add(btnNewButton1) end sub End Class やりたいことは、Dim btnNewButton() As New Button のようにデータを配列にして、 btnNewButton(0).ForeColor = Color.DimGray btnNewButton(0).Location = New Point(10, 100) btnNewButton(0).Size = New Size(180, 30) btnNewButton(1).ForeColor = Color.DimGray btnNewButton(1).Location = New Point(380, 100) btnNewButton(1).Size = New Size(180, 30) '// ボタンを追加します Me.Controls.Add(btnNewButton(0))     Me.Controls.Add(btnNewButton(1)) という事をしたいのですが、方法が解らなくて困ってます。 お知恵を貸してください。

  • 配列 シャッフルの高速化をするには?

    お世話になります。 私は今10万個の数字を配列に格納し シャッフルしていく問題を抱えております。 下記のプログラムだと 時間がかかりすぎて実用にたえません。 速くするにはどうすればよろしいでしょうか? Dim colBefore As Collection Dim colAfter As Collection Dim i As Long Set colBefore = New Collection Set colAfter = New Collection For i = 1 To 13 colBefore.Add CStr(i) Next Do Until colBefore.Count = 0 i = Int(Rnd(1) * (colBefore.Count - 1)) + 1 colAfter.Add colBefore.Item(i) colBefore.Remove i Loop For i = 1 To 13 Debug.Print colAfter.Item(i) Next

  • コントロール配列

    VB.NETでコントロール配列を行うときには、 dim txt as testbox = new textbox txt = me.textbox1 とすれば、フォーム上のtextbox1をtxtで 操作することが可能となりますが、 txt = me.textbox1というのは、me.textbox1の 参照先を代入していることとなるのでしょうか?

  • 擬似コントロール配列への代入

    お世話になります Dim i As Integer For i = 1 To 3   Sheets("Sheet1").OLEObjects("コンボ" & i).Value = i Next http://oshiete1.goo.ne.jp/kotaeru.php3?q=2372410 上記を参考の上で擬似コントロール配列への代入式を書いたのですが 「オブジェクトは、このプロパティまたはメソッドをサポートしていません」とエラーになってしまいます もちろん対象のコンボボックスのソースには代入される値は用意されています。 よろしくお願いします

  • DataTableの値を変数に代入したい

    DataTableの値を変数に代入したい 以下のコードのにてDBから『職員ID』・『氏名』を取得しSyokuin(,)の2次元配列に代入したいのですが Do Loopのところで『オブジェクト参照がオブジェクトインスタンスに設定されていません』とエラーが出ます。 ほかのところでほぼ同様のコードでデータグリッドビューに表示はうまくいくんですが? Using OleCn As New OleDbConnection(省略) Using OleCmd As New OleDbCommand(省略) Using OleDAdp As New OleDb.OleDbDataAdapter() OleCmd.Connection = OleCn '配列取得 OleDAdp.SelectCommand = OleCmd OleDAdp.Fill(OleDSet, "職員") Dim i As Integer = 0 Dim jAs Integer = 0 Do Until j= OleDSet.Tables("職員").Columns.Count - 1   Do Until i = OleDSet.Tables("職員").Rows.Count - 1   Syokuin(j, i) = OleDSet.Tables("職員").Rows(i)(j)   i += 1   Loop j += 1 Loop End Using End Using End Using ご教授お願いします

  • VBSでのコレクション

    教えてください。 VBのコレクション配列はVBSにはあるのでしょうか? クラスオブジェクトをコレクション配列に入れたいのですが.... 例: Class myclass : : End Class Sub Main() dim col as Collection dim mycl mycl = new myclass col = new myClass for i =0 to max myclass.xxx = xxxx col.add i mycl next End Sub 以上簡単ですが、myclをコレクション配列に格納したいのですが、

  • GridViewにバインドせずにデータを表示する方法

    環境:VS2008&VB.NET&ASP GridViewに手動でテーブルからデータを読みデータバインドせず DBの値を表示する方法を考えていますがうまくいかず困っています。 (データバインドしたくない理由はデータバインドを行っていると行の挿入や移動ができない認識のためです。) 初心者のため見当違いなことをしているかもしれませんが それも含めまして質問させていただきます。 質問1 そもそもGridViewでデータバインドせずに手動でデータを表示することは可能でしょうか。 質問2 以下のコードで試しましたが「GridView1.Controls(0).Controls.Add(row1)」でExeptionが発生してしまいました。 手順に不適格な箇所があるのでしょうか。 strSql = "SELECT * FROM Data_Table" Using connection As New SqlClient.SqlConnection(cnStr) Dim command As New SqlClient.SqlCommand(strSql, connection) connection.Open() Dim dr As SqlClient.SqlDataReader = command.ExecuteReader While (dr.Read = True) 'データあり str1 = dr("data1") str2 = dr("data2") str3 = dr("data3") End If connection.Close() Dim item1 As DataGridItem item1 = New DataGridItem(-1, -1, ListItemType.Item) Dim cell0 As TableCell = New TableCell item1.Cells.Add(cell0) Dim cell1 As TableCell = New TableCell item1.Cells.Add(cell1) Dim cell2 As TableCell = New TableCell item1.Cells.Add(cell2) Dim row1 As New GridViewRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal) row1.Cells.Add(cell0) row1.Cells.Add(cell1) row1.Cells.Add(cell2) GridView1.Controls(0).Controls.Add(row1) End While End Using エラーの内容 System.ArgumentOutOfRangeException はユーザー コードによってハンドルされませんでした。 Message="指定された引数は、有効な値の範囲内にありません。 パラメータ名: index" お力添えをよろしくお願い致します。

  • 実行時追加したコントロールの識別

    VB2008を使用しています。 プログラム実行中に追加したコントロールをどのように識別すればいいのかがわからなくて困っています。 例えば以下のようにすると、 itemsが1と2のコンボボックスが10個できますが、 すべてNewComboBoxという名前のコントロールのため、 最終的にそれぞれ1か2どちらを選択したかを知りたいときに、 10個のコントロールをどのように識別すればよいかわかりません。 Dim NewComboBox As ComboBox = New ComboBox() For i = 1 To 10 NewComboBox = New ComboBox() NewComboBox.Items.Add(1) NewComboBox.Items.Add(2) NewComboBox.Location = New Point(5, 5 + (24 * (i - 1))) Me.Controls.Add(NewComboBox) Next 説明が不明瞭であるかもしれませんが、 お分かりの方いらっしゃいましたら、ご回答願います。

専門家に質問してみよう